ocr技术已经非常成熟了,C#的免费的OCR库有 PaddleOCRSharp、Halcon、Tesseract、RapidOCR及EasyOCR等,尝试过Tesseract及PaddleOCRSharp,发现Tesseract效果比较差,偶尔还出现无法识别,而PaddleOCRSharp识别速度慢且会输出公司的信息,满满的套路,如下图:

本文利用RapidOCR.Net实现车牌识别,识别效果相对来说好及速度还可以,但有个很坑的地方是,写类库的作者并没有提供模型,一运行就会报缺失模型文件的错误,在网上找了好久,终于让我给找到了,下载链接如下:

https://github.com/hiroi-sora/RapidOCR-json/releases/tag/v0.2.0

https://github.com/RapidAI/RapidOCR/blob/main/python/rapidocr/default_models.yaml

然后找到对应的下载链接下载即可:

链接失效或无法下载还可以从我这里下载,包含本文的源码及模型文件:

https://download.csdn.net/download/zxy13826134783/92520829(vip资源,需要请联系我)

本文测试环境:

visual studio 2022

.net8

测试步骤如下:

1  新建.net8的控制台项目,名为OCRDemo4

2  nuget包管理中搜索RapidOCR.Net,选择版本0.0.2,如下图:

要选择第一个,不要选择第二个RapidOcrNet(这边识别度很低,连简单的文本都能识别错)

3  下载模型文件ch_PP-OCRv3_det_infer.onnx、ch_ppocr_mobile_v2.0_cls_infer.onnx、ch_PP-OCRv3_rec_infer.onnx及dict_chinese.txt,并放到bin\Debug\net8.0的目录models(自己新建)

4  准备当前示例要识别的图片:

名为car3.png的图片:

名为test_ocr.png的图片:

5  编写代码如下:


using RapidOcrNet;
using SkiaSharp;


using (var ocrEngin = new RapidOcr())
{
    string detPath = Path.Combine("models", "ch_PP-OCRv3_det_infer.onnx");
    string clsPath = Path.Combine("models", "ch_ppocr_mobile_v2.0_cls_infer.onnx");
    string recPath = Path.Combine("models", "ch_PP-OCRv3_rec_infer.onnx");
    string keysPath = Path.Combine("models", "dict_chinese.txt");
    ocrEngin.InitModels(detPath, clsPath, recPath, keysPath, 0);
    using (SKBitmap originSrc = SKBitmap.Decode("car3.png"))
    {
        OcrResult ocrResult = ocrEngin.Detect(originSrc, RapidOcrOptions.Default);
        Console.WriteLine($"识别结果:{ocrResult.StrRes}");
    }
    using (SKBitmap originSrc = SKBitmap.Decode("test_ocr.png"))
    {
        OcrResult ocrResult = ocrEngin.Detect(originSrc, RapidOcrOptions.Default);
        Console.WriteLine($"识别结果2:{ocrResult.StrRes}");
    }
    Console.ReadLine();
}

6  运行结果如下:

好了,本文的内容到此结束

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