C# 使用PaddleOCRSharp识别图片文字

介绍

PaddleOCRSharp是一个.NET的OCR工具本地类库,可离线使用。包含文本识别、文本检测、表格识别功能。

底层是百度飞桨PaddleOCR

官方网址:

https://gitee.com/raoyutian/PaddleOCRSharp/
https://github.com/raoyutian/PaddleOCRSharp

特点

★ 高度集成:PaddleOCRSharp将百度飞桨PaddleOCR的核心功能完美集成到.NET平台,让开发者无需关心底层实现,只需调用相应接口即可实现OCR功能。

★ 性能卓越:得益于百度飞桨PaddleOCR的高效算法和对PaddleOCR代码的部分算法优化,PaddleOCRSharp在保持高度集成的同时,也保证了卓越的性能表现。

★ 易于使用:PaddleOCRSharp提供了丰富的API接口和详细的文档说明,让开发者能够轻松上手,快速实现OCR功能。

★ 扩展性强:PaddleOCRSharp支持自定义模型加载和训练,开发者可以根据自己的需求进行模型扩展和优化。

★ 离线免费:PaddleOCRSharp支持离线绿色部署,无其他依赖需要安装,满足了众多开发者的福音。

使用

官方网址:

https://gitee.com/raoyutian/PaddleOCRSharp/blob/master/doc/UseInCsharp.md

添加依赖

通过 nuget 添加依赖,如下图:

下载模型

下载模型,解压后,放到 debug目录,如下图:

工具类

public class PaddleOCRUtil
{
    // 模型根目录
    public static readonly string MODEL_PATH_ROOT = "ch_PP-OCRv4";
    // 初始化OCR引擎
    private PaddleOCREngine engine ;

    public PaddleOCRUtil() 
    { 
        init();
    }
    private void init()
    {
        OCRModelConfig config = null;
        //中英文模型V4
        config = new OCRModelConfig();
        string modelPathroot = Path.Combine(System.Environment.CurrentDirectory, MODEL_PATH_ROOT );
        // 文本检测 det_infer模型路径
        config.det_infer = modelPathroot + @"\ch_PP-OCRv4_det_infer";
        // 文本角度检测cls_infer模型路径
        config.cls_infer = modelPathroot + @"\ch_ppocr_mobile_v2.0_cls_infer";
        //     文本识别rec_infer模型路径
        config.rec_infer = modelPathroot + @"\ch_PP-OCRv4_rec_infer";
        //ppocr_keys.txt文件名全路径
        config.keys = modelPathroot + @"\ppocr_keys.txt";

        //OCR参数
        OCRParameter oCRParameter = new OCRParameter();
        oCRParameter.cpu_math_library_num_threads = 10;//预测并发线程数
        oCRParameter.enable_mkldnn = true;
        oCRParameter.cls = false; //是否执行文字方向分类;默认false
        oCRParameter.det = true;//是否执行文字检测,单行文本可以关闭该参数来提高速度
        oCRParameter.det_db_score_mode = true;//是否使用多段线,即文字区域是用多段线还是用矩形,
        oCRParameter.max_side_len = 1500;
        oCRParameter.rec_img_h = 48;
        oCRParameter.rec_img_w = 320;
        oCRParameter.det_db_thresh = 0.3f;
        oCRParameter.det_db_box_thresh = 0.618f;

        engine = new PaddleOCREngine(config, oCRParameter);

    }

    public string DetectText(string imgPath)
    {
        OCRResult ocrResult = engine.DetectText(imgPath);

        return ocrResult.Text ;
    }
}