Halcon ——— OCR字符提取与多类型识别技术详解

工业视觉实战:OCR字符提取与多类型识别技术详解

在工业自动化领域,OCR字符提取是产品追溯、质量控制和信息读取的核心技术。本文将深入解析Halcon中OCR字符提取的全流程,重点解释核心算子参数,并提供完整的工业级代码实现。

一、OCR字符提取全流程解析

二、核心算子参数详解(表格形式)

1. 字符区域提取算子
算子参数类型说明推荐值工业应用
gray_range_rectMaskWidth整数掩膜宽度5-15金属表面字符:11×11
MaskHeight整数掩膜高度5-15塑料表面字符:7×7
thresholdMinGray整数最小灰度值100-150低对比度:100
MaxGray整数最大灰度值200-255高对比度:220
select_shapeFeature字符串筛选特征'area'字符面积筛选
Min实数最小值500-2000小字符:500
Max实数最大值99999无上限
2. 分类器管理算子
算子参数类型说明可选值应用场景
read_ocr_class_mlpFileName字符串分类器文件'Industrial_0-9A-Z_NoRej.omc'高精度场景
'Industrial_Full_Rej.omc'含噪声场景
do_ocr_single_class_mlpNum整数识别字符数1单个字符识别
do_ocr_multi_class_mlp----批量字符识别
3. 分类器类型对比
类型特点适用场景文件名规范
Rej拒绝不确定结果高噪声环境*_Rej.omc
NoRej始终返回结果高精度场景*_NoRej.omc
Mixed混合模式通用场景*_Mixed.omc

三、OCR处理全流程代码解析

* 1. 初始化设置
dev_update_off ()  * 关闭设备更新提升性能
FileName := 'Industrial_0-9A-Z_NoRej.omc'  * 非拒绝类分类器
read_image (Image, 'engraved')  * 读取工业字符图像* 2. 图像预处理 - 增强字符特征
* 灰度范围计算:7x7区域内的最大-最小灰度差
gray_range_rect (Image, ImageResult, 7, 7)
* 图像反转:黑底白字 → 白底黑字(分类器要求)
invert_image (ImageResult, ImageInvert)* 3. 字符区域提取与筛选
threshold (ImageResult, Region, 128, 255)  * 阈值分割
connection (Region, ConnectedRegions)  * 区域连通
* 筛选面积>1500的有效字符区域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1500, 99999)
* 按列坐标排序(从左到右)
sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')* 4. 字符识别准备
shape_trans (SortedRegions, RegionTrans, 'rectangle1')  * 转为矩形
area_center (RegionTrans, Area, Row, Column)  * 获取中心坐标
MeanRow := mean(Row)  * 平均行坐标(用于显示)* 5. 读取OCR分类器
read_ocr_class_mlp (FileName, OCRHandle1)  * 加载训练好的分类器
count_obj (SortedRegions, Number)  * 字符数量统计* 6. 字符识别 - 单字符模式(高精度)
for Index := 1 to Number by 1select_obj (SortedRegions, ObjectSelected, Index)  * 选择单个字符区域* 核心识别算子do_ocr_single_class_mlp (ObjectSelected,   * 字符区域ImageInvert,      * 预处理后图像OCRHandle1,       * 分类器句柄1,                * 识别字符数Class,            * 识别结果Confidence        * 置信度)* 显示识别结果(位置:平均行+80, 当前列-10)disp_message (WindowHandle, Class, 'image', MeanRow+80, Column[Index-1]-10, 'black', 'true')
endfor* 7. 字符识别 - 多字符模式(高效批量)
do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle1, Class1, Confidence1)
disp_message (WindowHandle, Class1, 'image', MeanRow+100, Column-10, 'black', 'true')* 8. 资源释放
clear_ocr_class_mlp (OCRHandle1)  * 清除分类器

 

四、工业级OCR参数优化指南

