Halcon OCR检测 免训练版

一.前言:

目前新版的Halcon已经具备了DeepOcr的功能可以涵盖大部分的识别场景,缺点是有些特殊的应用场景依然需要大量的图片训练,而且Halcon22之前的版本DeepOCR是不支持训练的,我们都知道传统的OCR项目是通过Blob分析,把需要检测的字符位置在图像中割出来。然后利用MLP,SVM,GMM等等机器学习的方式训练OCR识别模型。其实对于标准印刷字体还有点阵字体,工业打印字体等等,Halcon预训练的现成的模型,可以拿来直接做字符识别,用起来也非常的方便。他的好处是应用速度很快,并且不需要做Blob分析图像分割,可以直接传图进行读取。目前Halcon主要是针对多层干感知机MLP和卷积神经网络CNN训练的一些模型。

在这里插入图片描述

在这里插入图片描述

例如可以利用算子read_ocr_class_mlp (Operator)读取MLP模型。MLP的模型名称如下:

Suggested values: ‘Document_0-9_NoRej.omc’, ‘Document_0-9_Rej.omc’, ‘Document_0-9A-Z_NoRej.omc’, ‘Document_0-9A-Z_Rej.omc’, ‘Document_A-Z+_NoRej.omc’, ‘Document_A-Z+_Rej.omc’, ‘Document_NoRej.omc’, ‘Document_Rej.omc’, ‘DotPrint_0-9_NoRej.omc’, ‘DotPrint_0-9_Rej.omc’, ‘DotPrint_0-9+_NoRej.omc’, ‘DotPrint_0-9+_Rej.omc’, ‘DotPrint_0-9A-Z_NoRej.omc’, ‘DotPrint_0-9A-Z_Rej.omc’, ‘DotPrint_A-Z+_NoRej.omc’, ‘DotPrint_A-Z+_Rej.omc’, ‘DotPrint_NoRej.omc’, ‘DotPrint_Rej.omc’, ‘HandWritten_0-9_NoRej.omc’, ‘HandWritten_0-9_Rej.omc’, ‘Industrial_0-9_NoRej.omc’, ‘Industrial_0-9_Rej.omc’, ‘Industrial_0-9+_NoRej.omc’, ‘Industrial_0-9+_Rej.omc’, ‘Industrial_0-9A-Z_NoRej.omc’, ‘Industrial_0-9A-Z_Rej.omc’, ‘Industrial_A-Z+_NoRej.omc’, ‘Industrial_A-Z+_Rej.omc’, ‘Industrial_NoRej.omc’, ‘Industrial_Rej.omc’, ‘OCRA_0-9_NoRej.omc’, ‘OCRA_0-9_Rej.omc’, ‘OCRA_0-9A-Z_NoRej.omc’, ‘OCRA_0-9A-Z_Rej.omc’, ‘OCRA_A-Z+_NoRej.omc’, ‘OCRA_A-Z+_Rej.omc’, ‘OCRA_NoRej.omc’, ‘OCRA_Rej.omc’, ‘OCRB_0-9_NoRej.omc’, ‘OCRB_0-9_Rej.omc’, ‘OCRB_0-9A-Z_NoRej.omc’, ‘OCRB_0-9A-Z_Rej.omc’, ‘OCRB_A-Z+_NoRej.omc’, ‘OCRB_A-Z+_Rej.omc’, ‘OCRB_NoRej.omc’, ‘OCRB_passport_NoRej.omc’, ‘OCRB_passport_Rej.omc’, ‘OCRB_Rej.omc’, ‘Pharma_0-9_NoRej.omc’, ‘Pharma_0-9_Rej.omc’, ‘Pharma_0-9+_NoRej.omc’, ‘Pharma_0-9+_Rej.omc’, ‘Pharma_0-9A-Z_NoRej.omc’, ‘Pharma_0-9A-Z_Rej.omc’, ‘Pharma_NoRej.omc’, ‘Pharma_Rej.omc’, ‘SEMI_NoRej.omc’, ‘SEMI_Rej.omc’

同时可以利用算子read_ocr_class_cnn (Operator)读取CNN模型,CNN的模型名称如下:

‘Universal_NoRej.occ’, ‘Universal_Rej.occ’, ‘Universal_0-9_NoRej.occ’, ‘Universal_0-9_Rej.occ’, ‘Universal_0-9+_NoRej.occ’, ‘Universal_0-9+_Rej.occ’, ‘Universal_0-9A-Z_NoRej.occ’, ‘Universal_0-9A-Z_Rej.occ’, ‘Universal_0-9A-Z+_NoRej.occ’, ‘Universal_0-9A-Z+_Rej.occ’, ‘Universal_A-Z+_NoRej.occ’, ‘Universal_A-Z+_Rej.occ’

模型读取完成后,利用算子create_text_model_reader (Operator),把刚才读取的模型传递给该算子,可以输出一个字符识别的句柄。然后利用该句柄和算子find_text (Operator)就可以做字符识别了。

