news 2026/6/14 23:11:00

基于C#winform使用纯opencv部署ppocrv5和ppocrv6的onnx模型进行OCR文件检测识别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于C#winform使用纯opencv部署ppocrv5和ppocrv6的onnx模型进行OCR文件检测识别

使用纯opencv实现PaddleOCR v5/v6 OCR识别

项目简介

这是一个基于 C# Windows Forms 的桌面端 OCR(光学字符识别)应用程序,通过集成百度 PaddleOCR v5/v6 系列模型,利用 OpenCV DNN 推理引擎在本地实现高效的文字检测与识别。用户可通过图形界面选择图片,一键完成文字识别,并在界面上直观查看识别结果与文字区域标注框。


算法原理

整体 OCR 流水线

本项目采用经典的三阶段 OCR 流水线架构:

输入图片 → 文字检测(Det) → 方向分类(Cls,可选) → 文字识别(Rec) → 输出结果
1. 文字检测(Detection)

使用 DB(Differentiable Binarization)算法进行文字区域检测,主要步骤如下:

  1. 将输入图片按比例缩放,使最长边不超过limit_side_len(默认 960 像素),保持原始长宽比
  2. 通过轻量级 CNN 骨干网络提取多尺度特征
  3. 使用 FPN(Feature Pyramid Network)融合多尺度特征图,输出概率图(Probability Map)
  4. 对概率图以阈值det_db_thresh(默认 0.3)进行二值化处理
  5. 对二值图进行轮廓检测,使用 Vatti 裁剪算法按det_db_unclip_ratio(默认 1.6)进行膨胀扩张,得到完整的文字区域多边形框
  6. 过滤置信度低于det_db_box_thresh(默认 0.6)的检测框,得到最终检测结果
2. 方向分类(Classification,可选)
  • 仅在勾选cls复选框后启用,默认关闭
  • 使用轻量级分类模型(PP-OCRv5_mobile_cls_onnx.onnx)判断文字区域是否存在 180° 倒置
  • 分类阈值cls_thresh = 0.9,高于该阈值时执行翻转校正
  • 批量处理数量由cls_batch_num(默认 8)控制
3. 文字识别(Recognition)

