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.一个例子
辨认结果
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |