Halcon 简单的ORC 字体识别

文章目录

  • 仿射变化
  • 识别
  • 使用助手
    • 自己训练

仿射变化

在这里插入图片描述

将图片进行矫正处理

dev_close_window()
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
read_image(Image,'C:/Users/Augustine/Desktop/halcon/image.png')
*获取图片的大小
get_image_size(Image, Width, Height)
*仿射运算获取图片的角度对图片进行矫正
*选中图片的区域
gen_rectangle1 (Rectangle, 155.399, 242.882, 387.318, 763.585)
*获取文本图片的旋转角度,得到的计算的文本行旋转角度
text_line_orientation(Rectangle,Image,75,-0.4,0.523599, OrientationAngle)
*从点和角度计算刚性仿射变换
* Row1 (输入参数) ——原始点的行坐标
* Column1 (输入参数) ——原始点的列坐标
* Angle1 (输入参数) ——原始点的角度
* Row2 (输入参数) ——转换点的行坐标
* Column2 (输入参数) ——转换点的列坐标
* Angle2 (输入参数) ——转换点的角度
* HomMat2D (输出参数) ——输出转换矩阵
vector_angle_to_rigid(Height/2, Width/2, OrientationAngle, Height/2,  Width/2,0, HomMat2D)
*仿射变化作用到图片上
affine_trans_image(Image, ImageAffinTrans, HomMat2D, 'constant', 'false')

在这里插入图片描述# 分割

*分割
*提取图像的点
dots_image(ImageAffinTrans, DotImage, 5, 'dark', 0)
*由于halcon中包含对点状的图像进行直接读取的功能。所以掉用点状读取算子。DotImage为输出的图像变量存放位置。5为点状的最大直径。
*如果不想选取过大的点,可以调小,可以使用默认直径。‘dark’,最重要的变量。你提取的点状区域是提取暗色还是亮色(light)还是所有(all)。
*裁剪区域
reduce_domain(DotImage, Rectangle, ImageReduced)*二值化,前景和背景很接近的时候用快速二值化(黑白分明)
binary_threshold(ImageReduced, Region, 'max_separability', 'light', UsedThreshold)
*膨胀
dilation_rectangle1(Region, RegionDilation, 10, 10)
*形成单独的连同区域
connection(RegionDilation, ConnectedRegions)
*变换区域的形状
shape_trans(ConnectedRegions,RegionTrans,'rectangle1')
*形状选择,通过宽和高筛选掉冒号
select_shape (RegionTrans, SelectedRegions, ['width','height'], 'and', [25.27,66.039], [125.63,74.642])
*将区域划分为大小大致相等的矩形。
partition_rectangle(SelectedRegions, Partitioned, 43, 80)
*和二值化的区域求交集,找到字符
intersection(Partitioned, Region, RegionIntersection)

识别

*排序
sort_region(RegionIntersection, SortedRegions, 'character', 'true', 'row')
*读取匹配模板
read_ocr_class_mlp('DotPrint_0-9A-Z_NoRej.omc', OCRHandle)
*匹配
* 只能识别暗点所以要将图片亮暗反转
invert_image(ImageReduced, ImageInvert)
do_ocr_multi_class_mlp(SortedRegions, ImageInvert, OCRHandle, Class, Confidence)*显示
*求连通域个数
count_obj(SortedRegions,num)
*求最小外接矩形
smallest_rectangle1(SortedRegions, Row1, Column1, Row2, Column2)
set_display_font (WindowHandle, 50, 'mono', 'true', 'false')
dev_clear_window ()
dev_display (Image)
dev_set_color ('red')
for i:=0 to 17 by 1set_tposition (WindowHandle,30, 120+40*i)write_string (WindowHandle, Class[i])
endfor

在这里插入图片描述

使用助手

点击打开新的OCR
在这里插入图片描述点击打开加载图像,标记图像位置,把识别内容输入即可
在这里插入图片描述

分割

可以自动调节符号尺寸
在这里插入图片描述

请添加图片描述

自己训练

将训练的数据识别点击保存原始数据,加入训练数据,点击开始训练,保存即可
在这里插入图片描述
点击结果插入代码即可
在这里插入图片描述

