如何在?.NET?中使用?Tesseract?識別圖片文字
1. 什么是 Tesseract
Tesseract 是一個強大的字符識別 (OCR) 工具。它最初由 HP 發(fā)布,現(xiàn)在由 Google 和學(xué)術(shù)社區(qū)共同維護(hù)和開發(fā)。 Tesseract 支持多種語言和格式,能夠高效地識別圖片中的文字。
2. 如何安裝 Tesseract
要在 .NET 項目中使用 Tesseract,需要安裝相關(guān)的 NuGet 包和基礎(chǔ)依賴。步驟如下:
在項目中通過 NuGet 安裝 Tesseract 包:
dotnet add package Tesseract
安裝 SkiaSharp 來處理圖片:
dotnet add package SkiaSharp
3. 訓(xùn)練數(shù)據(jù)從哪里下載
Tesseract 需要訓(xùn)練數(shù)據(jù)文件來識別圖片中的文字。這些訓(xùn)練數(shù)據(jù)文件可以從 Tesseract OCR GitHub https://github.com/tesseract-ocr/tessdata下載。選擇您需要的語言文件,并放置在項目相關(guān)目錄中。
4. 如何使用 Tesseract
使用 Tesseract 識別圖片中的文字,可以通過以下步驟完成:
- 創(chuàng)建一個 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 環(huán)境中安裝依賴
如果您在 Docker 環(huán)境中使用 Tesseract,需要確?;A(chǔ)依賴已經(jīng)安裝。參考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.一個例子
識別結(jié)果
到此這篇關(guān)于在 .NET 中使用 Tesseract 識別圖片文字的文章就介紹到這了,更多相關(guān).NET Tesseract 識別圖片文字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Ubuntu16.04系統(tǒng)配置.net core環(huán)境
本文給大家介紹的是在Ubuntu16.04系統(tǒng)配置.net core環(huán)境的方法,由于作者本身用的是WIN系統(tǒng),所以這次教程是在VMware中進(jìn)行的,希望大家能夠喜歡。2016-07-07ASP.NET Core使用自定義驗證屬性控制訪問權(quán)限詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core使用自定義驗證屬性控制訪問權(quán)限的相關(guān)資料,這是我們在日常工作中經(jīng)常會遇到的一個需求,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-10-10Ibatis.net結(jié)合oracle批量刪除實現(xiàn)代碼
本文介紹Ibatis.net結(jié)合oracle實現(xiàn)批量刪除寫法,并提供簡單的示例代碼供參考2012-12-12詳解.net core下如何簡單構(gòu)建高可用服務(wù)集群
一說到集群服務(wù)相信對普通開發(fā)者來說肯定想到很復(fù)雜的事情,這篇文章主要介紹了詳解.net core下如何簡單構(gòu)建高可用服務(wù)集群,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01aspx中的mysql操作類sqldatasource使用示例分享
服務(wù)器裝了mysql odbc驅(qū)動,想在那個iis上操作另一個服務(wù)器的mysql,找到個.net的sqldatasource類可以操作mysql,下在把使用方法分享一下2014-01-01asp.net core 3.0中使用swagger的方法與問題
這篇文章主要給大家介紹了關(guān)于asp.net core 3.0中使用swagger的方法與遇到的一些問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用asp.net core 3.0具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10asp.net不同頁面間數(shù)據(jù)傳遞的多種方法
這篇文章主要介紹了asp.net不同頁面間數(shù)據(jù)傳遞的多種方法,包括使用QueryString顯式傳遞、頁面對象的屬性、cookie、Cache等9種方法2014-01-01ASP.NET MVC中jQuery與angularjs混合應(yīng)用傳參并綁定數(shù)據(jù)
這篇文章主要介紹了ASP.NET MVC中jQuery與angularjs混合應(yīng)用傳參并綁定數(shù)據(jù),需要的朋友可以參考下2017-06-06Ext.Net學(xué)習(xí)筆記之button小結(jié)
Ext.Net學(xué)習(xí)筆記之button小結(jié),需要的朋友可以參考一下2013-02-02