跳到主要内容

AI 驱动文档

您想了解什么?

OCR(光学字符识别)

时间:30-45 分钟

OV80i 可以直接从摄像头图像中读取印刷文本、序列号、日期码以及其他字母数字字符,使用预训练的 OCR 模型。与分类器与分割器不同,OCR 需要的训练数据为。它可开箱即用。

OCR 在以下场景中尤为有用:

  • 验证序列号或批次代码是否与预期值匹配
  • 确认标签存在且可读
  • 读取日期/到期代码以实现可追溯性
  • 在装配过程中检查组件上的部件编号
OV80i Only

OCR 仅在 OV80i 上可用。OV20i 和 OV10i 不支持 OCR。


OCR 的工作原理

OV80i 使用两阶段 AI 流水线进行文本识别:

  1. Text Detection:在 ROI 内定位文本所在区域。对检测到的每个单词或文本区域返回边界框。
  2. Text Recognition:读取每个检测到的边界框内的字符,并返回带有置信分数的文本字符串。

整个过程在摄像头的 NVIDIA Jetson Orin NX GPU 上运行。不需要云端连接。

该模型识别的字符集包括:

  • 数字 (0-9)
  • 拉丁字母 (A-Z, a-z, 带重音的字符)
  • 常见标点符号和符号
  • 希腊字母
  • 货币符号
  • 数学运算符
备注

字符集是固定的,无法自定义。该模型支持大约 480 个字符,覆盖大多数用拉丁字母语言印刷的工业文本。


先决条件

在设置 OCR 之前,您需要一台具备以下条件的相机:

  • 已物理安装并稳定
  • 已连接到网络并可在浏览器中访问
  • 对带有文本的部件进行了聚焦

如果尚未完成,请先按照入门指南操作:


步骤 1:创建新配方

每次检查都从一个配方开始。配方是一个完整的软件包:图像设置、对齐、检查区域、AI 模块和输出规则。

  1. 在左侧栏导航至 所有配方
  2. 在右上角点击 + 新建
  3. 给你的配方起一个描述性名称(如 “Serial Number Check”、“Label Verification”)
  4. 点击 启用 使其成为活动配方,然后点击 编辑 打开配方编辑器

配方编辑器概览,显示所有模块

配方编辑器展示完整的检测流水线。您将从左到右依次进行:

  • 成像设置(摄像头设置)
  • 图像对齐与检查设置(模板、ROI)
  • AI 模块(Classification、Segmentation、OCR、Measurement)
  • 设定通过/失败及 IO 逻辑(输出规则)

关于配方创建的详细演练,请参阅 创建第一项检查.


步骤 2:配置成像设置

良好的图像质量是实现准确 OCR 的基础。文本必须清晰可见,且对比度要高。

  1. 点击 配置成像 或切换到 成像设置 标签
  2. 在观看实时预览时,调整以下设置:
设置项OCR 目标
曝光足以清晰看到所有文本。太暗,字符会融入背景;太亮,白色标签会被过曝。
增益尽量保持在最低水平。高增益会引入噪声,看起来像文本伪影。
伽玛调整以改善文本与背景之间的对比度。
对焦文本必须清晰锐利。如果字符看起来模糊,请调整 C‑mount 镜头对焦环。
Lighting is critical for OCR

OCR 的识别准确性在很大程度上依赖于图像质量。相机图像中的文本必须清晰可见,且与背景形成良好对比。深色文本在浅色背景上效果良好,浅色文本在深色背景上也能良好工作。避免:

  • 光线不均,导致字符上出现阴影
  • 高光标签上的眩光
  • 低曝光,使文本与背景难以区分
提示

放大实时预览中的文本区域。你能清晰读出每一个字符吗?如果你不能读出它,AI 也读不出。

如需关于所有成像设置的详细指南,请参阅 图像设置.

第 3 步:设置模板对齐

Template alignment 告诉相机如何跟踪工件的位置和方向。这一步很关键,因为工件在传送带或治具上的落点并不总是完全一致。

  1. 导航到 Template Image and Alignment 选项卡
  2. 将工件放入摄像机的视野
  3. 点击 Capture Template 以获取参考图像
  4. 在始终存在且易于识别的特征上绘制 2-3 个小模板区域(例如角落、徽标、安装孔)
备注

尽量让模板区域在工件上相距越远越好。这样可以显著降低对齐过程中的角度抖动。两个区域若靠得太近会导致旋转稳定性差;两个区域在对角线的对角角上则提供出色的稳定性。

注意

如果跳过对齐,OCR ROI 将被固定在绝对像素位置。工件的任何移动都会使 ROI 漏读文本。请始终为生产使用设置对齐。

有关模板对齐的详细指南,请参见 Alignment.


第 4 步:创建 OCR 检查区域(ROIs)

现在您将确切定义相机在工件上应查找文本的位置。这是提升 OCR 准确性的最关键步骤。

4a. 转到检查设置

  1. 在 Recipe Editor 中点击 Inspection Setup 选项卡
  2. 您将看到带有模板图像的 Inspection Editor

4b. 添加 OCR 模型

  1. 在右侧面板,查找 Models 区域
  2. 如果未看到列出 OCR 模型,请点击底部的 Add 按钮并选择 OCR
  3. OCR 模型将出现在 Models 列表中
备注

你在一个 recipe 中只能有 one OCR block per recipe。不过,你可以在该块中创建多个 ROI,以便从工件的不同区域读取文本。

4c. 创建一个 OCR ROI

  1. 确保在 Models 列表中所选的 OCR 模型行处于选中状态(高亮显示)
  2. 在 Region of Interest 区域点击 Add ROI
  3. 图像上会出现一个新的矩形 ROI
  4. 将 ROI 拖动定位在你要读取的文本上方
  5. 通过拖动角手柄调整大小

Inspection Setup with OCR ROI drawn over text

4d. 设置 ROI 方向

ROI Orientation MUST Match Text Orientation

这是最重要的一点。ROI 的方向必须与要读取文本的方向一致。

OCR 引擎会使用 ROI 的角度裁剪图像,然后将裁剪区域当作水平文本来处理。如果 ROI 角度和文本角度不一致,引擎将尝试读取旋转文本,结果会变成垃圾信息。

示例:

  • 文本水平从左到右:ROI 角度应为 0 度
  • 文本顺时针旋转 90 度:ROI 角度应为 90 度
  • 文本颠倒:ROI 角度应为 180 度
  • 文本呈 45 度角:ROI 角度应为 45 度

如何旋转 ROI:

  1. 通过单击选中 ROI
  2. 使用 ROI 角落处的旋转手柄,或者
  3. 在画布底部的定位字段中直接设置角度值

位置栏显示:H(高度)、W(宽度)、XY(位置),以及以度为单位的 angle

ROI selected showing position, dimensions, and angle of 90.96 degrees

4e. 正确设定 ROI 大小

  • 尽量让 ROI 紧贴文本区域。 额外的背景会引入噪声,可能导致误检。
  • 在文本周围包含一个小边距(10-20 像素),以防字符被边缘裁剪。
  • 不要包含你不想读取的其他文本。 如果存在多个文本区域,请为每个区域创建独立的 ROI。
提示

如果需要从零件的多个区域读取文本(例如序列号和日期码),请为每个区域创建单独的 ROI。这会为你提供独立的结果,并使通过/失败规则更易配置。

4f. 创建额外的 ROIs(可选)

为每个需要读取的文本区域重复步骤 4c-4e。每个 ROI 在 Region of Interest 列表中获得自己的名称。通过双击名称将它们重命名为更具描述性的名称(例如 "Serial Number"、"Date Code"、"Part Label")。

提示

使用复制粘贴来复制 ROI。名称会自动自增(例如 "ROI"、"ROI (1)"、"ROI (2)")。


