halcon简易识别酒瓶上的特定字符
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;
注意: 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
登录后方可回帖