网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

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

时间:2025-01-08 08:46

人气:

作者:admin

标签:

导读:1. 什么是 Tesseract Tesseract 是一个强大的字符识别 (OCR) 工具。它最初由 HP 发布,现在由 Google 和学术社区共同维护和开发。 Tesseract 支持多种语言和格式,能够高效地识别图片中的文字。...
1. 什么是 Tesseract

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

2. 如何安装 Tesseract

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

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

    dotnet add package Tesseract
    
  2. 安装 SkiaSharp 来处理图片:

    dotnet add package SkiaSharp
    
3. 训练数据从哪里下载

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

4. 如何使用 Tesseract

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

  1. 创建一个 HttpClient 和 Logger ,用于下载图片和记录日志。
  2. 使用 SkiaSharp 来处理图片。
  3. 使用 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.一个例子

 

识别结果

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信