步骤 5:配置和测试 OCR 模块

5a. 进入 OCR 模块

在 Recipe Editor 的选项卡栏中点击 OCR Block 选项卡。左侧将看到摄像头画面,右侧为设置面板。

OCR Block overview page

右侧面板显示:

  • 光学字符识别(OCR)描述
  • 这是一个预训练模型,无需训练数据
  • 使用 Live Preview 或 Test 进行验证的说明

5b. 启用实时预览

在右上角勾选 “Live Preview Mode” 复选框。摄像头将实时处理帧。

OCR Live Preview with parameters panel

启用 Live Preview 后,你将看到:

  • 处理时间:OCR 模型每帧耗时
  • 延迟:包括图像捕获和渲染在内的总往返时间
  • 叠加在摄像头画面上的文本区域周围的紫色边框
  • 在每个边框上显示的检测文本标签
  • 右侧用于调整检测设置的参数面板

5c. 验证 OCR 是否正确读取

开启 Live Preview 时,将部件放在摄像头下并进行以下验证:

  1. 是否检测到所有文本区域? 你应在 ROI 的每个单词/短语周围看到紫色边框。
  2. 文本是否被正确读取? 标签应与部件上的实际文本相匹配。
  3. 是否存在误检? 非文本区域是否被错误识别为文本?
  4. 将部件稍微移动。 OCR 在不同位置是否仍然工作?(这是对齐测试)

如果文本未被检测到或被误读,请检查:

  • ROI 方向是否与文本方向一致(请参见步骤 4d)
  • ROI 是否正确定位在文本之上
  • 图像质量是否良好(对焦清晰、对比度良好、光线均匀)
  • 尝试调整 OCR 参数(见下节)

步骤 6:调整 OCR 参数

开启 Live Preview 时,右侧面板显示四个可调参数。这些参数控制文本检测阶段(定位文本所在位置),而非识别阶段(读取文本内容)。

参数默认值作用说明
文本分割阈值0.10检测器对区域包含文本的置信度阈值。数值越高,检测越严格,假阳性越少,但可能漏检微弱文本。数值越低,灵敏度越高,能检测到微弱文本,但可能出现假检出。取值范围:0.0 至 1.0。
Unclip Ratio(展开比)4.0将检测到的边界框从文本轮廓向外扩展的程度。数值越高,框越大。若框沿大字符边缘裁剪,请增大。若相邻单词合并成一个框,请减小。
Unclip Ceiling(展开上限像素)20从展开中允许的最大像素扩展。这个上限防止在大文本上进行大比例扩展导致框变得过大。如果在提高 Unclip Ratio 后仍然出现大文本被裁剪,请提升。
Min Text Area(最小文本区域面积)500检测文本区域的最小面积(以像素为单位)。小于此值的区域将被当作噪声舍弃。若检测到的小伪影被误识别为文本,请增大。若有效的小文本被过滤,请减小。
当应何时调整参数

从默认值开始。仅在 Live Preview 中看到特定问题时再进行调整:

问题需要调整的参数调整方向
非文本区域被检测为文本文本分割阈值增加
有效文本被漏检文本分割阈值减少
边界框裁剪字符边缘Unclip Ratio增加
相邻单词合并成一个框Unclip Ratio减少
大文本时边框过大Unclip Ceiling减少
提高 Unclip Ratio 后大文本仍被裁剪Unclip Ceiling增加
噪声/伪影被识别为文本Min Text Area增加
小的有效文本被过滤掉Min Text Area减少

参数变更将在 Live Preview 中即时生效,便于迭代调优。这些参数也适用于生产捕获,而不仅仅在预览阶段。

步骤 7:使用捕获图像进行测试

在使用 Live Preview 调优参数后,在一系列生产样品上验证 OCR。

7a. 使用测试面板

  1. 关闭实时预览模式(取消勾选复选框)
  2. 点击 Test 按钮

