C# Sdcb.PaddleOCR 字符识别库
|
admin
2025年5月5日 23:20
本文热度 199
|
Sdcb.PaddleOCR 是一个基于 PaddlePaddle 的 OCR(光学字符识别)库,旨在提供高效的文本检测和识别功能。它支持多种语言,并提供本地和在线模型供用户选择。该库的设计使得在不同平台(如 Windows 和 Linux)上都能方便地进行文本识别。这个比Tesseract OCR 好多了,不过要get的库比较多。
NuGet 包
Sdcb.PaddleOCR 提供了多个 NuGet 包,用户可以根据需要选择合适的版本:
- Sdcb.PaddleOCR: 主要的 PaddleOCR 库,基于 Sdcb.PaddleInference。
- Sdcb.PaddleOCR.Models.LocalV3: 包含完整的本地 V3 模型,支持多种语言(约 105MB)。
- Sdcb.PaddleOCR.Models.LocalV4: 包含完整的本地 V4 模型,支持多种语言(约 111MB)。
有关语言支持的详细信息,请参考 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, /* 允许识别有角度的文字 */
Enable180Classification = false, /* 允许识别旋转角度大于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();
}
}
}
性能优化
- PaddleConfig.MkldnnCacheCapacity
- PaddleOcrAll.Enable180Classification
- PaddleOcrAll.AllowRotateDetection默认值为
true
,如果只处理水平文本,可以设置为 false
以提高准确性和性能。
结论
Sdcb.PaddleOCR 是一个强大的 OCR 解决方案,适用于多种平台和语言。通过合理的配置和优化,用户可以实现高效的文本识别,满足不同场景的需求。
阅读原文:原文链接
该文章在 2025/5/6 12:04:46 编辑过