高性能百度OCR ONNX Runtime C#实现
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
RapidOCRSharpOnnx 是一个基于OpenCV与ONNX Runtime 实现的PaddleOCR C#开源推理库,参考了RapidOCR 的实现,重新使用C#实现,并做了大量性能优化与架构重新设计,方便多种ONNX Runtime 执行提供程序部署 特性
OCR 示例
RapidOCRSharpOnnx使用1 导出模型为onnx格式如何转换PP-OCR模型为onnx格式,可以参考PP-OCR官网Obtaining ONNX Models, 或者直接从RapidOCR的魔塔社区下载Model List. 2 安装RapidOCRSharpOnnx组件并加载模型Install Nuget packages RapidOCRSharpOnnx, OnnxRuntime, OpenCvSharp4.runtime
CPU 推理dotnet add package RapidOCRSharpOnnx dotnet add package OpenCvSharp4.runtime.win dotnet add package Microsoft.ML.OnnxRuntime using RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderCPU(new OcrConfig(detectPath, recPath, LangRec.CH, OCRVersion.PPOCRV5, clsMobilePath))); CoreML 推理dotnet add package RapidOCRSharpOnnx
dotnet add package OpenCvSharp4.runtime.osx.10.15-x64
dotnet add package Microsoft.ML.OnnxRuntimeusing RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderCoreML(new OcrConfig(detectPath, recPath, LangRec.CH, OCRVersion.PPOCRV5, clsMobilePath))); CUDA/TensorRT 推理dotnet add package RapidOCRSharpOnnx dotnet add package OpenCvSharp4.runtime.win dotnet add package Microsoft.ML.OnnxRuntime.Gpu.Windows using RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderCUDA(new OcrConfig(detectPath, recogPath, LangRec.CH, OCRVersion.PPOCRV5, clsPath), deviceId)); using RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderTensorRT(new OcrConfig(detectPath, recogPath, LangRec.CH, OCRVersion.PPOCRV5, clsPath), deviceId)); DirectML 推理dotnet add package RapidOCRSharpOnnx dotnet add package OpenCvSharp4.runtime.win dotnet add package Microsoft.ML.OnnxRuntime.DirectML using RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderDirectML(new OcrConfig(detectPath, recogPath, LangRec.EN, OCRVersion.PPOCRV5, clsPath), deviceId)); OpenVINO 推理dotnet add package RapidOCRSharpOnnx dotnet add package OpenCvSharp4.runtime.win dotnet add package Intel.ML.OnnxRuntime.OpenVino using RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderOpenVINO(new OcrConfig(detectPath, recogPath, LangRec.EN, OCRVersion.PPOCRV5, clsPath), IntelDeviceType.NPU));
基本的API使用using RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderDirectML(new OcrConfig(detectPath, recogPath, LangRec.EN, OCRVersion.PPOCRV5, clsPath), _deviceId)); string savePath = $"res_{Path.GetFileName(imgPath)}"; var result = ocr.RecognizeText(imgPath, savePath); Console.WriteLine($"result: {result.ToString()}"); 批量识别图片using RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderDirectML(new OcrConfig(detectPath, recogPath, LangRec.CH, OCRVersion.PPOCRV5, clsPath), _deviceId)); var list = Directory.GetFiles(@"C:\code\model\OCRTestImages"); Stopwatch sw = new Stopwatch(); sw.Start(); var resPath = ocr.BatchParallelAsync(list.ToList(), saveDir, receiveAction: ReceiveResult); sw.Stop(); Console.WriteLine($"BatchAsync Time: {sw.ElapsedMilliseconds} ms"); private static void ReceiveResult(OcrBatchResult batchResult) { Console.WriteLine(batchResult.ToString()); Console.WriteLine("------------------------------------------------------------"); } 批量识别使用Foreach APIprivate static async Task TestBatchForeachAsync() { string detectPath = @"D:\code\RapidOCRSharpOnnx\RapidOCRSharpOnnx.TestCommon\Models\ch_PP-OCRv5_det_mobile.onnx"; string recogPath = @"D:\code\RapidOCRSharpOnnx\RapidOCRSharpOnnx.TestCommon\Models\ch_PP-OCRv5_rec_mobile.onnx"; string clsPath = @"D:\code\RapidOCRSharpOnnx\RapidOCRSharpOnnx.TestCommon\Models\ch_PP-LCNet_x0_25_textline_ori_cls_mobile.onnx"; using RapidOCRSharp ocr = new RapidOCRSharp(new ExecutionProviderDirectML(new OcrConfig(detectPath, recogPath, LangRec.CH, OCRVersion.PPOCRV5, clsPath), _deviceId)); var list = Directory.GetFiles(@"D:\code\model\OCRTestImages"); var res = ocr.BatchForeachAsync(list.ToList(), @"D:\code\model\OCRTestImagesResults"); await foreach (var item in res) { Console.WriteLine(item.TextBlocks); } }
性能测试OCR组件库性能对比测试 CPU推理测试
测试电脑Windows 11 Pro OS Version 25H2 CPU: Intel Core Ultra 9 285k 3.7GHz 内存:DDR5 128GB speed 4400MT/s 硬盘:SSD 2TB
测试数据图片: 60 张图片 (图片大小: 1180x92) PP-OCR 模型: ch_PP-OCRv5_det_mobile, ch_PP-OCRv5_rec_mobile, ch_PP-LCNet_x0_25_textline_ori_cls_mobile PaddleSharp 测试结果CPU 推理时间 : 48.1769278s
PaddleOCR 测试结果CPU 推理时间 : 62.6685s
RapidOCR 测试结果CPU 推理时间 : 17.9634s
RapidOCRSharpOnnx 测试结果CPU 推理时间 : 9.2447s
性能测试结果
转自https://www.cnblogs.com/luoht/p/20026520 该文章在 2026/6/2 9:03:04 编辑过 |
关键字查询
相关文章
正在查询... |