在 .NET 中使用 Tesseract 识别图片文字

360影视 2025-01-09 08:31 3

摘要:它最初由 HP 发布,现在由 Google 和学术社区共同维护和开发。

Tesseract 是一个强大的字符识别 (OCR) 工具。

它最初由 HP 发布,现在由 Google 和学术社区共同维护和开发。

Tesseract 支持多种语言和格式,能够高效地识别图片中的文字。

要在 .NET 项目中使用 Tesseract,需要安装相关的 NuGet 包和基础依赖。步骤如下:

在项目中通过 NuGet 安装 Tesseract 包:

dotnet add package Tesseract

安装 SkiaSharp 来处理图片:

Tesseract 需要训练数据文件来识别图片中的文字。

这些训练数据文件可以从 Tesseract OCR GitHub https://github.com/tesseract-OCR/tessdata下载。

选择您需要的语言文件,并放置在项目相关目录中。

使用 Tesseract 识别图片中的文字,可以通过以下步骤完成:

创建一个 HttpClient 和 Logger ,用于下载图片和记录日志。

使用 SkiaSharp 来处理图片。

使用 Tesseract 完成 OCR 识别。

例子如下:

public class TesseractOCRService{ private readonly HttpClient _httpClient; private readonly ILogger _logger; public TesseractOCRService(HttpClient httpClient, ILogger logger) { _httpClient = httpClient; _logger = logger; } public async Task 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 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; } } }}

如果您在 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-devRUN ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.soWORKDIR /app/x64RUN ln -s /usr/lib/x86_64-linux-gnu/liblept.so.5 /app/x64/libleptonica-1.82.0.soRUN ln -s /usr/lib/x86_64-linux-gnu/libtesseract.so.5 /app/x64/libtesseract50.so

这些依赖确保 Tesseract 和其依赖库在 Docker 中正常运行。

识别结果

来源:opendotnet

相关推荐