1. 什么是 Tesseract
Tesseract 是一個強大的字符識別 (OCR) 工具。它最初由 HP 發布,現在由 Google 和學術社區共同維護和開發。 Tesseract 支持多種語言和格式,能夠高效地識別圖片中的文字。
2. 如何安裝 Tesseract
要在 .NET 項目中使用 Tesseract,需要安裝相關的 NuGet 包和基礎依賴。步驟如下:
在項目中通過 NuGet 安裝 Tesseract 包:
dotnet add package Tesseract
安裝 SkiaSharp 來處理圖片:
dotnet add package SkiaSharp
3. 訓練數據從哪里下載
Tesseract 需要訓練數據文件來識別圖片中的文字。這些訓練數據文件可以從 Tesseract OCR GitHub https://github.com/tesseract-ocr/tessdata下載。選擇您需要的語言文件,并放置在項目相關目錄中。
4. 如何使用 Tesseract
使用 Tesseract 識別圖片中的文字,可以通過以下步驟完成:
創建一個 HttpClient 和 Logger ,用于下載圖片和記錄日志。
使用 SkiaSharp 來處理圖片。
使用 Tesseract 完成 OCR 識別。
例子如下:
using SkiaSharp;
using Tesseract;
namespace AutoGetOrder.WebAPI.Services.TesseractService
{
public class TesseractOCRService
{
private readonly HttpClient _httpClient;
private readonly ILogger<TesseractOCRService> _logger;
public TesseractOCRService(HttpClient httpClient, ILogger<TesseractOCRService> logger)
{
_httpClient = httpClient;
_logger = logger;
}
public async Task<string> Do(string imageUrl)
{
try
{
byte[] imageBytes = await DownloadImageAsync(imageUrl);
using (var skBitmap = SKBitmap.Decode(imageBytes))
{
var processedBitmap = PreprocessImage(skBitmap);
using (var pix = ConvertSKBitmapToPix(processedBitmap))
{
string captchaText = RecognizeText(pix);
return captchaText;
}
}
}
catch (Exception ex)
{
_logger.LogError(ex.ToString());
return string.Empty;
}
}
private async Task<byte[]> DownloadImageAsync(string url)
{
return await _httpClient.GetByteArrayAsync(url);
}
private SKBitmap PreprocessImage(SKBitmap bitmap)
{
return bitmap;
}
private Pix ConvertSKBitmapToPix(SKBitmap skBitmap)
{
using (var image = SKImage.FromBitmap(skBitmap))
using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
{
return Pix.LoadFromMemory(data.ToArray());
}
}
private string RecognizeText(Pix pix)
{
using (var engine = new TesseractEngine(@"./Services/TesseractService", "eng", EngineMode.Default))
{
using (var page = engine.Process(pix))
{
return page.GetText();
}
}
}
}
}
5. Docker 環境中安裝依賴
如果您在 Docker 環境中使用 Tesseract,需要確保基礎依賴已經安裝。參考PR https://github.com/charlesw/tesseract/issues/675 可以參考下面的 Dockerfile:
RUN apt-get update && apt-get install -y \
libfontconfig1 \
libfreetype6 \
libpng16-16 \
libjpeg62-turbo \
libx11-6 \
libxext6 \
libxrender1 \
tesseract-ocr \
libtesseract-dev \
libleptonica-dev
RUN ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.so
WORKDIR /app/x64
RUN ln -s /usr/lib/x86_64-linux-gnu/liblept.so.5 /app/x64/libleptonica-1.82.0.so
RUN ln -s /usr/lib/x86_64-linux-gnu/libtesseract.so.5 /app/x64/libtesseract50.so
這些依賴確保 Tesseract 和其依賴庫在 Docker 中正常運行。
6.一個例子
識別結果
轉自https://www.cnblogs.com/chenyishi/p/18658890
該文章在 2025/1/9 9:19:41 編輯過