二、上干货,OCR识别源码解析:

dev_update_off ()

  • Acquire the image
    read_image (Image, ‘numbers_scale’)
    get_image_pointer1 (Image, Pointer, Type, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, ‘black’, WindowID)
    dev_set_part (0, 0, Height - 1, Width - 1)
    dev_set_line_width (2)
    dev_set_color (‘yellow’)
    dev_set_draw (‘margin’)
    dev_display (Image)
    set_display_font (WindowID, 12, ‘mono’, ‘true’, ‘false’)
    stop ()

*读取预训练模型
read_ocr_class_mlp (‘Document_0-9_NoRej.omc’, OCRHandle)

  • 根据读取到的模型句柄创建字符识别模型
    create_text_model_reader (‘auto’, OCRHandle, TextModel)

  • 自动分割图像和OCR识别
    find_text (Image, TextModel, TextResultID)

  • 获取识别到的字符区域
    get_text_object (Characters, TextResultID, ‘all_lines’)
    dev_display (Image)
    dev_display (Characters)
    stop ()

  • 获取识别到的字符
    get_text_result (TextResultID, ‘class’, Classes)
    count_obj (Characters, Number)
    for Index := 1 to Number by 1
    dev_set_color (‘yellow’)
    select_obj (Characters, SingleChar, Index)
    dev_set_color (‘white’)
    Class := Classes[Index - 1]
    smallest_rectangle1 (SingleChar, Row1, Column1, Row2, Column2)
    set_tposition (WindowID, Row1 - 17, (Column2 + Column1) * 0.5 - 5)
    write_string (WindowID, Class[0])
    endfor
    stop ()

  • Free memory
    clear_text_result (TextResultID)
    clear_text_model (TextModel)

在这里插入图片描述

### Halcon OCR 功能概述 Halcon 是一款功能强大的机器视觉软件,其中 OCR(Optical Character Recognition)助手提供了高效的光学字符识别能力。通过 HALCONOCR 工具,用户能够轻松实现字符的检测与分类。 #### 启动 OCR 助手 要启动 HALCON 中的 OCR 助手,可以通过图形界面或者编程接口完成。具体操作如下: 1. **图形界面方式** 打开 HALCON 的 HDevelop 软件后,进入菜单栏中的 `Tools` -> `Assistant` -> `OCR Training` 来启动 OCR 训练助手[^1]。 2. **编程接口方式** 如果希望通过脚本调用 OCR 助手,则可以利用 HALCON 提供的相关算子函数。例如,创建一个新的字典用于存储训练数据并加载图像进行处理: ```python # 创建新的字典对象 gen_empty_dict (EmptyDict) # 加载训练样本图片 read_image (Image, 'sample_image') # 将图像转换为二值化形式以便后续处理 threshold (Image, Region, 100, 255) ``` #### 字符区域分割 为了提高 OCR 的准确性,通常需要对输入图像执行预处理步骤以分离各个独立的字符区域。这一步骤可通过形态学运算或连通域分析来达成。下面展示如何使用 `sort_region` 函数按特定顺序排列已找到的字符区域: ```python connection (Region, ConnectedRegions) # 对连接区域按照左上角位置排序 sort_region (ConnectedRegions, SortedRegions, 'upper_left', 'true', 'column') ``` 上述代码片段展示了如何将原始图像划分为单独的字符区块,并依据它们的位置关系重新整理次序[^4]。 #### 特征提取与模型优化 当初步获取到单个字符后,可采用特征向量描述这些字符形状特性,进而构建分类器模型。MLP(多层感知机)作为常用神经网络结构之一,在此场景下亦有良好表现效果。然而仅依靠标准 MLP 输出可能存在一定局限性;因此建议结合其他技术手段如形态学变换辅助判定最终结果是否合理[^2]。 --- ### 示例代码:基于Halcont的简单OCR流程 以下提供一段完整的 Python 风格伪代码演示整个过程从读取图象直至输出识别字符串: ```python # 初始化环境变量及参数设置部分省略... # 步骤一: 图像采集与预处理 read_image(Image, 'path_to_your_image_file') convert_rgb_to_gray(Image, GrayImage) binarize_auto(GrayImage, BinaryImage, 'dark', 30, 200) # 步骤二: 连接组件标记与筛选 connection(BinaryImage, ConnectedComponents) select_shape_std(ConnectedComponents, SelectedRegions, 'area', 'and', MinArea, MaxArea) # 步骤三: 排列调整后的候选区 sort_region(SelectedRegions, OrderedRegions, 'upper_left', True, 'row') # 步骤四: 应用先前定义好的字体模板匹配各目标项 for region in OrderedRegions: reduce_domain(Image, region, ROI_Image) perform_recognition(ROI_Image, recognized_char) append_result(recognized_string, recognized_char) print("Recognized Text:", recognized_string) ``` 以上仅为简化逻辑框架示意,实际应用还需考虑更多细节因素比如倾斜校正、噪声过滤等额外环节。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值