* OCR 03: Code generated by OCR 03
* OCR 03: 
* OCR 03: Prepare text model
* OCR 03: 
read_image(Image,'C:/Users/Augustine/Desktop/halcon/image.png')
*获取图片的大小
get_image_size(Image, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
create_text_model_reader ('manual', [], TextModel)
set_text_model_param (TextModel, 'manual_is_dotprint', 'true')
set_text_model_param (TextModel, 'manual_char_width', 30)
set_text_model_param (TextModel, 'manual_char_height', 54)
set_text_model_param (TextModel, 'manual_stroke_width', 6.3)
set_text_model_param (TextModel, 'manual_return_punctuation', 'false')
set_text_model_param (TextModel, 'manual_uppercase_only', 'true')
set_text_model_param (TextModel, 'manual_fragment_size_min', 9)
set_text_model_param (TextModel, 'manual_eliminate_border_blobs', 'true')
set_text_model_param (TextModel, 'manual_base_line_tolerance', 0.2)
set_text_model_param (TextModel, 'manual_max_line_num', 2)
* OCR 03: 
* OCR 03: Load classifier
* OCR 03: 
read_ocr_class_mlp ('C:/Users/Augustine/Desktop/halcon/picture.omc', OcrHandle)
* OCR 03: ***************************************************************
* OCR 03: * The code which follows is to be executed once / image       *
* OCR 03: ***************************************************************
* OCR 03: 
* OCR 03: *************
* OCR 03: * ATTENTION *
* OCR 03: *************
* OCR 03: The image from the graphics window is not available. At this point,
* OCR 03: it is necessary to ensure an image is stored in the variable 'Image'
* OCR 03: 
* OCR 03: Perform actual processing (once per ROI)
* OCR 03: Generate regions of interest
gen_rectangle2 (ROI_OCR_03_0, 260.377, 503.855, rad(4.78136), 272.746, 86.2495)
* OCR 03: 
* OCR 03: Extract symbol regions (segmentation step)
* OCR 03: Only consider first channel for color images
access_channel (Image, TmpObj_Mono, 1)
reduce_domain (TmpObj_Mono, ROI_OCR_03_0, TmpObj_MonoReduced_OCR_03_0)
* OCR 03: 
* OCR 03: Orientation Correction (for consistent border and domain
* OCR 03: handling, this is always applied, even with no rotation)
* OCR 03: 
* OCR 03: Base orientation of ROI
TmpCtrl_Orientation := 0.0834505
* OCR 03: Build rotation matrix
hom_mat2d_identity (TmpCtrl_MatrixIdentity)
hom_mat2d_rotate (TmpCtrl_MatrixIdentity, -TmpCtrl_Orientation, 0, 0, TmpCtrl_MatrixRotation)
* OCR 03: Apply transformation to image and domain
get_domain (TmpObj_MonoReduced_OCR_03_0, TmpObj_Domain)
get_system ('clip_region', TmpCtrl_ClipRegion)
set_system ('clip_region', 'false')
dilation_circle (TmpObj_Domain, TmpObj_DomainExpanded, 31)
affine_trans_region (TmpObj_DomainExpanded, TmpObj_DomainTransformedRaw, TmpCtrl_MatrixRotation, 'true')
smallest_rectangle1 (TmpObj_DomainTransformedRaw, TmpCtrl_Row1, TmpCtrl_Col1, TmpCtrl_Row2, TmpCtrl_Col2)
hom_mat2d_translate (TmpCtrl_MatrixIdentity, -TmpCtrl_Row1, -TmpCtrl_Col1, TmpCtrl_MatrixTranslation)
hom_mat2d_compose (TmpCtrl_MatrixTranslation, TmpCtrl_MatrixRotation, TmpCtrl_MatrixComposite)
affine_trans_region (TmpObj_Domain, TmpObj_DomainTransformed, TmpCtrl_MatrixComposite, 'true')
affine_trans_image (TmpObj_MonoReduced_OCR_03_0, TmpObj_ImageTransformed, TmpCtrl_MatrixComposite, 'constant', 'true')
dilation_circle (TmpObj_Domain, TmpObj_DomainExpanded, 31)
expand_domain_gray (TmpObj_ImageTransformed, TmpObj_ImageTransformedExpanded, 31)
reduce_domain (TmpObj_ImageTransformed, TmpObj_DomainTransformed, TmpObj_ImageTransformedReduced)
crop_part (TmpObj_ImageTransformedReduced, TmpObj_MonoReduced_OCR_03_0, 0, 0, TmpCtrl_Col2-TmpCtrl_Col1+1, TmpCtrl_Row2-TmpCtrl_Row1+1)
set_system ('clip_region', TmpCtrl_ClipRegion)
find_text (TmpObj_MonoReduced_OCR_03_0, TextModel, TmpCtrl_ResultHandle_OCR_03_0)
* OCR 03: 
* OCR 03: Read text (classification step)
get_text_object (Symbols_OCR_03_0, TmpCtrl_ResultHandle_OCR_03_0, 'manual_all_lines')
dev_display (TmpObj_MonoReduced_OCR_03_0)
dev_set_draw ('fill')
dev_set_colored (3)
dev_display (Symbols_OCR_03_0)
do_ocr_multi_class_mlp (Symbols_OCR_03_0, TmpObj_MonoReduced_OCR_03_0, OcrHandle, SymbolNames_OCR_03_0, Confidences_OCR_03_0)
* OCR 03: 
* OCR 03: Do something with the results

在这里插入图片描述

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

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

相关文章

【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库

Python 网络爬虫入门:Spider man的第一课 写在最前面背景知识介绍蛛丝发射器——Request库智能眼镜——Beautiful Soup库 第一课总结 写在最前面 有位粉丝希望学习网络爬虫的实战技巧,想尝试搭建自己的爬虫环境,从网上抓取数据。 前面有写一…

Unity优化——加速物理引擎1

大家好,这里是七七,今天开始更新物理引擎相关的优化部分了,本文介绍的是物理引擎内部工作情况。 Unity技术有两种不同的物理引擎:用于3D物理的Nvidia的PhysX和用于2D物理的开源项目Box2D。然而,Unity对它们的实现是高…

Unity中实现ShaderToy卡通火(一)

文章目录 前言一、准备好我们的后处理基础脚本1、C#:2、Shader: 二、开始逐语句对ShaderToy进行转化1、首先,找到我们的主函数 mainImage2、其余的方法全部都是在 mainImage 函数中调用的方法3、替换后的代码(已经没报错了,都是效…

如何在小米路由器4A千兆版刷入OpenWRT并通过内网穿透工具实现公网远程访问

文章目录 前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 前言 OpenWRT是一个高度模块化、高度自…

使用Tomcat部署静态项目并处理BUG

--听讲的习惯 Tomcat介绍 tomcat what_Arenaschi的博客-CSDN博客 Tomcat安装及配置教程(超详细) 那些年我们用过的tomcat_Arenaschi的博客-CSDN博客 简单使用tomcat查看版本信息等_windows查看tomcat版本命令-CSDN博客 Tomcat部署html静态网站的五种方…

双向链表(数据结构与算法)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

【论文极速读】LVM,视觉大模型的GPT时刻?

【论文极速读】LVM,视觉大模型的GPT时刻? FesianXu 20231210 at Baidu Search Team 前言 这一周,LVM在arxiv上刚挂出不久,就被众多自媒体宣传为『视觉大模型的GPT时刻』,笔者抱着强烈的好奇心,在繁忙工作之…

开源组件与中间件的学习笔记: C++, linux, git

文章目录 C入门基本内容 linux系统与基本命令总体认知基本内容 开发工具和git基本内容 感言一些感悟 C入门 基本内容 小非是刚入职的员工, 在熟悉完git和vscode之后就开始了写代码 ,但是老张不放心,担心小飞写出屎山代码, 想要看…

财务机器人(RPA)会影响会计人员从业吗?

财务机器人会对会计从业人员有影响。 不过是正面积极的影响。 它是财务人员工作的好助手好帮手。 具体展开聊聊财务RPA机器人是如何成为财务人员的好帮手。 财务机器人是在人工智能和自动化技术的基础上建立的、以软件机器人作为虚拟劳动力、依据预先设定的程序与现有用户系…

代码随想录二刷 |二叉树 |94.二叉树的中序遍历

代码随想录二刷 |二叉树 |二叉树的中序遍历 题目描述解题思路代码实现迭代法递归法 题目描述 94.二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出&a…

prompt工程

微信公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、prompt基础 提示包括传递给语言模型的指令和语境,以实现预期的任务。提示工程是开发和优化提示的实践,以便在各种应用…

Nacos 配置中心源码 | 京东物流技术团队

客户端 入口 在引入配置中心 maven 依赖的 jar 文件中找到 spring-cloud-starter-alibaba-nacos-config-2.2.5.RELEASE.jar!/META-INF/spring.factories,在该配置文件找到 NacosConfigBootstrapConfiguration 配置类,该类是 nacos 配置中心的入口类&am…