English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french
查看: 5|回复: 0

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

[复制链接]
查看: 5|回复: 0

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

[复制链接]
查看: 5|回复: 0

361

主题

0

回帖

1093

积分

金牌会员

积分
1093
lxl

361

主题

0

回帖

1093

积分

金牌会员

积分
1093
2025-2-7 00:05:14 | 显示全部楼层 |阅读模式
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-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 中正常运行。
6.一个例子


 
识别结果

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

本版积分规则

361

主题

0

回帖

1093

积分

金牌会员

积分
1093

QQ|智能设备 | 粤ICP备2024353841号-1

GMT+8, 2025-3-10 15:50 , Processed in 1.361324 second(s), 30 queries .

Powered by 智能设备

©2025

|网站地图