跳到主要内容
版本:1.0.0

深度学习与 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_DetectYoloV5YOLOv5 专用检测矩形框 + 置信度 + 类别
DeepLearning_PaddleOCRPaddleOCR 完整版(检测+方向分类+识别三段模型)文本 + 坐标
DeepLearning_PaddleOCR_litePaddleOCR 轻量版(只给模型目录)文本 + 坐标

检测 / 分类类工具的通用输入输出​

以 DeepLearning_DetectYoloV5 为例(其余检测类算子同构):

输入说明
Image输入图像
ModelPathONNX 模型文件(.onnx),例如 ...\Models\yolov5\yolov5n.s.onnx
ClassNamesPath类别名称文件(.names,一行一个类别名)
SplitRegions可选:只检测指定的矩形区域列表(空 = 全图)
EnableGPU0 = CPU,1 = GPU(需要 GPU 版 ONNX Runtime)
ConfThreshold置信度阈值,默认 0.25
IouThresholdNMS 的 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 参数并重跑,无需重启程序。

建议的调试链路​

检测模型接入后先按下面顺序验证,能快速区分“模型问题”还是“流程问题”:

  1. 单图跑通:只放检测算子 + 查看 Regions / Confidence,确认框的位置对不对;
  2. 阈值调节:ConfThreshold 从 0.1~0.7 扫一遍,看漏检 / 误检拐点;
  3. 加 SplitRegions:把检测限制在 ROI 内,比较速度与误检;
  4. 再接下游(过滤、计数、IF 判断),并用用户视图把框画出来复核。