1. 不同表面处理参数优化
表面类型gray_range_rect掩膜阈值范围面积筛选分类器类型
金属表面11×11100-220800-99999Rej
塑料表面7×7120-240500-99999NoRej
玻璃表面9×990-2001000-99999Mixed
纸质标签5×5150-255300-99999NoRej
2. 分类器训练核心参数
参数说明工业推荐值影响
NumHidden隐藏层神经元数80-120复杂字符需更多神经元
MaxIterations最大训练迭代次数300-500防止过拟合
ErrorTolerance误差容限0.005值越小精度越高
CharacterSet字符集'0-9A-Z'根据实际需求定义

五、分类器生命周期管理

1. 创建与训练分类器
* 创建分类器
create_ocr_class_mlp (8, 10, 'constant', 'default',  * 字符宽高和插值'0-9A-Z', 80, 'none',          * 字符集和隐藏层OCRHandle                      * 输出句柄
)* 添加训练样本
append_ocr_trainf (CharacterRegion, Image, 'A', OCRHandle)* 训练分类器
train_class_mlp (OCRHandle, 200, 0.01, Error)
2. 保存与使用
* 保存分类器
write_ocr_class_mlp (OCRHandle, 'Industrial.omc')* 读取使用
read_ocr_class_mlp ('Industrial.omc', DeployHandle)

六、工业应用场景分析

1. 典型应用案例
行业应用场景OCR特点分类器类型
汽车制造发动机编号金属表面字符Rej型
电子生产PCB板编码微小字符NoRej型
食品包装保质期识别曲面字符Mixed型
物流仓储运输标签纸质印刷NoRej型
2. 性能优化技巧
python* 提升小字符识别率
set_system ('neighborhood_rectangle', 'large')  * 增大邻域* 处理曲面变形
set_system ('perspective_adaptation', 'true')   * 启用透视适配* 加速处理
dev_set_preferences ('temporary_mem_cache', 'true')  * 启用内存缓存

七、完整工业OCR解决方案

* 工业OCR处理流程
proc industrial_ocr_processing(InputImage)* 1. 预处理gray_range_rect (InputImage, ImageResult, 9, 9)invert_image (ImageResult, ImageInvert)* 2. 字符提取threshold (ImageResult, Region, 110, 230)connection (Region, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 800, 99999)sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')* 3. 分类器选择if (is_metal_surface)  * 金属表面read_ocr_class_mlp ('Metal_Rej.omc', OCRHandle)else  * 非金属表面read_ocr_class_mlp ('General_NoRej.omc', OCRHandle)endif* 4. 字符识别do_ocr_multi_class_mlp (SortedRegions, ImageInvert, OCRHandle, ResultText, Confidence)* 5. 结果验证if (mean(Confidence) < 0.85)  * 低置信度* 启用单字符精细识别for i := 1 to |SortedRegions| by 1do_ocr_single_class_mlp (..., SingleResult, ...)endforendif* 6. 释放资源clear_ocr_class_mlp (OCRHandle)return ResultText
endproc

八、常见问题解决方案

  1. 字符粘连问题

  2.   * 增加形态学操作closing_circle (Region, ClosedRegion, 3.5)opening_rectangle1 (ClosedRegion, OpenedRegion, 5, 5)
  3. 低对比度识别

    * 增强对比度
    scale_image (ImageResult, Enhanced, 2.0, -50)
    * 自适应阈值
    auto_threshold (Enhanced, Regions)

  4. 分类器优化

     * 增加特定字符训练append_ocr_trainf (SpecialChar, Image, '@', OCRHandle)* 调整隐藏层大小set_ocr_class_mlp_param (OCRHandle, 'num_hidden_units', 100)

总结:Halcon的OCR系统通过四大核心步骤实现工业级字符识别:

  1. 精准区域提取gray_range_rect结合形态学操作

  2. 分类器管理:创建→训练→保存→读取的完整生命周期

  3. 双模式识别:单字符(do_ocr_single_class_mlp)与批量识别(do_ocr_multi_class_mlp)

  4. 拒绝机制:Rej/NoRej分类器应对不同场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86434.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式项目:基于QT与Hi3861的物联网智能大棚集成控制系统

