在 .NET 中使用 Tesseract 识别图片文字
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.一个例子

识别结果

在 .NET 中使用 Tesseract 识别图片文字的更多相关文章
- python识别图片文字
因为学校要求要刷一门叫<包装世界>的网课,而课程里有200多道选择题,而且只能在手机完成,网页版无法做题,而看视频是不可能看视频的,这辈子都不可能看...所以写了几行代码来进行百度搜答案. ...
- Tesseract识别图片提取文字&字库训练
文中测试了3.0和4.0两个版本.发现3.0识别效率不准确,需要训练词库.4.0识别效率就比较高了,而且支持结果生成pdf.txt等格式.所以推荐使用4.0版本. 这个工具可以用在爬虫的时候获取验证码 ...
- 浅析点对点(End-to-End)的场景文字识别(图片文字)
一.背景 随着智能手机的广泛普及和移动互联网的迅速发展,通过手机等移动终端的摄像头获取.检索和分享资讯已经逐步成为一种生活方式.基于摄像头的 (Camera-based)的应用更加强调对拍摄场景的理解 ...
- python3 识别图片文字
1.下载相关组件 安装:pip install Pillow 或下载:https://pypi.org/project/Pillow/5.2.0/ ,https://pypi.org/project ...
- 【图片识别】Java中使用tess4J进行图片文字识别(支持中文)(转)
http://blog.csdn.net/wsk1103/article/details/54173282 java中识别文字比较简单,使用的软件是tesseractocr(使用的版本是3.02,3以 ...
- 基于Tesseract实现图片文字识别
一.简介 Tesseract是一个开源的文本识别[OCR]引擎,可通过Apache 2.0许可获得.它可以直接使用,或者使用API从图像中提取打印的文本,支持多种语言.该软件包包含一个ORC引擎[l ...
- Python识别验证码,基于Tesseract实现图片文字识别
一.简介 Tesseract是一个开源的文本识别[OCR]引擎,可通过Apache 2.0许可获得.它可以直接使用,或者使用API从图像中提取打印的文本,支持多种语言.该软件包包含一个ORC引擎[li ...
- C#调用OCR组件识别图片文字
图片识别的技术到几天已经很成熟了,只是相关的资料很少,为了方便在此汇总一下(C#实现),方便需要的朋友查阅,也给自己做个记号. 图片识别的用途:很多人用它去破解网站的验证码,用于达到自动刷票或者是批量 ...
- python 识别图片文字
今天群里有兄弟问如何把图片的文字给识别出来 对于python来说这不是小菜一碟吗,于是乎让pupilheart狠狠的吹了一波(哈哈,竟然没懂),下面将整个实现过程给大家实现下: 方法一:自己搞定ORC ...
- python下以api形式调用tesseract识别图片验证码
一.背景 之前在博文中介绍在python中如何调用tesseract ocr引擎,当时主要介绍了shell模式,shell模式需要安装tesseract程序,并且效率相对略低. 今天介绍api形式的调 ...
随机推荐
- vue axios的使用及操作
引入axios 并设置原型 Vue.prototype.$axios = axios; 在其他地方就可以this.$axios使用了 let param = _this.$qs.string ...
- Win11安装基于WSL2的Ubuntu
1. 概述 趁着还没有完全忘记,详细记录一下在Win11下安装基于WSL2的Ubuntu的详细过程.不得不说WLS2现在被微软开发的比较强大了,还是很值得安装和使用的,笔者就通过WLS2安装的Ubun ...
- ESP8266+ MQTT+SG90(舵机) platformio
ESP8266 + MQTT + SG90(舵机) platformio 连线 ESP8266 MG90S(舵机) GND 棕色 VCC 红色 模拟引脚 橙色 源代码 https://gitee.co ...
- 0.1 Introduction to the tenth anniversary edition
此序作于2010年 1970s&1980s, 除了将量子系统仅仅视为一种自然界中需要解释的现象,大家开始将其视为可以设计的系统. 这种新的观点引起了物理,计算机科学和信息理论等领域交叉融合之后 ...
- debian大便系统配置国内软件源
本例在debian:buster-slim docker镜像中实验通过 1.启动docker实例 docker run -it --name debian debian:buster-slim bas ...
- 【THUPC 2024 初赛】 E 转化
[THUPC 2024 初赛] 转化 我都能做出来,那就是大水题了. 思路 首先我们要确定最大可以变色的球的数量 \(tot\). 有如下两个贪心步骤: 所有颜色使用分裂操作,并更新 \(a_i\). ...
- Thinkphp漏洞复现
Thinkphp漏洞复现 环境均为vulhub/thinkphp Thinkphp是一种开源框架.是一个由国人开发的支持windows/Unix/Linux等服务器环境的轻量级PHP开发框架. 很多c ...
- MySQL创新版9.1.0于2024年10月15日正式发布-新功能特性先睹为快[译]
这个十月发布的版本是MySQL宣布转向新的LTS/Innovation发布模式后的第三个长期支持(LTS)版本和第二个创新(Innovation)版本.更多细节请参见MySQL发布:创新和长期支持.在 ...
- ZCMU-1144
简单问题: 就只是如何降低时间的问题罢了:本来这种方法以前学过但是没怎么用所以不太灵活. #include<stdio.h> #define maxn 1000010 int sum[ma ...
- require.js 笔记
1.前言 随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列 ...