Halcon OCR检测 免训练版

news/2024/9/24 15:59:12/

一.前言:

目前新版的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)

在这里插入图片描述


http://www.ppmy.cn/news/1529873.html

相关文章

无人机之编程基础原理

无人机编程基础原理涉及多个方面,主要包括无人机的基本原理、飞行控制算法、编程语言及算法应用等。以下是对这些方面的详细阐述: 一、无人机基本原理 无人机的基本原理是理解其结构、飞行原理、传感器和控制系统等的基础。无人机通常由机身、动力系统&…

(k8s)Kubernetes部署Promehteus

转载:Kubernetes(k8s)部署Promehteus 一、概述 在1.8版本以后heapster由metrics-server替代;从k8s的v1.11版本开始已经全面转向以Prometheus为核心的新监控体系架构;kube-prometheus 中包含了 prometheus 监控所用到的…

GPU共享技术深度剖析与总结

在人工智能和深度学习领域,GPU(图形处理器)已成为不可或缺的计算工具。随着深度学习模型的规模和复杂性的增加,单个GPU已经难以满足所有训练需求,GPU共享技术应运而生,成为提高训练效率的重要手段。本文将深…

软件架构设计原则

开闭原则 开闭原则(Open-Closed Principle,OCP)是指一个软件实体,应该对扩展的开放的,对于修改是关闭的。开闭就是指拓展与修改两个行为。什么意思呢?就是说对于一个Java对象来讲,你可以去继承它方法和属性,对继承类进行拓展,但是不可以直接修改它的方法和属性。这样提…

Spring Security 详解:保护Java应用的强大盾牌

在Java企业级开发中,安全性始终是一个至关重要的考虑因素。Spring Security作为Spring框架的一个重要子项目,提供了一个功能强大、可高度定制的身份验证和访问控制框架,帮助开发者轻松实现应用程序的安全性管理。本文将详细介绍Spring Securi…

华为---代理ARP简介及示例配置

目录 1. 概念 2. 前提条件 3. 使用环境 4. 工作过程 5. 优点 6. 缺点 7. 示例配置 7.1 示例场景 7.2基本配置 7.3 配置端口隔离 7.4 开启代理ARP 7.4.1 VLAN内代理ARP 7.4.2 VLAN间代理ARP 7.4.3路由式ARP代理 1. 概念 代理ARP(Proxy ARP)&…

WEB攻防- Oracle基本注入

前置知识 1.dual表 此表是Oracle数据库中的一个自带表,为满足查询条件而产生。与MySQL不同的是,在MySQL中查询语句可以直接是:select 1,2,但是在Oracle中就必须跟一个表名,但是如查询日期是没有表的,就可以…

软件设计师の第三章:知识产权

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…