基于C#winform部署ppocrv5和ppocrv6的onnx模型进行OCR文件检测识别
基于 PaddleOCR v5/v6 的winform OCR 识别系统演示程序
项目简介
这是一个基于 C# Windows Forms 的桌面端 OCR(光学字符识别)应用程序,通过集成百度 PaddleOCR v5/v6 系列的onnx模型,利用 OpenVINO 推理引擎在本地实现高效的文字检测与识别。用户可通过图形界面选择图片,一键完成文字识别,并在界面上直观查看识别结果与标注框。

算法原理
整体 OCR 流水线
本项目采用经典的 三阶段 OCR 流水线 架构:
输入图片 → 文字检测(Det) → 方向分类(Cls,可选) → 文字识别(Rec) → 输出结果
1. 文字检测(Detection)
使用 DB(Differentiable Binarization) 算法进行文字区域检测:
- 将输入图片缩放到指定尺寸(
limit_side_len = 960),保持长宽比 - 通过轻量级 CNN 骨干网络(如 MobileNetV3 / ResNet)提取多尺度特征
- 使用 FPN(Feature Pyramid Network)融合多尺度特征图
- 输出概率图(Probability Map),通过阈值化(
det_db_thresh = 0.3)生成二值图 - 对二值图进行轮廓检测,使用 Vatti 裁剪算法进行膨胀(
det_db_unclip_ratio = 1.6)得到最终文字区域多边形框 - 过滤置信度低于
det_db_box_thresh = 0.6的框
2. 方向分类(Classification,可选)
- 仅 PPOCRv5 Mobile 模型启用此阶段
- 使用轻量级分类模型判断文字区域是否需要旋转 180°
- 分类阈值
cls_thresh = 0.9
3. 文字识别(Recognition)
使用 CRNN + CTC / Attention 架构进行文字识别:
- 将检测到的文字区域裁剪并缩放到统一高度(
rec_img_h = 48) - 通过 CNN 提取视觉特征序列
- 使用 RNN(BiLSTM)编码序列上下文
- 通过 CTC(Connectionist Temporal Classification)解码输出文字
- 支持批量推理(
rec_batch_num = 4)提升效率
推理引擎
项目通过C++封装库C#调用 Intel OpenVINO 推理引擎,支持:
- ONNX 模型格式直接加载
- CPU 推理(默认)
- 多线程推理(
predictor_num = 4)
支持的模型
| 模型名称 | 检测模型 | 识别模型 | 方向分类 | 说明 |
|---|---|---|---|---|
| PPOCRv5 Mobile | PP-OCRv5_mobile_det | PP-OCRv5_mobile_rec | 支持 | 轻量级,适合移动端/嵌入式 |
| PPOCRv5 Server | PP-OCRv5_server_det | PP-OCRv5_server_rec | 不支持 | 高精度,适合服务器部署 |
| PPOCRv6 Tiny | PP-OCRv6_tiny_det | PP-OCRv6_tiny_rec | 不支持 | 最小体积,速度最快 |
| PPOCRv6 Small | PP-OCRv6_small_det | PP-OCRv6_small_rec | 不支持 | 平衡精度与速度(推荐) |
| PPOCRv6 Medium | PP-OCRv6_medium_det | PP-OCRv6_medium_rec | 不支持 | 较高精度 |
环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10/11 x64 |
| 开发工具 | Visual Studio 2019 及以上 |
| .NET 版本 | .NET Framework 4.8 |
| 平台架构 | x64(必须) |
| C# 语法版本 | C# 7.3 |
| 推理引擎 | Intel OpenVINO(已内置 DLL) |
依赖库
- opencv_world500.dll:OpenCV 5.0 运行时库(图像处理)
- Newtonsoft.Json 13.0.1:JSON 序列化/反序列化
- Intel OpenVINO 运行时 DLL:openvino_c.dll、openvino_intel_cpu_plugin.dll 等
安装步骤
1. 克隆/下载项目
git clone firc-projects from github
cd FIRC
2. 安装 Visual Studio
确保已安装 Visual Studio 2019 或更高版本,并勾选以下工作负载:
- .NET 桌面开发
3. 打开项目
双击 FIRC.sln 文件,使用 Visual Studio 打开解决方案。
4. 配置构建平台
在 Visual Studio 顶部工具栏中:
- 将解决方案平台切换为 x64
- 将解决方案配置切换为 Debug 或 Release(需要将Debug文件全部复制到Release文件夹)
5. 确认依赖文件
确保 bin\x64\Debug\ 目录下包含以下关键文件:
opencv_world500.dllopenvino_c.dll及其他 OpenVINO 运行时 DLLNewtonsoft.Json.dllinference/文件夹(包含所有 ONNX 模型和字典文件)
运行步骤
1. 编译运行
在 Visual Studio 中按 F5 或点击 启动 按钮编译运行项目。
2. 选择模型
在主界面的 “模型选择” 分组框中选择要使用的 OCR 模型:
ppocrv5 mobile:轻量级移动端模型,支持方向分类ppocrv5 server:高精度服务器模型ppocrv6 tiny:最小体积 v6 模型ppocrv6 small:平衡型 v6 模型(默认选中)ppocrv6 medium:中等精度 v6 模型
3. 加载模型
点击 “加载模型” 按钮,等待状态栏显示 模型加载成功 信息。首次加载可能需要数秒。
4. 上传图片
点击 “上传图片” 按钮,从文件对话框中选择待识别的图片文件。支持的格式:
- BMP、JPG/JPEG、PNG、TIFF/TIF
5. 执行识别
- 选择图片后会自动触发识别(也可手动点击 “开始推理” 按钮)
- 识别完成后,左侧图片区域会显示带有红色文字检测框的标注图
- 右侧文本区域显示识别结果及耗时
6. 释放模型
- 点击 “加载模型” 按钮可重新初始化(先释放再加载)
- 关闭窗口时会自动释放模型资源
注意事项
-
必须使用 x64 平台:所有依赖 DLL(OpenVINO、OpenCV)均为 64 位,不支持 x86 平台构建。
-
模型文件完整性:
bin\x64\Debug\inference\目录下的 ONNX 模型文件和字典文件必须完整,缺失任一将导致模型加载失败。 -
工作目录:程序会从可执行文件所在目录查找
inference/文件夹,因此请确保从正确的输出目录运行。 -
内存使用:Server 模型和 Medium 模型体积较大,内存占用相应更高。如内存不足,建议使用 Tiny 或 Small 模型。
-
图片格式:程序内部将图片转换为 24 位 BGR 格式送入推理引擎,支持常见图片格式,建议使用清晰、无过度压缩的图片以获得最佳识别效果。
-
CPU 推理性能:默认使用 CPU 推理,对于大尺寸图片,推理时间可能较长。可通过调整
limit_side_len、rec_batch_num、predictor_num等参数优化性能。 -
模型切换:切换模型后需要重新点击 “加载模型” 按钮使新模型生效。
-
PPOCRv5 Mobile 方向分类:仅 PPOCRv5 Mobile 模型启用了方向分类(Cls)功能,其他模型不启用。如文档存在倒置/旋转文字,建议使用 PPOCRv5 Mobile 模型。
文件夹结构
FIRC/
├── .vs/ # Visual Studio 项目配置(自动生成)
├── Properties/ # 项目属性文件
│ ├── AssemblyInfo.cs # 程序集信息(版本号、版权等)
│ ├── Resources.Designer.cs # 资源文件设计器代码
│ ├── Resources.resx # 资源文件
│ ├── Settings.Designer.cs # 设置文件设计器代码
│ └── Settings.settings # 应用程序设置
├── bin/
│ └── x64/
│ └── Debug/ # 编译输出目录(x64 Debug)
│ ├── inference/ # OCR 模型文件目录
│ ├── FIRC.exe # 主程序可执行文件
│ ├── FIRC.exe.config # 程序配置文件
│ ├── opencv_world500.dll # OpenCV 运行时库
│ ├── openvino_c.dll # OpenVINO C API 库
│ ├── openvino_intel_cpu_plugin.dll # OpenVINO CPU 推理插件
│ ├── openvino_intel_gpu_plugin.dll # OpenVINO GPU 推理插件
│ ├── openvino_intel_npu_plugin.dll # OpenVINO NPU 推理插件
│ ├── Newtonsoft.Json.dll # JSON 处理库
│ ├── tbb12.dll # Intel TBB 多线程库
│ └── ... (其他 OpenVINO/TBB 运行时 DLL)
├── imgs/ # 示例测试图片目录
│ ├── 00006737.jpg # 示例图片
│ ├── 00009282.jpg
│ ├── 00015504.jpg
│ └── ... (更多示例图片)
├── App.config # .NET 应用程序配置文件
├── FIRC.csproj # C# 项目文件
├── FIRC.sln # Visual Studio 解决方案文件
├── Form1.cs # 主窗体业务逻辑
├── Form1.Designer.cs # 主窗体界面设计代码
├── Form1.resx # 主窗体资源文件
├── OCRResult.cs # OCR 识别结果数据模型
└── Program.cs # 程序入口点
许可证
本项目仅供学习参考使用。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)