带有“从库中选择”和“上传”选项的 Test OCR Block 面板

  1. 点击 Select From Library 以从先前捕获的检测中选择图像,或点击 Upload Captures 以上传电脑中的图像
  2. 对每个 ROI,测试结果显示如下:
    • Detected Text(以等宽字体/代码格式显示)
    • Confidence(颜色编码标签:绿色高于 80%、橙色高于 50%、红色低于 50%)
    • Detection Count(检测到的文本区域数量)

7b. 需要关注的要点

  • Consistency:同一部件在每次读取时,OCR 是否读取相同文本?
  • Accuracy:检测到的字符串与部件上的实际文本是否一致?
  • Confidence scores:它们是否始终高于 80%?信心不足通常表明图像质量问题。
  • Edge cases:测试带有污渍、褪色或部分遮挡文本的部件。
警告

如果信心分数持续低于 80%,请重新查看您的图像设置(Step 2)。OCR 的准确性直接受图像质量影响。再多的参数调整也无法弥补模糊或光线不足的图像。


步骤 8:设置通过/失败规则(IO Logic)

在 OCR 能正确检测文本后,您需要定义何谓通过(pass)或失败(fail)。导航至 IO Logic 选项卡。

基本模式

基本模式提供一个基于规则的简易 UI,用于 OCR 通过/失败逻辑。不需要 Node-RED 知识。

Basic 模式的通过/失败、IO Logic 与 OCR 规则区域

页面显示:

  • 左侧的 Preview / Test 标签页(用于将结果可视化以对照规则)
  • 右侧的 OCR Rules 区域
  • 激活规则的 Save & Deploy 按钮
  • 切换到 Node-RED 的 Advanced Mode 按钮

创建规则

单击 + Add rule 以创建通过/失败规则。每条规则包含三个字段:

添加规则示例:显示 ROIs 下拉框、Operator 下拉框和 Text 输入框

FieldDescription
ROIs要评估的 ROI。单击展开并选择 "All ROIs" 或选择特定区域。
Operator要对检测文本执行的比较操作。
Text要比较的期望文本字符串。

可用运算符

单击 Operator 下拉框以查看四个选项:

Operator 下拉框显示 equals、not equals、includes、not includes

OperatorBehaviorExample use case
= (equals)所有检测文本拼接在一起必须完全匹配预期文本验证序列号应为“SN-2025-0042”
!= (not equals)拼接后的文本不得匹配预期文本拒绝具有已知错误代码的部件
includes拼接后的文本必须包含预期文本作为子字符串检查标签中是否包含单词“SAFETY”
not includes拼接后的文本不得包含预期文本确保不会出现已弃用的产品代码

文本如何比较

重要提示:文本拼接行为

当一个 ROI 包含多个检测到的文本区域(例如探测器将 "LOT" 和 "2025" 视为独立单词)时,所有单独的文本字符串在比较之前将用空格连接。

因此,如果探测器发现三个文本区域,分别读作 "LOT"、"2025" 和 "A1",则连接后的文本将变为 "LOT 2025 A1"。你的规则将针对这个完整的连接字符串进行比较。

这意味着:

  • 针对 "LOT 2025 A1"equals 规则将通过
  • 针对 "2025"includes 规则将通过
  • 针对仅 "LOT"equals 规则将失败(因为连接后的文本包含的不止 "LOT")

多个规则

你可以通过再次点击 + Add rule 添加多条规则。所有规则均使用 AND 逻辑:只有所有规则通过,OCR 检查才会通过。如果任一规则失败,整个检测将失败。

ROI 选择

ROIs 下拉菜单显示 All ROIs 选项

单击 ROIs 下拉菜单以选择规则应用的区域:

  • All ROIs:规则对来自所有 OCR 区域的文本进行合并评估
  • Specific ROI:展开按名称选择单独的 ROI(这就是在步骤 4f 中为 ROI 命名时很重要的原因)

保存并部署