使用 CRNN + CTC 架构进行端到端文字识别,主要步骤如下:

  1. 将每个检测到的文字区域裁剪并缩放到统一尺寸(高度rec_img_h = 48,宽度rec_img_w = 320
  2. 通过 CNN 骨干网络提取视觉特征序列
  3. 使用 BiLSTM(双向长短期记忆网络)编码序列上下文信息
  4. 通过 CTC(Connectionist Temporal Classification)解码输出最终识别文字
  5. 支持批量推理,批次大小由rec_batch_num(默认 4)控制,提升多行文字的处理效率
  6. 多 Predictor 并行推理,数量由rec_predictor_num(默认 4)控制

推理引擎

项目通过C++ DLL封装库C#调用OpenCV DNN 模块作为推理后端,直接加载 ONNX 格式模型,具有以下特点:

  • 无需额外安装 OpenVINO、CUDA 等推理框架,部署简单
  • 原生支持 CPU 推理,兼容性强
  • 通过 C# P/Invoke 调用 C++ 原生接口,性能接近原生水平
  • 图像数据以 BGR 24位格式直接传入,避免不必要的格式转换开销

支持的模型

模型选项检测模型识别模型方向分类字典文件说明
v5 mobilePP-OCRv5_mobile_det_onnx.onnxPP-OCRv5_mobile_rec_onnx.onnx支持(可选)ppocrv5_dict.txt轻量级,支持方向分类
v5 serverPP-OCRv5_server_det_infer.onnxPP-OCRv5_server_rec_infer.onnx不支持ppocrv5_dict.txt高精度大模型
v6 tinyPP-OCRv6_tiny_det.onnxPP-OCRv6_tiny_rec.onnx不支持PP-OCRv6_tiny_rec_dict.txt体积最小,速度最快(默认)
v6 smallPP-OCRv6_small_det.onnxPP-OCRv6_small_rec.onnx不支持PP-OCRv6_small_rec_dict.txt精度与速度均衡

环境要求

项目要求
操作系统Windows 10 / 11(64位)
开发工具Visual Studio 2019 及以上版本
.NET 版本.NET Framework 4.8
平台架构x64(强制要求)
C# 语法版本C# 7.3

核心依赖库

文件说明
opencv_world500.dllOpenCV 5.0 运行时库(包含 DNN 推理模块)
Newtonsoft.Json.dll(13.0.1)JSON 序列化/反序列化库

安装步骤

1. 下载项目源码

gitclone firc-projectscdFIRC

2. 安装 Visual Studio

确保已安装 Visual Studio 2019 或更高版本,并勾选.NET 桌面开发工作负载。

3. 打开解决方案

双击FIRC.sln文件,在 Visual Studio 中打开项目。

4. 配置构建平台

在 Visual Studio 顶部工具栏中进行以下设置:

  • 解决方案平台切换为x64(必须,不支持 x86)
  • 解决方案配置切换为DebugRelease

5. 确认运行时依赖文件

确保编译输出目录(bin\x64\Debug\)中包含以下关键文件:

bin\x64\Debug\ ├── opencv_world500.dll # OpenCV 运行时 ├── Newtonsoft.Json.dll # JSON 库 ├── FIRC.exe # 主程序 └── inference/ # 模型文件夹(必须完整)

如依赖文件缺失,请从发布包或原始编译目录中复制补充。


运行步骤

1. 编译启动

在 Visual Studio 中按F5编译运行,或直接运行已编译的FIRC.exe

2. 选择 OCR 模型

在主界面左上角“ocr”分组框中选择模型:

  • v5 mobile:PPOCRv5 轻量移动端模型,支持方向分类
  • v5 server:PPOCRv5 高精度服务器模型
  • v6 small:PPOCRv6 平衡型模型
  • v6 tiny:PPOCRv6 最小体积模型(默认选中)

3. 调整推理参数(可选)

主界面提供以下可调参数分组:

det(检测参数):

  • det_db_thresh:检测二值化阈值,默认 0.3
  • det_db_box_thresh:检测框置信度阈值,默认 0.6
  • det_db_unclip_ratio:文字框膨胀比例,默认 1.6

rec(识别参数):

  • rec_batch_num:识别批次大小,默认 4
  • rec_predictor_num:Predictor 并行数量,默认 4

cls(分类参数,仅 v5 mobile 生效):

  • cls:是否启用方向分类,默认关闭
  • cls_batch_num:分类批次大小,默认 8

4. 加载模型

点击右上角“初始化”按钮,等待日志区域显示模型加载成功信息。首次加载大模型可能需要数秒,Server 模型加载时间更长。

5. 选择并识别图片

  • 点击“选择图片”按钮,从文件对话框中选择待识别图片(支持 BMP、JPG/JPEG、PNG、TIFF/TIF 格式)
  • 选择图片后会自动触发识别,也可手动点击“识别”按钮重新执行
  • 识别完成后:
    • 左侧图片区域:显示带有红色文字检测多边形框的标注图
    • 右侧文本区域:显示识别文字结果及耗时(毫秒)
    • 勾选“显示全部信息”可查看完整的 JSON 格式结果(含坐标、置信度等详细信息)

6. 释放模型资源

  • 再次点击“初始化”按钮可先释放再重新加载模型
  • 关闭窗口时程序会自动释放模型资源

注意事项

  1. 强制 x64 平台opencv_world500.dll为 64 位库,项目必须以 x64 平台编译运行,不支持 x86。

  2. 模型文件完整性inference/目录下的 ONNX 模型文件和字典文件必须完整,缺失任一将导致对应模型初始化失败。

  3. 工作目录:程序从FIRC.exe所在目录查找inference/文件夹,请确保从正确的编译输出目录运行,或将模型文件复制到可执行文件同级目录。

  4. 内存占用:v5 server 模型文件较大(检测模型约 84MB,识别模型约 80MB),加载后内存占用较高,建议在内存充足的环境下使用。

  5. 图片输入格式:程序内部将图片转换为 24 位 BGR 格式(OpenCV 标准格式)送入推理引擎,建议使用清晰、无过度压缩的图片以获得最佳识别效果。

  6. 参数调节建议

    • det_db_thresh降低可检出更多文字区域,但可能增加误检
    • det_db_box_thresh降低可保留更多低置信度检测框
    • det_db_unclip_ratio增大可扩大文字框范围,适合模糊文字
    • 调整参数后需重新点击“初始化”使参数生效
  7. 方向分类限制cls方向分类功能仅对 v5 mobile 模型有效,其他模型不支持该功能,勾选无效。

  8. 模型切换:切换模型选项后,必须重新点击“初始化”按钮才能加载新模型。


文件夹结构

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 # .NET 应用配置文件 │ ├── FIRC.pdb # 调试符号文件 │ ├── opencv_world500.dll # OpenCV 5.0 运行时库 │ ├── Newtonsoft.Json.dll # JSON 处理库 │ ├── 1.jpg # 示例图片 │ └── 3.jpg # 默认加载的示例图片 ├── imgs/ # 示例测试图片目录 │ ├── 00006737.jpg # 测试样本图片 │ ├── 00009282.jpg │ ├── 00015504.jpg │ ├── 00018069.jpg │ └── ... # 更多测试样本 ├── App.config # .NET 应用程序配置文件 ├── FIRC.csproj # C# 项目文件(.NET Framework 4.8,x64) ├── FIRC.sln # Visual Studio 解决方案文件 ├── Form1.cs # 主窗体业务逻辑(模型加载、推理、结果显示) ├── Form1.Designer.cs # 主窗体 UI 界面设计代码 ├── Form1.resx # 主窗体资源文件 ├── OCRResult.cs # OCR 识别结果数据模型(text、score、坐标点) └── Program.cs # 程序入口点
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 23:04:01

优秀Java程序员必修课:性能优化与故障排除!

性能优化可以说是我们程序员的必修课,如果你想要跳出CRUD的苦海,成为一个更“高级”的程序员的话,性能优化这一关你是无论无何都要去面对的。为了提升系统性能,开发人员可以从系统的各个角度和层次对系统进行优化。除了最常见的代…

作者头像 李华
网站建设 2026/6/14 22:57:33

Sunshine多客户端游戏串流:终极家庭游戏共享解决方案

Sunshine多客户端游戏串流:终极家庭游戏共享解决方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine作为Moonlight的自托管游戏串流服务器,为技术…

作者头像 李华
网站建设 2026/6/14 22:42:08

告别混乱!用Ba-IdCode-U插件统一获取UniAppX中的设备ID(OAID/AndroidID/IMEI)

跨平台设备标识符实战指南:在UniAppX中优雅解决ID混乱难题国内安卓生态的碎片化现状让开发者们头疼不已——当你需要获取设备标识符时,面对OAID、AndroidID、IMEI等七八种选项,就像走进了一家没有菜单的餐厅。去年我们团队在开发一款跨平台电…

作者头像 李华
网站建设 2026/6/14 22:41:14

5大核心功能揭秘:SMUDebugTool如何彻底释放AMD处理器的隐藏潜能

5大核心功能揭秘:SMUDebugTool如何彻底释放AMD处理器的隐藏潜能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: h…

作者头像 李华
网站建设 2026/6/14 22:37:07

压力液位测控仪MSB9418

压力液位测控仪MSB9418压力液位测控仪MSB9418MSB9418测量控制器主要用于节水、水电计量等工业液位和压力的测控系统,涉及水池、水井、自来水供应、管道、水箱’的压力测控,以及显示和监控。本产品也可以通过串行通信或隔离发送器将数据传输到中央控制室或…

作者头像 李华