在Labview平台调用OpenVINO C# API部署PaddleOCR v5模型
该项目基于OpenVINOTM模型推理库,在C#语言下,调用封装的OpenVINOTM动态链接库,部署推理PP-OCRv5中的文字识别模型;实现了在Labview平台调用OpenVINOTM部署PP-OCRv5文字识别模型。
作者:温雄生
指导: 颜国进 英特尔边缘计算创新大使
1. 项目介绍
该项目基于OpenVINOTM模型推理库,在C#语言下,调用封装的OpenVINOTM动态链接库,部署推理PP-OCRv5中的文字识别模型;实现了在Labview平台调用OpenVINOTM部署PP-OCRv5文字识别模型。
核心功能与优势
- OpenVINOTM能够显著提升AI模型的推理计算性能,大大提高了CPU推理的速度,对比常规的无OpenVINOTM的CPU推理库,速度提升5-6倍。
- 多语言支持:无论是中文、英文还是其他多种语言,均能提供高精度的文字识别能力。
- 复杂场景适应:针对倾斜文字、模糊图片等复杂场景进行了专门优化,确保识别结果的可靠性。
- 免费开源。
2. 效果演示
3. 模块介绍
3.1 OpenVINO™ C# API
OpenVINO™ C# API 是一个 OpenVINO™ 的 .Net wrapper,应用最新的 OpenVINO™ 库开发,通过 OpenVINO™ C API 实现 .Net 对 OpenVINO™ Runtime 调用,使用习惯与 OpenVINO™ C++ API 一致。OpenVINO™ C# API 由于是基于 OpenVINO™ 开发,所支持的平台与 OpenVINO™ 完全一致,具体信息可以参考 OpenVINO™。通过使用 OpenVINO™ C# API,可以在 .NET、.NET Framework等框架下使用 C# 语言实现深度学习模型在指定平台推理加速。
为了帮助各位开发者实现快速部署PaddleOCR模型,前期我们推出了OpenVINO.CSharp.API.Extensions.PaddleOCR NuGet Package,实现在英特尔任意CPU平台块数快速落地PaddleOCR,并受到了大家广泛的关注和应用支持。在PP-OCRv5推出后,我们也做了测试,所推出的OpenVINO.CSharp.API.Extensions.PaddleOCR NuGet Package对PP-OCRv5也做到了完全支持,通过切换模型和字典,便可以实现PP-OCRv5的轻松部署。同时为了方便大家使用,对当前主流框架做了支持,如下所示:
3.2 PP-OCRv5
PP-OCRv5 是PP-OCR新一代文字识别解决方案,该方案聚焦于多场景、多文字类型的文字识别。在文字类型方面,PP-OCRv5支持简体中文、中文拼音、繁体中文、英文、日文5大主流文字类型,在场景方面,PP-OCRv5升级了中英复杂手写体、竖排文本、生僻字等多种挑战性场景的识别能力。在内部多场景复杂评估集上,PP-OCRv5较PP-OCRv4端到端提升13个百分点。
对比PP-OCRv4,PP-OCRv5在所有检测场景下均有明显提升,尤其在手写、古籍、日文检测能力上表现更优。单模型即可覆盖多语言和多类型文本,识别精度大幅领先前代产品和主流开源方案。
3.3 LabVIEW
LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。与此类似的还有工程师们使用比较多的国产测试软件ATECLOUD智能云测试平台,区别于LABVIEW的图形化编程语言,通过文本指令拖拽连接直接组建测试过程,让程序开发变得更简单直观。
4. 项目实现方式
4.1 模型获取
PP-OCRv5使用的是PaddlePaddle 3.0,目前PaddlePaddle 3.0 模型格式发生了显著变化,静态图模型存储文件名由 xxx.pdmodel 改为 xxx.json,同时模型整体适配飞桨 3.0 中间表示技术(PIR),拥有更加灵活的扩展能力和兼容性。目前OpenVINO™还在对PaddlePaddle 3.0做适配,因此目前无法读取PaddlePaddle 3.0导出的模型,需要将其转化为ONNX格式。
模型导出参考了大佬们的解决方案,原文链接为:
https://github.com/openvino-book/PP-OCRv5_OpenVINO/blob/main/How%20to%20export%20PP-OCRv5%20model.md
Step 1: 创建虚拟环境
conda create -n ppocrv5_ov python=3.11
conda activate ppocrv5_ov
Step 2: 安装依赖项
安装必要的依赖项:
pip install paddlepaddle
pip install paddleocr
pip install onnx==1.16.0
paddleocr install_hpi_deps cpu
paddlex --install paddle2onnx
备注:如果你使用的是Windows环境,在安装paddlepaddle时,请安装最新的编译版本,安装指令如下:
python -m pip install --pre paddlepaddle -i https://www.paddlepaddle.org.cn/packages/nightly/cpu/
如果上述指令安装后依旧为PaddlePaddle 3.0.0版本,请前往https://www.paddlepaddle.org.cn/packages/nightly/cpu/网站自行下载安装包安装。
Step 3: 下载官方 PP-OCRv5 训练模型
如果你的电脑安装了wget指令,可以直接运行一下指令进行下载,如果未安装,可以直接在浏览器输入以下链接直接下载:
# Download and unzip PP-OCRv5_server_det pre-trained model
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-OCRv5_server_det_infer.tar && tar -xvf PP-OCRv5_server_det_infer.tar
# Download and upzip PP-OCRv5_server_rec pre-trained model
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-OCRv5_server_rec_infer.tar && tar -xvf PP-OCRv5_server_rec_infer.tar
# Download and upzip PP-OCRv5_server_cls pre-trained model
wget https://paddle-model-ecology.bj.bcebos.com/paddlex/official_inference_model/paddle3.0.0/PP-LCNet_x1_0_doc_ori_infer.tar && tar -xvf PP-LCNet_x1_0_doc_ori_infer.tar
Step 4: 导出ONNX格式的 PP-OCRv5 模型
输入以下指令,便可以实现模型格式转化:
# Export PP-OCRv5_server_det to ONNX
paddlex --paddle2onnx --paddle_model_dir ./PP-OCRv5_server_det_infer --onnx_model_dir ./PP-OCRv5_server_det_onnx
# Export PP-OCRv5_server_rec to ONNX
paddlex --paddle2onnx --paddle_model_dir ./PP-OCRv5_server_rec_infer --onnx_model_dir ./PP-OCRv5_server_rec_onnx
# Export PP-OCRv5_server_cls to ONNX
paddlex --paddle2onnx --paddle_model_dir ./PP-LCNet_x1_0_doc_ori_infer --onnx_model_dir ./PP-OCRv5_server_cls_onnx
如果大家觉得下载转换繁琐,此处我已经给大家转换好并放在GitHub上,链接为:
https://github.com/guojin-yan/PaddleOCR-OpenVINO-CSharp/releases/tag/Modelv5
大家可以根据自己需要自行下载,或加入QQ交流群,通过群文件进行下载,QQ技术交流群为:945057948
4.2 动态库获取
下载C#编译好的Openvino推理库所需要的dll文件,如图所示
5. 代码实现等
1. Labview通过.NET接口调用paddleocr.dll。
2. 设置模型路径和参数,如图所示。
3. 进行推理,获取推理结果信息。
注意:需要使用Labview 64位版本,亲测Labview2015 64位以上版本可用。暂时没有对2015以下的版本进行测试。
6. 总结
在该项目中,基于Labview和OpenVINO C#部署PaddleOCRv5模型,实现了图片文本内容的提取和识别,打通了Labview、C#、OpenVINO、PaddleOCR模型之间的障碍。经过时间测试,在C++和C#中,利用OpenVINO部署PaddleOCR模型并没有太大的时间差异,这对我们开发Labview软件调用PaddleOCR模型提供了选择。
在该项目中,除了利用动态链接库在Labview中实现调用OpenVINO推理套件这一个难点之外,其主要的难点就是模型的结果处理。其主要表现两个方面:
第一点在文字区域识别结果提取上,保证文字区域提取精确这会直接影响文字内容识别。在该项目上主要通过寻找合适的文字框缩放比例来实现,经过验证该方式适合大多数情况。
第二点在文字内容识别的输入上,在该项目中,采用的逐个文字区域识别,因此每个文字区域输入模型时会有不同的大小,这会导致每一张图片都要进行一次模型推理。比较好的解决办法是对文本区域大小进行划分,将一定范围打下的图片和为一组,缩放为相同大小,带入模型,进行多bath_size的模型推理,这会大大减少模型推理的次数,降低推理时间。
7. 致谢
特别感谢椒颜皮皮虾྅大佬的无私奉献,为大家免费提供开源的OpenVINO™.CSharp.API.Extensions.PaddleOCR NuGet 包,我的Labview部署PaddleOCRv5模型都是基于这个库来实现的。
Github地址:
https://github.com/guojin-yan/PaddleOCR-OpenVINO-CSharp
欢迎大家给作者点赞!!!
更多推荐
所有评论(0)