关键词&#xff1a;MQTT、物联网、QT、网络连接、远程控制 一、系统概述 本系统是一套完整的智能大棚监控解决方案&#xff0c;由两部分构成&#xff1a; 基于Hi3861的嵌入式硬件系统&#xff08;负责环境数据采集和设备控制&#xff09;基于Qt开发的跨平台控制软件&#xf…

揭开 Git 裸仓库的神秘面纱:`git clone --mirror` 详解与使用指南

大家好&#xff01;在使用 Git 进行版本控制时&#xff0c;我们最熟悉的莫过于那些带有工作目录的本地仓库了——我们在里面编辑文件、提交代码&#xff0c;然后推送到远程仓库。但有时候&#xff0c;我们可能会遇到一种特殊的仓库&#xff1a;裸仓库&#xff08;Bare Reposito…

opensuse安装rabbitmq

您好&#xff01;安装 RabbitMQ 消息队列是一个非常棒的选择&#xff0c;它是许多现代应用架构中的核心组件。 在 openSUSE Tumbleweed 上安装 RabbitMQ 主要有两种流行的方式&#xff1a;一种是使用系统的包管理器 zypper&#xff0c;另一种是使用 Docker 容器。我将为您详细…

超详细YOLOv8/11图像菜品分类全程概述:环境、数据准备、训练、验证/预测、onnx部署(c++/python)详解

文章目录 一、环境准备二、数据准备三、训练四、验证与预测五、模型部署 一、环境准备 我的都是在Linux系统下&#xff0c;训练部署的&#xff1b;模型训练之前&#xff0c;需要配置好环境&#xff0c;Anaconda、显卡驱动、cuda、cudnn、pytorch等&#xff1b; 参考&#xff1…

JUC:4.线程常见操作与两阶段终止模式

在线程中&#xff0c;wait()、join()、sleep()三个方法都是进行阻塞的方法。对应可以使用interrupt()方法进行打断&#xff0c;被打断后线程会抛出打断异常&#xff0c;但是不会修改IsInterrupt&#xff0c;也就是此时去调用IsInterrupted()方法后获得的实际上是false。 而当线…

分布式session解决方案

在实际项目中&#xff0c;前台代码部署在nginx中&#xff0c;后台服务内嵌了tomcat运行在不同的节点中&#xff0c;常见的架构如下&#xff1a; 在上述架构中&#xff0c;nginx转发前台请求&#xff0c;第一次登录后&#xff0c;将用户登录信息写入到一台服务session中&#xf…

UDP 缓冲区

UDP 有接收缓冲区&#xff0c;没有发送缓冲区 引申问题 1、为什么没有发送缓冲区&#xff1f; 直接引用原文 “因为 UDP 是不可靠的&#xff0c;它不必保存应用进程的数据拷贝&#xff0c;因此无需一个真正的发送缓冲区” 2、没有发送缓冲区的情况下&#xff0c;sendto 的数…

解密 C++ 中的左值(lvalue)与右值(rvalue)的核心内容

在 C 中&#xff0c;表达式&#xff08;expression&#xff09; 可以被归类为左值或右值。最简单的理解方式是&#xff1a; 左值&#xff08;lvalue&#xff09;&#xff1a; 能放在赋值号 左边的表达式&#xff0c;通常表示一个有名字、有内存地址、可以持续存在的对象。你可…

MATLAB(2)选择结构

选择结构又可以叫做分支结构&#xff0c;它根据给定的条件是否成立&#xff0c;决定程序运行的方向。在不同的条件下执行不同的操作。 MATLAB可以用来实现选择结构的语句有三种&#xff1a;if语句、switch语句、try语句。 一.if语句 1.if语句 1.1条件为矩阵的情况 if语句的…

Ehcache、Caffeine、Spring Cache、Redis、J2Cache、Memcached 和 Guava Cache 的主要区别

