深度学习与 OCR 算子
Plugin.DL 提供基于 ONNXRuntime(支持 CPU / GPU)的深度学习算子与 PaddleOCR 文本识别,全部以模型文件(.onnx)作为输入参数,运行期加载推理。不需要自己搭建训练环境——拿到 .onnx 模型即可接入程序。
算子清单
| 算子 | 任务 | 输出要点 |
|---|---|---|
| DL_Classification | 图像分类 | 类别 + 置信度 |
| DL_ObjectDetection | 目标检测(任意 ONNX 检测模型) | 矩形框 Regions + 置信度 + 类别 |
| DL_ObjectDetection_SplitImg | 大图切块检测(把大图按区域切成多块分别检测再合并) | 同上 |
| DL_DefectSegment | 缺陷分割(像素级掩码) | Region / 掩码 |
| DeepLearning_Segment | 分割(支持双图输入 I/H 形式) | Region / 掩码 |
| DeepLearning_DetectYoloV5 | YOLOv5 专用检测 | 矩形框 + 置信度 + 类别 |
| DeepLearning_PaddleOCR | PaddleOCR 完整版(检测+方向分类+识别三段模型) | 文本 + 坐标 |
| DeepLearning_PaddleOCR_lite | PaddleOCR 轻量版(只给模型目录) | 文本 + 坐标 |
检测 / 分类类工具的通用输入输出
以 DeepLearning_DetectYoloV5 为例(其余检测类算子同构):
| 输入 | 说明 |
|---|---|
| Image | 输入图像 |
| ModelPath | ONNX 模型文件(.onnx),例如 ...\Models\yolov5\yolov5n.s.onnx |
| ClassNamesPath | 类别名称文件(.names,一行一个类别名) |
| SplitRegions | 可选:只检测指定的矩形区域列表(空 = 全图) |
| EnableGPU | 0 = CPU,1 = GPU(需要 GPU 版 ONNX Runtime) |
| ConfThreshold | 置信度阈值,默认 0.25 |
| IouThreshold | NMS 的 IoU 阈值,默认 0.45 |
| ShowDebugImage | 是否显示调试可视化 |
| 输出 | 说明 |
|---|---|
| Regions | 每个检测框(轴对齐矩形,RECTANGLE2D 数组),与输入图同坐标 |
| Confidence | 每个框的置信度(vDOUBLE,与 Regions 一一对应) |
| ClassId / ClassName | 每个框的类别 ID 与名称 |
输出与输入一一对齐:Regions / Confidence / ClassId / ClassName 是平行数组,下标相同即同一目标。下游“画框 → 按置信度过滤 → 统计数量 → IF 判断”全部基于这组平行输出。
模型从哪来
1. 使用随插件安装的内置模型(最快上手)
Plugin.DL 安装后自带示例模型,位于插件目录的 Models\ 子目录:
Models\
├── classification\cls_model.onnx ← 分类示例
├── objectDetection\model.onnx ← 检测示例
├── defectDetection\seg_model.onnx ← 缺陷分割示例
├── yolov5\yolov5n.s.onnx ← YOLOv5n 轻量检测
└── PPOCR\ch_PP-OCRv3\
├── det_dbnet.onnx ← 检测(找文本行)
├── angle_net.onnx ← 方向分类(判断文字倒正)
├── rec.onnx ← 识别(行 → 字符串)
└── keys.txt ← 中文字典
把算子的 ModelPath 等参数指向这些文件即可跑通流程;用于演示与联调。也可以把你自己的模型放到同一目录,路径用 $(SolutionDir) 或相对约定管理(见 总览)。
2. 使用自训练 / 第三方模型
- 格式统一为 ONNX(
.onnx):PyTorch / PaddlePaddle / TensorFlow 模型均可导出为 ONNX; - 类别文件
.names每行一个类别名,顺序必须与训练时类别索引一致——这是检测结果张冠李戴的最常见原因; - 输入图像的预处理约定(尺寸、归一化、通道顺序)随模型而异,请与模型来源方确认;不匹配时典型表现是“能跑但检出率极低”。
OCR:文字识别
PaddleOCR 采用三段式:检测(Det)→ 方向分类(Cls)→ 识别(Rec)。完整版(DeepLearning_PaddleOCR)把三段模型的路径分开给:
| 输入 | 说明 |
|---|---|
| DetModelPath | 文本检测模型 det_dbnet.onnx(先找出哪些像素是文字) |
| ClsModelPath | 方向分类模型 angle_net.onnx(判断文字是否倒置,可关) |
| RecModelPath | 识别模型 rec.onnx(把文本行变成字符串) |
| KeysPath | 字典文件 keys.txt(模型支持的字符集,中文按此字典解码) |
| SplitRegions | 可选:只识别指定区域 |
| EnableGPU / ThreadsOfCPU | 推理加速选项 |
| Padding / MaxSideLen | 检测前图像预处理(外扩填充 / 最长边限制) |
| BoxScoreThresh / BoxThresh / UnClipRatio | 文本检测灵敏度:得分阈值、二值化阈值、外扩比例 |
| DoAngle / MostAngle | 方向分类开关与多数投票策略 |
| 输出 | 说明 |
|---|---|
| Characters | 识别出的文本(vSTRING,每行一条,按阅读顺序与文本框对齐) |
| CharactersHEX | 文本的 HEX 编码(用于编码不可靠时的无损传递) |
| CharConfidence | 每个字符的置信度 |
| RectRegions | 每个文本行的位置矩形(与 Characters 一一对应) |
| RegionConfidence | 每个文本区域的置信度 |
轻量版
DeepLearning_PaddleOCR_lite只给一个ModelDir目录(内含三段模型与字典),适合固定部署。
使用要点与坑
- 中英文混排:PaddleOCR 的 rec 模型按字典解码;换用其它语言字典 / 模型时同步替换 KeysPath;
- 方向分类:文本倒置导致乱码时,确认 DoAngle=1;旋转文本先做透视矫正再识别,效果远好于硬识别;
- 大图:先 SplitRegions 圈定铭牌 / 条码区域,比整图 OCR 快且准;
- 文本与框对齐:Characters 与 RectRegions 平行对齐,可以给“读到的值”和“在图上哪个位置”一一对应,方便画框复核;
- 编码:涉及中文的字符串在部分环节按平台约定的 GBK 编码处理——跨系统回传文本出现乱码时,优先检查两边编码与 HEX 通道。
通用:CPU 与 GPU
- 所有 DL 工具默认 CPU 推理(EnableGPU=0);
ThreadsOfCPU控制 CPU 线程数; - 启用 GPU(EnableGPU=1)需要安装 GPU 版 ONNX Runtime 且机器有可用 CUDA 环境;未装时运行会报错并提示,回退 CPU 即可。
- 模型加载是运行时动作:换模型只需改 ModelPath 参数并重跑,无需重启程序。
建议的调试链路
检测模型接入后先按下面顺序验证,能快速区分“模型问题”还是“流程问题”:
- 单图跑通:只放检测算子 + 查看 Regions / Confidence,确认框的位置对不对;
- 阈值调节:ConfThreshold 从 0.1~0.7 扫一遍,看漏检 / 误检拐点;
- 加 SplitRegions:把检测限制在 ROI 内,比较速度与误检;
- 再接下游(过滤、计数、IF 判断),并用用户视图把框画出来复核。