halcon简易识别酒瓶上的特定字符

By admin at 16 天前 • 0人收藏 • 59人看过
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="Button";left=636;top=53;right=750;bottom=152;z=2};
picturebox={cls="picturebox";left=0;top=0;right=588;bottom=470;z=1}
)
/*}}*/

import HOperatorSetX;
//halcon
var HOperatorSetX = com.CreateObject("{6ebd90e2-d219-11d2-ade5-0000c00f4ef9}")
//读取图片
var Bottle = HOperatorSetX.ReadImage("C:\Users\Public\Documents\MVTec\HALCON-13.0\examples\images\bottle2");
//读取图片原始大小
var Width, Height = HOperatorSetX.GetImageSize(Bottle);
//将picturebox绑定到halcon窗口,并设置窗口显示图片原始大小
var WindowHandle = HOperatorSetX.OpenWindow(0,0,Width, Height,winform.picturebox.hwnd,"transparent","");

import console
console.open()

winform.button.oncommand = function(id,event){
    //Halcon所提供的OCR分类器,都是基于“白底黑字”的情况来进行文本训练的
    
    //设置ocr字体
	var FontName = 'Universal_0-9_NoRej'
	
	//创建文本查找模式为自动配置
	var  TextModel = HOperatorSetX.CreateTextModelReader( 'auto', FontName );
	//追加字体模型参数,限制宽度为6
	HOperatorSetX.SetTextModelParam( TextModel, 'min_stroke_width', 6 );
	//追加字符已知结构:[2个字符] [2个字符] [2个字符]
	HOperatorSetX.SetTextModelParam( TextModel, 'text_line_structure', '2 2 2' );
	//识别字符
	var  TextResultID = HOperatorSetX.FindText( Bottle, TextModel );
	//获取识别结果, 返回所有识别到的块
	var Characters = HOperatorSetX.GetTextObject(  TextResultID, 'all_lines' );
	HOperatorSetX.DispObj( Bottle , WindowHandle );
	HOperatorSetX.DispObj( Characters , WindowHandle );
	
	//显示文字结果
	var  Classes = HOperatorSetX.GetTextResult( TextResultID, 'class' );
	console.dump(Classes)
	//释放
	HOperatorSetX.ClearTextResult( TextResultID );
	HOperatorSetX.ClearTextModel( TextModel );
}

winform.show();
win.loopMessage();
return winform;

image.png

注意: Halcon所提供的OCR分类器,都是基于“白底黑字”的情况来进行文本训练的


在Halcon案例中,对于OCR的识别主要分为以下几个步骤。

第1步:读图,提取需要识别区域

第2步:创建文本模型并设置参数

第3步:查找文本行

第4步:通过MLP分类进行OCR字符识别

第5步:清除MLP分类模型


对于第2步,我们的主要步骤如下


首先我们通过create_text_model_reader来创建一个TextModel,其是用来描述、限制find_text需要分割的文本。其中Mode的参数值决定了使用哪种文本分割方法。


查找方式有两种,"auto"和"manual"。


1)、通常我们会使用"auto",因为这样会比较稳定,使得配置工作大大减少。这种模式下find_text能够提取任意大小的文本,当然如若需要限制,可通过set_text_model_param来设置搜索限制,减少错误发生。


2)、"manual"模式通常在以下情况下需要使用:


1、所需分割文本字符是点阵的;


2、背景与字符之间存在局部极性变化的文本;


3、没有合适的基于基于MLP的OCR分类器;


在这模式下,必须使用set_text_model_param设置文本模型的合理参数,如字符的高度、宽度,也可以使用get_text_model_param来查询TextModel的参数。


而无论是“auto”还是“manual”,create_text_model_reader都有一个OCRClassifierMLP,如果在"auto"情况下,必须要有传递OCR的分类,是什么字体类型,而"manual”则为【】空便可。


原文链接:https://blog.csdn.net/lenole320/article/details/77372603




登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
Htmlayout皮肤Htmlayout皮肤引擎介绍
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...