在 .NET 中利用 Tesseract 辨认图片文字

打印 上一主题 下一主题

主题 829|帖子 829|积分 2487

1. 什么是 Tesseract

Tesseract 是一个强大的字符辨认 (OCR) 工具。它最初由 HP 发布,现在由 Google 和学术社区共同维护和开发。 Tesseract 支持多种语言和格式,能够高效地辨认图片中的文字。
2. 如何安装 Tesseract

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

  • 在项目中通过 NuGet 安装 Tesseract 包:
    1. dotnet add package Tesseract
    复制代码
  • 安装 SkiaSharp 来处理图片:
    1. dotnet add package SkiaSharp
    复制代码
3. 训练数据从那里下载

Tesseract 需要训练数据文件来辨认图片中的文字。这些训练数据文件可以从 Tesseract OCR GitHub  https://github.com/tesseract-ocr/tessdata下载。选择您需要的语言文件,并放置在项目相关目录中。
4. 如何利用 Tesseract

利用 Tesseract 辨认图片中的文字,可以通过以下步骤完成:

  • 创建一个 HttpClient 和 Logger ,用于下载图片和记载日志。
  • 利用 SkiaSharp 来处理图片。
  • 利用 Tesseract 完成 OCR 辨认。
例子如下:
  1. using SkiaSharp;
  2. using Tesseract;
  3. namespace AutoGetOrder.WebAPI.Services.TesseractService
  4. {
  5.     public class TesseractOCRService
  6.     {
  7.         private readonly HttpClient _httpClient;
  8.         private readonly ILogger<TesseractOCRService> _logger;
  9.         public TesseractOCRService(HttpClient httpClient, ILogger<TesseractOCRService> logger)
  10.         {
  11.             _httpClient = httpClient;
  12.             _logger = logger;
  13.         }
  14.         public async Task<string> Do(string imageUrl)
  15.         {
  16.             try
  17.             {
  18.                 byte[] imageBytes = await DownloadImageAsync(imageUrl);
  19.                 using (var skBitmap = SKBitmap.Decode(imageBytes))
  20.                 {
  21.                     var processedBitmap = PreprocessImage(skBitmap);
  22.                     using (var pix = ConvertSKBitmapToPix(processedBitmap))
  23.                     {
  24.                         string captchaText = RecognizeText(pix);
  25.                         return captchaText;
  26.                     }
  27.                 }
  28.             }
  29.             catch (Exception ex)
  30.             {
  31.                 _logger.LogError(ex.ToString());
  32.                 return string.Empty;
  33.             }
  34.         }
  35.         private async Task<byte[]> DownloadImageAsync(string url)
  36.         {
  37.             return await _httpClient.GetByteArrayAsync(url);
  38.         }
  39.         private SKBitmap PreprocessImage(SKBitmap bitmap)
  40.         {
  41.             return bitmap;
  42.         }
  43.         private Pix ConvertSKBitmapToPix(SKBitmap skBitmap)
  44.         {
  45.             using (var image = SKImage.FromBitmap(skBitmap))
  46.             using (var data = image.Encode(SKEncodedImageFormat.Png, 100))
  47.             {
  48.                 return Pix.LoadFromMemory(data.ToArray());
  49.             }
  50.         }
  51.         private string RecognizeText(Pix pix)
  52.         {
  53.             using (var engine = new TesseractEngine(@"./Services/TesseractService", "eng", EngineMode.Default))
  54.             {
  55.                 using (var page = engine.Process(pix))
  56.                 {
  57.                     return page.GetText();
  58.                 }
  59.             }
  60.         }
  61.     }
  62. }
复制代码
5. Docker 环境中安装依赖

如果您在 Docker 环境中利用 Tesseract,需要确保基础依赖已经安装。参考PR https://github.com/charlesw/tesseract/issues/675 可以参考下面的 Dockerfile:
  1. RUN apt-get update && apt-get install -y \
  2.     libfontconfig1 \
  3.     libfreetype6 \
  4.     libpng16-16 \
  5.     libjpeg62-turbo \
  6.     libx11-6 \
  7.     libxext6 \
  8.     libxrender1 \
  9.     tesseract-ocr \
  10.     libtesseract-dev \
  11.     libleptonica-dev
  12. RUN ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.so
  13. WORKDIR /app/x64
  14. RUN ln -s /usr/lib/x86_64-linux-gnu/liblept.so.5 /app/x64/libleptonica-1.82.0.so
  15. RUN ln -s /usr/lib/x86_64-linux-gnu/libtesseract.so.5 /app/x64/libtesseract50.so
复制代码
这些依赖确保 Tesseract 和其依赖库在 Docker 中正常运行。
6.一个例子


 
辨认结果

 

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

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表