主流缓存技术 Ehcache、Caffeine、Spring Cache、Redis、J2Cache、Memcached 和 Guava Cache 的主要区别&#xff0c;涵盖其架构、功能、适用场景和优缺点等方面&#xff1a; Ehcache 类型: 本地缓存&#xff08;JVM 内存缓存&#xff09; 特点: 轻量级&#xff0c;运行在 JV…

谷歌浏览器截图全屏扩展程序

以下是一些支持跟随鼠标滚轮滚动截图的谷歌全屏截图扩展程序插件&#xff1a; GoFullPage&#xff1a;这是一款专门截取整个网页的截图插件。安装后&#xff0c;点击浏览器右上角的图标或使用快捷键AltShiftP&#xff0c;插件就会自动开始滚动并捕获当前访问的网站&#xff0c…

专线服务器具体是指什么?

专线服务器主要是指在互联网或者是局域网中&#xff0c;为特定用户或者是应用程序所提供的专用服务器设备&#xff0c;专线服务器与传统的共享服务器相比较来说&#xff0c;有着更高的安全性和更为稳定的网络连接&#xff0c;下面我们就来共同了解一下专线服务器的具体内容吧&a…

Jenkins JNLP与SSH节点连接方式对比及连接断开问题解决方案

一、JNLP vs SSH 连接方式优缺点对比 对比维度JNLP&#xff08;Java Web Start&#xff09;SSH&#xff08;Secure Shell&#xff09;核心原理代理节点主动连接Jenkins主节点&#xff0c;通过加密通道通信&#xff0c;支持动态资源分配。Jenkins通过SSH协议远程登录代理节点执…

Git - Commit命令

git commit 是 Git 版本控制系统中核心的提交命令&#xff0c;用于将暂存区&#xff08;Stage/Index&#xff09;中的修改&#xff08;或新增/删除的文件&#xff09;永久记录到本地仓库&#xff08;Repository&#xff09;&#xff0c;生成一个新的提交记录&#xff08;Commit…

Android System WebView Canary:探索前沿,体验最新功能

在移动互联网时代&#xff0c;WebView作为Android系统的核心组件之一&#xff0c;承担着在原生应用中显示Web内容的重要任务。它不仅为用户提供了便捷的网页浏览体验&#xff0c;还为开发者提供了强大的混合式开发能力。Android System WebView Canary&#xff08;金丝雀版本&a…

kubernetes架构原理

目录 一. 为什么需要 Kubernetes 1. 对于开发人员 2. 对于运维人员 3. Kubernetes 带来的挑战 二. Kubernetes 架构解析 1. master 节点的组件 2. Node 节点包含的组件 3. kubernetes网络插件 三. kubeadm块速安装kubernetes集群 1. 基础环境准备(此步骤在三个节点都执…

服务器的安装与安全设置 域环境的搭建和管理 Windows基本配置 网络服务常用网络命令的应用 安全管理Windows Server 2019

高等职业教育计算机网络技术专业实训指导书 2025年目 录 实训的目的和意义 实训的具体目标及主要内容 实训完成后需要提交的内容 项目一 服务器的安装与安全设置 项目二 域环境的搭建和管理 项目三 Windows基本配置 项目四 网络服务 项目五 常用网络命令的应用 项目六…

Springcloud解决jar包运行时无法拉取nacos远程配置文件

问题描述 springcloud微服务&#xff0c;在idea中运行代码&#xff0c;能够正常拉去nacos上的配置文件&#xff0c;打包后&#xff0c;通过jar包启动 java -jar xxx.jar&#xff0c;出现错误&#xff1a;java.nio.charset.MalformedlnputException: Input length 1 问题原因…

【Leetcode刷题随笔】01. 两数之和

1. 题目描述 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素不能使用两遍。 示例: 给定 nums [2, 7, 11,…

【机器学习深度学习】多层神经网络的构成

目录 一、神经网络模型的结构化组成方式 1. 最底层&#xff1a;神经网络模型 (Model) 2. 中间层&#xff1a;单个神经网络层 (Layer) 3. 最顶层&#xff1a;训练参数的细节 (Parameters & Variables) 二、关键理解要点 三、类比理解 场景一&#xff1a;工厂运作 场…