基于机器视觉的钢包号识别方法*

2022-06-09 05:44孙凯明刘彤军
自动化技术与应用 2022年5期
关键词:钢包字符识别字符

孙凯明,刘彤军,郝 明,王 刚

(黑龙江省科学院智能制造研究所,黑龙江 哈尔滨 150090)

1 引言

在智能制造和中国制造2025 的背景下,炼钢企业纷纷利用机器视觉技术、工业互联网技术和信息处理技术等来提高其智能制造水平[1]。但由于炼钢厂车间环境复杂,钢包号的识别难度大,制约了炼钢工艺中的智能化水平。

OCR 识别流程中最关键的三个步骤为字符定位、字符分割和字符识别[2-4]。

文献[5]中采用了在原来钢包上加装蓝底白字后,再借鉴车牌识别相关技术的基础上设计了基于HSV颜色空间的钢包号定位方法;文献[6]将字符融合特征和SVM 相结合的方法分割点阵字符;文献[7]采用卷积神经网络实现了点阵字符的识别。

钢包通常都带有凹陷字符,这些字符在环境中一般为黑色,而钢包本身是灰色的,在复杂的环境中很难定位和识别。本文通过模板匹配和轮廓筛选,实现了一种钢包凹陷字符分割方法,进而利用Tesseract OCR实现了字符识别。

2 本文方法框架[8]

本文方法主要分4部分:图像预处理、号码区域定位、字符分割、模型训练及字符识别。这个方法框架如图1所示。

图1 本文方法框架

图1中各部分的功能如下:

(1)图像预处理:在保持边缘信息的同时滤除噪声影响。

(2)号码区域定位:通过模板匹配实现钢包号码区域的定位。

(3)字符分割:通过轮廓筛选获取单个字符图像。

(4)模型训练和字符识别:利用tesseract OCR 实现钢包号0-9十个阿拉伯数字字符的识别。

3 本文方法的OpenCV实现

3.1 图像预处理

双边滤波(Bilateral Filter)是非线性滤波中的一种。这是一种结合图像的空间邻近度与像素值相似度的处理办法。在滤波时,该滤波方法同时考虑空间临近信息与颜色相似信息,在滤除噪声、平滑图像的同时,又做到边缘保存。OpenCV中的函数[9]如下:

void bilateralFilter(InputArray src,OutputArray dst,int d,double sigmaColor,double sigmaSpace,int borderType=BORDER_DEFAULT);

第三个参数,int 类型的d,表示在过滤过程中每个像素邻域的直径。如果这个值我们设其为非正数,那么OpenCV会从第五个参数sigmaSpace 来计算出它来。第四个参数,double类型的sigmaColor,颜色空间滤波器的sigma值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。第五个参数,double 类型的sigmaSpace 坐标空间中滤波器的sigma 值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当d>0,d 指定了邻域大小且与sigmaSpace 无关。否则,d正比于sigmaSpace。

在本方法中,参数d=10,sigmaColor=20,sigmaSpace=5。

图2 双边滤波结果

3.2 号码区域定位

钢包号是黑色凹陷的,很难从周围环境中区别开。因此,本文方法选择钢包上信息丰富的部位为模板,采用模板匹配技术[10-11]先定位钢包,再根据钢包号区域与模板区域的位置关系定位到钢包号码区。本文选取的模板如图3所示。

图3 定位匹配模板

在OpenCV 中提供了平方差匹配(TM_SQDIFF)、相关性匹配(TM_CCORRD)和相关系数匹配(TM_CCOEFF)3种基本匹配方法,每个方法还提供了结果归一化(TM_SQDIFF_NORMED,TM_CCORR_NORMED,TM_CCOEFF_NORMED),共6 种匹配方法。本文对三种归一化匹配方法进行了比较,其结果如表1所示。

表1 模板匹配三种归一化方法结果比较

