.NET 中 Tesseract 实现精准的 OCR 图片文字识别

401 阅读3分钟

前言

OCR 技术的应用日益广泛,尤其是在需要处理大量图像和文档的场景下。Tesseract 是一个开源的 OCR 引擎,因其高精度和灵活性而备受开发者青睐。通过将 Tesseract 集成到 .NET 应用程序中,可以实现高效、准确的图片文字识别,极大地提升应用的功能性和用户体验。

本文将详细介绍如何在 .NET 中使用 Tesseract 实现图片文字识别。可以快速入门帮助大家实现图片转文字。

正文

1、什么是 Tesseract

Tesseract 是一个开源的光学字符识别(OCR)引擎,最初由 HP 发布,现在由 Google 和学术社区共同维护和开发。它支持多种语言和格式,能够高效地从图片中提取文字信息。凭借其强大的识别能力和广泛的社区支持,Tesseract 已成为 OCR 领域的事实标准之一。

2、如何安装 Tesseract

要在 .NET 项目中使用 Tesseract,您需要安装相关的 NuGet 包及其依赖项。以下是详细的安装步骤:

安装 Tesseract 包

通过 NuGet 管理器或命令行工具安装 Tesseract 包

dotnet add package Tesseract

安装 SkiaSharp 用于图像处理

为了更好地处理图像,建议安装 SkiaSharp:

dotnet add package SkiaSharp

3、训练数据下载

Tesseract 需要训练数据文件来识别不同语言的文字。

这些文件可以从 Tesseract OCR (github.com/tesseract-o…) 下载。

选择需要的语言包,并将其放置在项目的适当目录中,例如 ./tessdata/

4、如何使用 Tesseract

使用 Tesseract 进行 OCR 识别的基本流程包括:下载图片、处理图片、进行 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 github.com/charlesw/te… 可以参考下面的 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、实例

识别结果

总结

通过本文的学习,我们不仅能够掌握 Tesseract 的基本使用方法,还能了解如何优化和扩展 OCR 功能,以满足不同应用场景的需求。希望这篇文章能为大家的开发工作提供有价值的参考和帮助。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

作者:chester·chen

出处:cnblogs.com/chenyishi/p/18658890

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!