如何在?.NET?中使用?Tesseract?識(shí)別圖片文字
1. 什么是 Tesseract
Tesseract 是一個(gè)強(qiáng)大的字符識(shí)別 (OCR) 工具。它最初由 HP 發(fā)布,現(xiàn)在由 Google 和學(xué)術(shù)社區(qū)共同維護(hù)和開發(fā)。 Tesseract 支持多種語言和格式,能夠高效地識(shí)別圖片中的文字。
2. 如何安裝 Tesseract
要在 .NET 項(xiàng)目中使用 Tesseract,需要安裝相關(guān)的 NuGet 包和基礎(chǔ)依賴。步驟如下:
在項(xiàng)目中通過 NuGet 安裝 Tesseract 包:
dotnet add package Tesseract
安裝 SkiaSharp 來處理圖片:
dotnet add package SkiaSharp
3. 訓(xùn)練數(shù)據(jù)從哪里下載
Tesseract 需要訓(xùn)練數(shù)據(jù)文件來識(shí)別圖片中的文字。這些訓(xùn)練數(shù)據(jù)文件可以從 Tesseract OCR GitHub https://github.com/tesseract-ocr/tessdata下載。選擇您需要的語言文件,并放置在項(xiàng)目相關(guān)目錄中。
4. 如何使用 Tesseract
使用 Tesseract 識(shí)別圖片中的文字,可以通過以下步驟完成:
- 創(chuàng)建一個(gè) HttpClient 和 Logger ,用于下載圖片和記錄日志。
- 使用 SkiaSharp 來處理圖片。
- 使用 Tesseract 完成 OCR 識(shí)別。
例子如下:
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,需要確保基礎(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 中正常運(yùn)行。
6.一個(gè)例子

識(shí)別結(jié)果

到此這篇關(guān)于在 .NET 中使用 Tesseract 識(shí)別圖片文字的文章就介紹到這了,更多相關(guān).NET Tesseract 識(shí)別圖片文字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(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-07
ASP.NET Core使用自定義驗(yàn)證屬性控制訪問權(quán)限詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core使用自定義驗(yàn)證屬性控制訪問權(quán)限的相關(guān)資料,這是我們?cè)谌粘9ぷ髦薪?jīng)常會(huì)遇到的一個(gè)需求,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-10-10
Ibatis.net結(jié)合oracle批量刪除實(shí)現(xiàn)代碼
本文介紹Ibatis.net結(jié)合oracle實(shí)現(xiàn)批量刪除寫法,并提供簡單的示例代碼供參考2012-12-12
詳解.net core下如何簡單構(gòu)建高可用服務(wù)集群
一說到集群服務(wù)相信對(duì)普通開發(fā)者來說肯定想到很復(fù)雜的事情,這篇文章主要介紹了詳解.net core下如何簡單構(gòu)建高可用服務(wù)集群,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
aspx中的mysql操作類sqldatasource使用示例分享
服務(wù)器裝了mysql odbc驅(qū)動(dòng),想在那個(gè)iis上操作另一個(gè)服務(wù)器的mysql,找到個(gè).net的sqldatasource類可以操作mysql,下在把使用方法分享一下2014-01-01
asp.net core 3.0中使用swagger的方法與問題
這篇文章主要給大家介紹了關(guān)于asp.net core 3.0中使用swagger的方法與遇到的一些問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用asp.net core 3.0具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
使用SWFUpload實(shí)現(xiàn)無刷新上傳圖片
現(xiàn)在網(wǎng)站不再講究的是功能性,更多的是用戶體驗(yàn)性,在這里上傳圖片就需要用到ajax無刷新上傳圖片,這里面包含的東西不是一點(diǎn)半點(diǎn) 。這里用到的是一個(gè)插件swfupload 實(shí)現(xiàn)無刷新上傳圖片2015-06-06
asp.net不同頁面間數(shù)據(jù)傳遞的多種方法
這篇文章主要介紹了asp.net不同頁面間數(shù)據(jù)傳遞的多種方法,包括使用QueryString顯式傳遞、頁面對(duì)象的屬性、cookie、Cache等9種方法2014-01-01
ASP.NET MVC中jQuery與angularjs混合應(yīng)用傳參并綁定數(shù)據(jù)
這篇文章主要介紹了ASP.NET MVC中jQuery與angularjs混合應(yīng)用傳參并綁定數(shù)據(jù),需要的朋友可以參考下2017-06-06
Ext.Net學(xué)習(xí)筆記之button小結(jié)
Ext.Net學(xué)習(xí)筆記之button小結(jié),需要的朋友可以參考一下2013-02-02