配置完规则后,点击 Save & Deploy 以激活它们。规则将立即对所有未来的检测生效。


高级模式(Node-RED)

对于 Basic Mode 无法处理的更复杂的通过/失败逻辑,请切换到 Advanced Mode

单击 Advanced Mode 按钮以查看确认对话框:

切换到 Advanced Mode 的确认对话框

对话框说明:

  • Advanced Mode 使用完整的 Node-RED 可视化编程环境
  • 将停用所有 Basic Mode 规则
  • 您可以随时切换回 Basic Mode

单击 Switch to Advanced Mode(如果您已处于 Advanced Mode,按钮将显示 Basic Mode)。

Advanced Mode Node-RED 流程图(包含 Check OCR 节点)

在 Advanced Mode 中,您将看到带有预构建节点的 Node-RED 流画布,包括:

  • All Block Outputs:接收来自所有 AI 模块(classification、segmentation、OCR、measurement)的结果
  • Check OCR(或类似):包含用于评估 OCR 结果的 JavaScript 函数节点
  • Classification Block Logic / Format Data for PLC / Trigger:用于集成的其他输出节点
  • Inspection Pass/Fail:最终通过/不通过的判定
  • Save to Library:存储结果

Node-RED 中的 OCR 输出载荷

在 Advanced Mode 中,OCR 结果可在 msg.payload.ocr 对象中获得。这使您能够对每一次检测进行完整的编程访问:

{
"predictions": [
{
"roi_id": 1,
"roi_name": "Serial Number",
"center_x_global": 450,
"center_y_global": 220,
"angle_global": 90,
"search_area_id": 1,
"detections": [
{
"text": "SN-2025-0042",
"confidence": 0.95,
"roi_bbox": {
"x": 10,
"y": 5,
"width": 120,
"height": 30,
"angle": 0
},
"global_bbox": {
"x": 450,
"y": 220,
"width": 120,
"height": 30,
"angle": 90
}
}
]
}
]
}
字段描述
roi_id产生此结果的 ROI 的数字 ID
roi_name您为 ROI 指定的名称(e.g., "Serial Number")
center_x_global / center_y_globalROI 在全帧坐标中的中心位置
angle_globalROI 在全帧中的旋转角度
search_area_idROI 所属的检测类型 / 搜索区域
detections在该 ROI 内检测到的单个文本检测的数组
detections[].text识别的文本字符串
detections[].confidence识别置信度,从 0.0 到 1.0(已裁剪)
detections[].roi_bbox相对于 ROI 裁剪原点的边界框位置
detections[].global_bbox全帧中的边界框位置(考虑 ROI 旋转与对齐)
提示

使用 msg.payload.ocr.predictions[0].detections.map(d => d.text).join(" ") 来获取与 Basic Mode 用于比较的相同连接文本字符串。

使用 Advanced Mode,您可以:

  • 使用 JavaScript 对检测到的文本应用正则表达式模式
  • 按置信度阈值筛选检测结果
  • 将 OCR 结果与 classification/segmentation 结果结合以实现复杂逻辑
  • 将 OCR 文本格式化为 PLC 输出(例如,通过 EtherNet/IP 发送检测到的序列号)
  • 根据 OCR 内容向 Microsoft Teams 或电子邮件发送自定义消息

有关 Node-RED 的详细指南,请参见 Node-RED Basics.

模式切换

您可以随时通过 IO Logic 页面顶部的切换按钮在 Basic Mode 与 Advanced Mode 之间切换。切换到 Basic Mode 时,任何已部署的 Node-RED 逻辑将被停用并替换为 Basic Mode 规则。切换回去时,Node-RED 流将被还原。

步骤 9:部署配方

