Sdcb.PaddleOCR 是一個(gè)基于 PaddlePaddle 的 OCR(光學(xué)字符識(shí)別)庫(kù),旨在提供高效的文本檢測(cè)和識(shí)別功能。它支持多種語(yǔ)言,并提供本地和在線(xiàn)模型供用戶(hù)選擇。該庫(kù)的設(shè)計(jì)使得在不同平臺(tái)(如 Windows 和 Linux)上都能方便地進(jìn)行文本識(shí)別。這個(gè)比Tesseract OCR 好多了,不過(guò)要get的庫(kù)比較多。
NuGet 包
Sdcb.PaddleOCR 提供了多個(gè) NuGet 包,用戶(hù)可以根據(jù)需要選擇合適的版本:
- Sdcb.PaddleOCR: 主要的 PaddleOCR 庫(kù),基于 Sdcb.PaddleInference。
- Sdcb.PaddleOCR.Models.LocalV3: 包含完整的本地 V3 模型,支持多種語(yǔ)言(約 105MB)。
- Sdcb.PaddleOCR.Models.LocalV4: 包含完整的本地 V4 模型,支持多種語(yǔ)言(約 111MB)。
有關(guān)語(yǔ)言支持的詳細(xì)信息,請(qǐng)參考 PaddleOCR 模型列表。
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/doc/doc_en/models_list_en.md
使用方法
using OpenCvSharp;
using Sdcb.PaddleInference;
using Sdcb.PaddleInference.Native;
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Local;
using Sdcb.PaddleOCR.Models;
namespace AppPaddlePaddle
{
internal class Program
{
static void Main(string[] args)
{
FullOcrModel model = LocalFullModels.ChineseV3;
using (PaddleOcrAll all = new PaddleOcrAll(model, PaddleDevice.Mkldnn())
{
AllowRotateDetection = true, /* 允許識(shí)別有角度的文字 */
Enable180Classification = false, /* 允許識(shí)別旋轉(zhuǎn)角度大于90度的文字 */
})
{
using (Mat src = Cv2.ImRead(@"temp_plate.png"))
{
PaddleOcrResult result = all.Run(src);
Console.WriteLine("Detected all texts: \n" + result.Text);
foreach (PaddleOcrResultRegion region in result.Regions)
{
Console.WriteLine($"Text: {region.Text}, Score: {region.Score}, RectCenter: {region.Rect.Center}, RectSize: {region.Rect.Size}, Angle: {region.Rect.Angle}");
}
}
}
Console.ReadKey();
}
}
}
?
性能優(yōu)化
- PaddleConfig.MkldnnCacheCapacity默認(rèn)值為
1
,可以根據(jù)內(nèi)存使用情況進(jìn)行調(diào)整。 - PaddleOcrAll.Enable180Classification默認(rèn)值為
false
,可以提高處理速度。 - PaddleOcrAll.AllowRotateDetection默認(rèn)值為
true
,如果只處理水平文本,可以設(shè)置為 false
以提高準(zhǔn)確性和性能。
結(jié)論
Sdcb.PaddleOCR 是一個(gè)強(qiáng)大的 OCR 解決方案,適用于多種平臺(tái)和語(yǔ)言。通過(guò)合理的配置和優(yōu)化,用戶(hù)可以實(shí)現(xiàn)高效的文本識(shí)別,滿(mǎn)足不同場(chǎng)景的需求。
閱讀原文:原文鏈接
該文章在 2025/5/6 12:04:46 編輯過(guò)