Halcon--OCR识别

本文详细介绍了如何使用Halcon进行OCR字符识别,从读取图像、设定界面到利用read_ocr_class_mlp算子进行分类,再到字符区域的预处理、特征提取、识别和显示,最后释放资源。通过示例代码展示了半导体晶圆ID号的自动识别过程。
摘要由CSDN通过智能技术生成


前言

基于Halcon的OCR识别


一、思路

这个例子描述了半导体产品链的一个步骤,在生产线的前端,集成电路被印刷在晶圆上。要标记生产线中的单个晶圆,每个晶圆都会收到一个ID号,并用半字体打印。这个身份证号码在这里。
① 读取图像、设置界面
② 使用read_ocr_class_mlp算子指定分类器
③ for循环操作,黑白翻转图像、进行均值滤波、阈值处理、闭运算等操作
④ 再通过特征直方图,将字符的区域提取出来
⑤ 对区域字符进行识别提取
⑥ 最后释放资源

二、过程

在这里插入图片描述

在这里插入图片描述

三、源码

*
*这个例子描述了半导体产品链的一个步骤,在生产线的前端,集成电路被印刷在晶圆上。
*要标记生产线中的单个晶圆,每个晶圆都会收到一个ID号,并用半字体打印。这个身份证号码在这里。
*
* 读取图像
dev_update_off ()
dev_close_window ()
read_image (Image, 'ocr/wafer_semi_font_01')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_set_draw ('margin')
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_line_width (2)
dev_set_colored (12)
*
* 读指定分类器
read_ocr_class_mlp ('SEMI_Rej.omc', OCRHandle)
NumImages := 10
for Index := 1 to NumImages by 1
   *
   * Segment characters
   * 读入一张图像
   read_image (Image, 'ocr/wafer_semi_font_' + Index$'02')
   * Characters must be black-on-white, i.e., dark characters on a light background
   * 翻转图像,目前是黑底白字,而字符识别,需要的是白底黑字
   * 此翻转将图像变为白底黑字
   invert_image (Image, ImageInvert)
   * 下面两个算子一般一块使用
   * 对于mean_image的参数mask的大小,一般取需要的目标的大小的2倍;如目标是个圆形,直径为10,则mask的大小一般取20
   * 对于一些目标与背景的阈值对比不明显的图像,需要用到动态阈值分割,使用局部阈值来分割图像
   * 均值滤波
   * 对于背景和前景之间差别不大的图像,可以使用如下两个算子进行处理
   mean_image (Image, ImageMean, 31, 31)
   * 阈值处理,ImageMean一般为通过均值滤波处理之后的区域
   dyn_threshold (Image, ImageMean, RegionDynThresh, 7, 'light')
   * Characters are often dotted. Therefore, we first merge close dots
   * that belong to the same character just before calling the operator connection
   *闭运算,让一个字符能成为一个连通域,然后再进行connection计算,得到单个字符的连通域
   closing_circle (RegionDynThresh, RegionClosing, 2.0)
   connection (RegionClosing, ConnectedRegions)
   * Filter out characters based on two facts:
   * 1. Characters are printed in SEMI-12. Therefore we can make strong assumptions
   *    on the dimensions of the characters
   * 2. Characters are printed along a straight line
   
   * 通过特征直方图,将字符的区域提取出来,
   * 第一步提取使用的特征是宽和高
   * 第二步提取使用的特征是行坐标
   select_shape (ConnectedRegions, SelectedRegions1, ['height','width'], 'and', [29,15], [60,40])
   area_center (SelectedRegions1, Area, RowCh, ColumnCh)
   MedianRow := median(RowCh)
   select_shape (SelectedRegions1, Chars, 'row', 'and', MedianRow - 30, MedianRow + 30)
   *
   * Read out segmented characters
   * 字符区域排序,同时获得各个字符的方形区域
   sort_region (Chars, CharsSorted, 'character', 'true', 'column')
   * 将字符区域转成矩形区域
   shape_trans (CharsSorted, Characters, 'rectangle1')
   * 字符识别
   do_ocr_multi_class_mlp (Characters, ImageInvert, OCRHandle, Class, Confidence)
   *
   * 显示识别出来的字符
   dev_display (ImageInvert)
   dilation_rectangle1 (Characters, RegionDilation, 7, 7)
   dev_display (RegionDilation)
   area_center (CharsSorted, Area1, Row, Column)
   MeanRow := mean(Row)
   for IndexL := 0 to |Class| - 1 by 1
       disp_message (WindowHandle, Class[IndexL], 'image', MeanRow + 40, Column[IndexL] - 20, 'black', 'true')
   endfor
   if (Index != NumImages)
       disp_continue_message (WindowHandle, 'black', 'true')
       stop ()
   endif
endfor

* 释放分类器资源
clear_ocr_class_mlp (OCRHandle)

总结

希望对你有所帮助,有所疑惑欢迎留言交流。

HALCON是一种计算机视觉库,提供了OCR(Optical Character Recognition,光学字符识别)功能。在HALCON中,OCR识别的基本流程包括采集图像、提取字符区域、读取字库句柄、进行识别、清除句柄等步骤。\[1\]HALCON提供了一组预先训练好的字体,可以用于识别各种领域的文本,包括文档、制药、工业产品甚至手写数字文本。此外,HALCON还包括了针对特定字体的预训练字体,以及基于卷积神经网络的通用字体。\[2\]在HALCON中,可以使用do_ocr_multi_class_mlp函数来读取多个字符,或者使用do_ocr_single_class_mlp函数来读取单个字符。同时,还可以使用do_ocr_word_mlp函数来进行单词的OCR识别。\[3\] #### 引用[.reference_title] - *1* [Halcon学习之OCR字符识别](https://blog.csdn.net/Mr_Four97/article/details/131161813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Halcon解决方案指南(18)OCR--字符识别](https://blog.csdn.net/IntegralforLove/article/details/83756956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值