专栏名称: dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,Linux 主流平台
目录
相关文章推荐
重庆日报  ·  创意视频|新春第一会 绘出新重庆新篇章 ·  18 小时前  
重庆日报  ·  创意视频|新春第一会 绘出新重庆新篇章 ·  18 小时前  
重庆市文化和旅游发展委员会  ·  重庆春节哪里人气最旺?这些地方排名前5→ ·  3 天前  
重庆市文化和旅游发展委员会  ·  重庆春节哪里人气最旺?这些地方排名前5→ ·  3 天前  
第1眼新闻  ·  启动黄色预警!洪崖洞景区发布最新公告 ·  4 天前  
第1眼新闻  ·  启动黄色预警!洪崖洞景区发布最新公告 ·  4 天前  
51好读  ›  专栏  ›  dotNET跨平台

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

dotNET跨平台  · 公众号  ·  · 2025-01-09 08:00

正文

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 识别图片中的文字,可以通过以下步骤完成:

  1. 创建一个 HttpClient 和 Logger ,用于下载图片和记录日志。
  2. 使用 SkiaSharp 来处理图片。
  3. 使用 Tesseract 完成 OCR 识别。

例子如下:

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 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 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.Png100))        {            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






请到「今天看啥」查看全文