当 OCR 设置完成并测试通过后:

  1. 返回 配方编辑器(在左侧栏中点击 Recipe Editor
  2. 点击右下角的紫色 Deploy Recipe 按钮
  3. 配方现已激活并正在运行检测

查看结果

HMI

HMI 页面显示实时检测结果。当 OCR 激活时,您将看到:

  • 摄像头实时画面,检测到的文本周围有紫色边框
  • 显示读取内容的文本标签
  • 基于 IO Logic 规则的通过/失败状态
  • 运行统计:总检测次数、通过、失败、良率百分比

HMI view showing live OCR inspection results

在左侧栏中导航至 Library 以查看过往捕获的存储结果。每条记录显示:

  • 带有 OCR 叠加层的捕获图像
  • 每个 ROI 的检测文本
  • 置信度分数
  • 通过/失败结果

故障排除

未检测到文本

Possible causeFix
ROI not positioned over textReposition the ROI in Inspection Setup
ROI orientation doesn't match textRotate the ROI to align with the text direction (Step 4d)
Text too small in the imageMove the camera closer or use a longer focal length lens
Text too small relative to ROIMake the ROI tighter around the text area
Min Text Area too highLower the Min Text Area parameter
Poor lighting / low contrastImprove lighting to maximize contrast between text and background
Text is blurryAdjust focus on the C-mount lens and verify the camera mount is stable
Alignment not set upText detection requires alignment. Set up template alignment (Step 3)

检测到错误文本(误读)

Possible causeFix
ROI orientation doesn't match text orientationThis is the #1 cause. Rotate the ROI to align with the text direction (Step 4d)
Low image quality or noiseIncrease exposure, reduce gain, improve lighting
Text Segmentation Threshold too lowIncrease to filter out false text detections
Overlapping text regions merging into one detectionDecrease Unclip Ratio to prevent box merging
Multiple lines of text in one ROICreate separate ROIs for each line if reading order matters

OCR 置信度持续偏低

Possible causeFix
Poor lighting uniformityEnsure even illumination across the text area
Glare or reflections on text (especially glossy labels)Adjust lighting angle to eliminate specular reflections. Consider diffuse lighting.
Very small or highly stylized fontMove camera closer or use a longer focal length lens to increase text size in the image
Damaged, faded, or partially printed textOCR can only read what the camera sees. If text is physically degraded, accuracy will be lower.
High gain in image settingsReduce gain. High gain adds noise that looks like text artifacts.

通过/失败规则未按预期工作

Possible causeFix
Text is joined differently than expectedEnable Live Preview and check exactly what text is being detected. Remember, multiple detections are joined with spaces.
Using "equals" when "includes" is more appropriateIf you only care about a substring, use "includes" instead of "equals"
Rules not deployedClick Save & Deploy after changing rules in Basic Mode
Wrong ROI selected in the ruleCheck the ROIs dropdown in your rule to make sure it targets the correct region

限制条件

  • 每个配方最多只有一个 OCR 区块(该区块内可以包含多个 ROI)
  • 仅限英语优化的模型:预训练模型针对基于拉丁字母的印刷文本进行了优化。手写文本、连笔字或非拉丁字母脚本(中文、日本、韩文、阿拉伯语)不受支持。
  • Basic Mode 不支持 regex(正则表达式)或模式匹配:通过简单字符串比较来进行通过/不通过规则(等于、等于不、包含、不包含)。对于复杂的校验模式(例如匹配“SN-####-####”),请使用 Advanced Mode(Node-RED)并结合自定义 JavaScript regex。
  • 不可自定义字符集:模型的 480 字符字典是固定的。例如,您不能将识别限制为数字-only。请使用 pass/fail 规则来验证期望的格式。
  • 无法保证文本排序顺序:当在一个 ROI 内检测到多个文本区域时,它们按检测顺序(按轮廓)连接,并不一定按阅读顺序(从左到右、从上到下)。如读取顺序重要,请为每行文本使用单独的 ROI。
  • 仅限预训练模型:与分类和分割不同,OCR 模型不能针对您特定的字体或文本样式进行再训练或微调。它使用内置的预训练 OCR 模型。

相关参考