从对比结果可以看出,数值越大表示匹配程度越高,相关匹配方法匹配度最高,并且匹配度波动较小,所以本文中选择相关匹配归一化方法,即TM_CCORR_NORMED,其公式为:

即模板与图像间作乘法操作。

基于模板匹配获取钢包号码区域的过程如表2所示。

表2 获取号码区域过程

基于模板匹配获取钢包号码区域的结果如图4所示。

图4 基于模板匹配获取钢包号码区域的结果

3.3 字符分割

本文首先对号码区域利用OTSU方法二值化,然后通过形态学处理,消除笔画断裂和小块噪声影响,最后利用轮廓筛选确定单个字符区域,完成字符分割。字符分割过程如表3所示。

表3 字符分割过程

字符分割结果如图5所示。

图5 字符分割过程及结果

3.4 基于Tesseract OCR的字符识别

本文利用谷歌开源Tesseract OCR 引擎[12]对钢包号识别。对于特定的识别,引擎自带的字库的字符识别率不高,需要在其自带的eng.trainedtata 字库基础上追加自己的字符训练。为此,从实际获取的钢包号字符中,对其进行仿射变换、缩放、形态学处理,曾广字符的数据集[13],以提高Tesseract OCR识别的准确率。表4为一组图像及其曾广结果。

表4 曾广数据集示例

本方法中,字符识别阶段通过OpenCV处理分割的图片作为tesseract OCR 的输入来进行。首先声明tesseract::TessBaseAPI 对象并对其初始化,代码中的MyModel 为自己训练的字库名;然后设置识别模式为单词模式,即tesseract ocr 认为输入的图片中只有一个字符;调用SetImage 设置输入的图片wordImg,wordImg是cv::Mat类型,需要按照tesseract OCR 要求类型输入;最后调用GetUTF8Text获取识别结果。对其实现代码如下:

tesseract::TessBaseAPI*tess=new tesseract::Tess-BaseAPI();

tess->Init(NULL,"MyModel",tesseract::OEM_DEFAULT);

tess->SetPageSegMode(tesseract::PSM_SINGLE_WORD);

tess->SetImage((uchar*)wordImg.data,wordImg.cols,wordImg.rows,1,wordImg.cols);

char*out=tess->GetUTF8Text();

4 实验结果

本设计运行CPU i7,Win10 操作系统,以VS2019 为开发环境,利用OpenCV4.5机器视觉算法库和Tesseract OCR 4.0文字识别引擎实现。

如表5所示为钢包号区域定位及字符分割结果。从图中可以看出,本方法能克服现场光线环境变化影响,号码区域定位稳定,字符分割准确。

表5 钢包号区域定位及字符分割结果

本文分别用数据曾广前后的数据集训练了2个字库,并统计了它们的错误率。所得结果如表6所示。从表6可以看出,采用曾广数据集的方法能极大地提高字符识别的准确率。

5 结束语

本文钢包号识别方法包括图像预处理、号码区域定位、字符分割、模型训练及字符识别几部分组成。比较OpenCV中提供的6种模板匹配方法后选择相关性匹配,利用模板匹配技术实现钢包号区域定位,在定位区域内通过OTSU进行二值化处理,并利用形态学方法实现号码字符分割。在字符识别方面,通过数据曾广方法增加训练数据集,提高Tesseract OCR的识别率。从实验结果看,本文方法能稳定定位钢包号码区域,号码识别率达98.30%。

表6 钢包字符识别实验结果

本文方法虽然不具通用性,但对提高钢铁企业的生产安全和智能制造水平起到一定的积极作用,对于其他类似场合也具有一定的参考价值。

猜你喜欢
钢包字符识别字符
转炉炼钢过程中钢包温度控制研究
钢包精炼炉(LF)作为可削减负荷的灵活性评估
低压铸造中钢包热—结构耦合分析及优化
论高级用字阶段汉字系统选择字符的几个原则
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
融合字符及字符排列特征的铭牌识别方法
一种基于OpenCV的车牌识别方法
基于MATLAB的图片中字符的分割与识别