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 识别图片文字的文章就介绍到这了,更多相关.net tesseract 识别图片文字内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论