当前位置: 代码网 > it编程>编程语言>Asp.net > 如何在 .NET 中使用 Tesseract 识别图片文字

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

2025年02月13日 Asp.net 我要评论
1. 什么是 tesseracttesseract 是一个强大的字符识别 (ocr) 工具。它最初由 hp 发布,现在由 google 和学术社区共同维护和开发。 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 识别图片文字的文章就介绍到这了,更多相关.net  tesseract 识别图片文字内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com