当前位置: 首页 > news >正文

PP-OCRv6 来了,C# 离线 OCR OnnxOCRSharp再升级

1、写在前面

在《离线桌面OCR的用户有福了!试试OnnxOCR的C#版》里,我把 OnnxOCR 的 Python 实现移植成了 C# 版 OnnxOCRSharp,当时用的是 PP-OCRv5 mobile 模型,产品的MVP算是落地了。而在《PP-OCRv6 ONNX部署的官方和手搓方案》中,我又手搓了PP-OCRv6的ONNX部署方案。而今天,OnnxOCRSharp 正式支持 PP-OCRv6了。

这次跟着 PP-OCRv6 的架构变化,把检测后处理、识别预处理、字典加载、图像裁剪整条流水线都重构了一遍。同时发布了0.1.1 版本——NuGet 包可以引用,桌面应用可以直接下载使用,安装包里也不再捆绑 v5 模型了。

同时,我终于把github上自动化发布给玩明白了,直接下载的桌面应用是一体免安装的,打开直接使用。感觉是打开了新世界的大门,越来越有意思了!

2、本次更新了啥

2.1 版本目标

交付物说明
OnnxOcr.Core核心 OCR 引擎,适配 PP-OCRv6
NuGet 包OnnxOcr.Core,方便其他 C# 项目引用
OnnxOcr.Desktop 0.1.0带界面的桌面应用,可直接使用
模型默认使用 PP-OCRv6_tiny 模型

2.2 项目分层(延续 v5 架构)

分层结构没有大改,还是在 v5 基础上做增量适配:

┌─────────────────────────────────────────┐ │ OnnxOcr.Desktop 0.1.1 (WPF) │ 视图 + ViewModel + 关于页 ├─────────────────────────────────────────┤ │ OnnxOcr.App │ 应用服务、DTO ├─────────────────────────────────────────┤ │ OnnxOcr.Core │ OCR 引擎(v6 适配) ├─────────────────────────────────────────┤ │ OnnxOcr.Infrastructure │ ONNX Session、配置加载 └─────────────────────────────────────────┘

2.3 流水线变化

v5 时代是「检测 → [可选]方向校正 → 识别」,v6 官方 ONNX 方案简化为两阶段:

图片输入 ↓ TextDetector(PP-OCRv6 det)→ DbPostProcessV6 ↓ ImageCropper(透视变换裁剪) ↓ TextRecognizer(PP-OCRv6 rec)→ CtcLabelDecode ↓ OcrResult

方向分类模块保留在代码里,但默认关闭——和 Python 手搓方案保持一致。

3、核心改动详解

整体仍是TextSystem串联TextDetector → ImageCropper → TextRecognizer,v5 / v6共用同一套实现,差异主要体现在预设参数模型路径字典来源

3.1 检测模块(TextDetector + DbPostProcess)

预处理:检测仍用 ImageNet 归一化

检测预处理在DetPreprocessor里,v5 和 v6 走同一段代码

// DetPreprocessor.NormalizeImage — 检测侧varmean=new[]{0.485f,0.456f,0.406f};varstd=new[]{0.229f,0.224f,0.225f};// ConvertTo CV_32FC3 → 按通道 (x/255 - mean) / std

另外会对过小图做 padding、按limit_side_len缩放并对齐到 32 的倍数,再转成 CHW 张量喂给 ONNX。

0.5 归一化只用在识别侧(见 3.2),这一点和 Python 手搓笔记里的写法不同。

后处理:DbPostProcess + findContours

后处理类是DbPostProcess,v5 / v6 共用。流程是:

  1. 概率图按det_db_thresh二值化得到 mask(可选 dilation)
  2. Cv2.FindContours找轮廓
  3. MinAreaRect得到旋转框,BoxScoreFast/BoxScoreSlow按区域平均概率过滤
  4. Unclip扩框后映射回原图坐标
// DbPostProcess.BoxesFromBitmapCv2.FindContours(mask,outPoint[][]contours,out_,RetrievalModes.List,ContourApproximationModes.ApproxSimple);for(varindex=0;index<numContours;index++){var(points,shortSide)=GetMiniBoxes(contour);// MinAreaRectif(shortSide<3)continue
http://www.jsqmd.com/news/1119283/

相关文章:

  • AI赋能非技术行业实战:我用DeepSeek+混元整理了2026河北高考志愿填报完整指南
  • 成都月映长滩四层老旧别墅电梯落地:天井改造加装封闭式曳引电梯
  • PyTorch实现猫狗分类器:从数据到部署的完整指南
  • 警惕AI技术谣言:GPT-5并不存在,理性看待大模型演进
  • Python 3个实现屏幕截图工具的方法
  • 聊聊Google Play上架:新号需要走的12人连测14天该怎么操作
  • 27届二本!简历主项目烂大街,立刻放弃主攻开发岗
  • Claude Code 记忆系统的边界感,CLAUDE.md 和 auto memory 怎样分工
  • 【监控与可观测性】03-ELK日志体系搭建:从采集到告警的完整闭环
  • 【Camera】Monocular vs Stereo Calibration
  • 【TwinCAT3实战教程】项目交付前的最后一步:六大核心配置与避坑指南
  • Dell笔记本散热控制终极指南:3步实现专业级风扇管理
  • 智驾人才跨界具身智能:是降维打击还是水土不服?深度技术复盘与工程落地
  • Linux TCP网络编程深度精讲,三次握手、四次挥手、TCP状态流转、粘包拆包、套接字参数、全套服务端客户端实战与工程解决方案
  • Prompt Engineering进阶指南:从提示词工程到AI Agent工作流编排
  • 7自由度开源机械臂OpenArm 2.0:从实验室到生产环境的完整实战指南
  • Codex 卡在 Reconnecting 5/5?手把手带您排查修复
  • 电子合同选型7大盲区,企业必看避坑指南
  • 【中小学AI人工智能教育】声音分类——提琴分类:快速定义项目类型实例
  • 2FA 方案的认证架构对比:本地存储、云同步、端到端加密
  • 2026年第三方物流服务商横向对比:专业3PL与普通物流公司的五大差异——上海心泾国际物流 vs 市场主流服务商
  • 智慧农业技术深耕:从单点赋能到全产业链升级,重构农业生产底层模式
  • RK3588芯片架构解析与硬件设计实践
  • AUTOSAR CP Watchdog 原理与运行机制
  • 针对 Zth(t) 数据和积分结构函数数据的完整 C# 处理方案 包括反卷积(时间常数谱提取)、Foster 模型拟合、Foster → Cauer 转换 以及结构函数生成
  • 国际化办公必备:一站式多语言实时会议转写工具解析
  • 保时捷明确:永远不会有纯电911,保时捷想干嘛?
  • 三、03 OTA-BootLoader前置-flash擦除写入-跳转函数编写
  • 从“能用”到“稳准快”:ChatGPT自定义指令的4阶成熟度模型(附27个真实业务场景指令模板库)
  • Cursor、Claude、OpenAI 的二次验证怎么开?AI 编程工具安全对比