首页 > 其他分享 >在 .NET 中使用 Tesseract 识别图片文字

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

时间:2025-01-08 09:04:32浏览次数:1  
标签:识别 return string private var using NET 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.一个例子

 

识别结果

 

标签:识别,return,string,private,var,using,NET,Tesseract
From: https://www.cnblogs.com/chenyishi/p/18658890

相关文章

  • Lua 实现验证码识别
    Lua本身不直接支持图像处理或OCR,但可以通过调用外部程序,如tesseract,来实现验证码识别。我们可以通过Lua的os.execute函数来调用命令行工具Tesseract来实现图像识别。步骤安装Tesseract首先,你需要安装Tesseract。如果你还没有安装它,可以通过以下命令进行安装:macOS:......
  • Python 手动编写文字识别程序
    在这篇文章中,我们将介绍如何使用Python手动编写一个简单的文字识别程序。我们将利用pytesseract库结合PIL来读取图像中的文本。这个过程涉及图像加载、预处理和文字提取。环境准备确保你已经安装了以下库:bashpipinstallpytesseractpillow此外,确保你已经安装了Tesse......
  • Go 语言与 Tesseract OCR 实现英文数字验证码识别
    Go语言本身不直接支持图像识别,但可以通过调用TesseractOCR引擎来进行图像识别。我们可以使用Go的tesseract包来实现这一功能。一、安装与配置安装TesseractOCR首先,你需要在系统中安装TesseractOCR。安装方法和前面一样:Ubuntu(Linux):bashsudoapt-getupdatesudo......
  • Easy.Admin:基于 .NET 8 和 Vue3 的后台管理系统,支持多种数据库和服务端渲染(SSR)
     ......
  • Python从0到100(八十二):神经网络-残差网络ResNet的深入介绍和实战
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......
  • Ultra-Low Precision 4-bit Training of Deep Neural Networks
    目录概主要内容Radix-4FP4formatGradScaleTwo-PhaseRounding(TPR)SunX.,WangN.,ChenC.,NiJ.,AgrawalA.,CuiX.,VenkataramaniS.andMaghraouiK.E.andSrinivasanV.Ultra-lowprecision4-bittrainingofdeepneuralnetworks.NeurIPS,2020.概本文......
  • C#/.NET/.NET Core技术前沿周刊 | 第 20 期(2025年1.1-1.5)
    前言C#/.NET/.NETCore技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NETCore领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等。......
  • 空压机网络接入实战:基于 MODBUS - TCP 转 Ethernet IP 网关的配置过程剖析
     在工业自动化生产环境中,空压机作为重要的气源设备,其稳定运行和有效监控对于整个生产流程至关重要。然而,不同厂家生产的空压机可能采用不同的通信协议,这给集中监控和管理带来了挑战。在本次案例中,我们遇到的空压机采用MODBUS-TCP协议进行数据传输,但企业的自动化控制系统主......
  • 在 .NET Framework 中,C#代码防止按钮重复点击的后端处理
    ai生成:在.NETFramework中,防止按钮重复点击的后端处理通常涉及到Web应用程序(如ASP.NETWebForms或ASP.NETMVC)。以下是一些常见的后端处理方法和示例代码:ASP.NETWebForms在WebForms中,你可以使用ViewState或Session来防止按钮重复点击。以下是一个使用ViewSta......
  • 疲劳驾驶智能识别摄像机
    疲劳驾驶智能识别摄像机在道路安全管理中扮演着越来越重要的角色。这些先进的设备不仅仅是简单的监控工具,它们通过先进的技术和算法,有效地识别和预防司机疲劳驾驶,从而大大减少了交通事故的风险。首先,这些智能识别摄像机采用高精度的人脸识别技术和眼睛运动追踪算法,能够实时监测......