罗子棋 杨颖 戴毅钦 胡健 刘坤铭 吴昊荣
关键词:药品;条形码;Halcon;图像预处理;识别
1引言
药品安全问题一直都是社会民众关注的核心问题。一维条形码技术能够实现计算机对药品信息的快速便捷监控,让购买药品的患者能够清晰地对药品信息进行溯源,且条形码的误码率一般低至百万分之一左右,安全可靠[1]。推行药盒条形码识别系统,可以极大地保障药品的流通安全性,也方便医院、药店对药品的库存管理和来源追溯。随着智能制造技术飞速发展,信息的获取方式、传播方式、处理方式和管理方式等都有了极大的进步,条形码技术也很快应用到医疗药品行业中[2]。我国国家食品药品监督管理总局也规定列入的重点药品必须有“药品电子监管码”才能销售。德国MVtec公司研发的Halcon软件是一款商用视觉处理软件,其包含1000多个图像处理算子,功能强大[3]。使用Halcon内置的一维条形码图像识别算子对药盒条形码图像进行处理,其程序开发速度快,对药盒条形码的识别效果好,很适合应用到药盒条形码图像识别系统。
2基于Halcon软件的药盒条形码图像预处理
2.1药盒条形码图像采集
我国药品的药盒上规定必须含有EAN-13码和Code-128码两种不同类型的条形码,分别是药品的零售商品码和中国药品电子监管码。药品的信息系统管理在录入与售卖中多采用的是EAN-13类型的条形码,EAN-13码的奇偶编码表示二进制的规则,其能够表示出13位字符的数字字符信息,包含国家、制造商、产品代号三种信息[4]。在药盒条形码的识别过程中,对条形码图像的采集是第1步也是重要的一步。条形码图像由光学传感器、摄像头、图像处理系统对药盒进行采集。采集到的药盒条形码图片由摄像头或者光学传感器储存到存储芯片中,通过接口电路传输至计算机进行显示。图1为采集到的药盒EAN-13码和药盒Code-128码。
2.2药盒条形码图像灰度化
RGB彩色图像虽然与人眼视觉能够很好地匹配,但其信息量也大,而条形码的识别中并不需要彩色信息,故图像处理时往往需要将彩色的图像转换为灰度图像[5]。图像灰度化是指只含有亮度信息,不含有色彩信息的图像,而灰度化是指把含有亮度和色彩的彩色图像变换成灰度图像的过程。将图片的色彩去除后使得图片的占用内存大小变小,因而处理计算所需要的资源、计算量减少,后续图片的处理速度显著提高。使用Halcon的rgbl _to_gray算子可以把RGB彩色图像转换成为灰度图像[6]。图2为药盒EAN-13码和Code-128码图像灰度化后的结果。
2.3药盒条形码图像二值化
药盒条形码图像的二值化就是把数字图像转化成一种只有两种色彩的图像,将图像的目标区域和图像的背景区域区分开,处理好后的二值化图像为后续图像的边缘提取等其他图像处理奠定基础。图像二值化处理的关键之处就是选出一个合适的灰度阈值,使目标区域和背景区域像素点被精准地分割开来。在对药盒条形码图像进行二值化处理后,其数据量会明显减少,但让我们感兴趣的目标区域的轮廓却能够更好地呈现。在Halcon软件中利用threshold( Image:Region:MinGray,MaxGray)算子对药盒条形码进行二值化处理。在算子自动给出选定阈值后,通过查看灰度直方图来微调选定阈值,以达到药盒条形码图像二值化处理的操作。图3为药盒EAN-13码二值化(左)和Code-128码二值化(右)结果。通過动态图阈值分割法,药盒条形码图像被二值化处理成了只有两种颜色的图片,条形码信息的区域变成红色,在灰黑色背景中突显出来。
2.4药盒条形码图像中条形码轮廓提取
药盒条形码图像的轮廓提取是其图像处理和机器视觉处理中最基本的问题。图像目标区域轮廓提取的精度直接影响后续数字图像数据处理的精度,其关键因素就是在平滑和锐化处理时保持住图像的基本特征。药盒条形码图像的局部亮度变化中差别最大的地方是条码边缘,条形码的两侧反射率会相差较大,而边缘的像素也很密集,边缘像素点附近的梯度是一致的,因此通过检测轮廓特征明显、信息量大的像素区域,就可以高效率地检测出条形码轮廓。在Halcon中使用Edge算子进行条形码轮廓提取。药盒条形码图像在经过灰度化、二值化处理的基础上,其区域进行了轮廓提取处理。如图4所示,药盒条形码在进行轮廓提取后,条形码的形状特征更加明显和容易辨认。
3药盒条形码图像识别处理
3.1药盒条形码图像的特征筛选识别
在药盒条形码图像识别中需要排除复杂场景的干扰。采用平方梯度特征的方式,剔除边缘中的短边缘和曲线边缘,这种方法能较好地排除大部分背景的干扰,有利于后续药盒条形码图像中条码的定位。通过Halcon的Sobel算子对药盒条形码图像进行特征识别提取。图5为药盒EAN-13码特征识别和Code-128码特征识别结果。
3.2药盒条形码图像的条码区域定位
通过梯度方向一致性的特征对边缘进行筛选后,边缘图像中除了条码边缘外,具有梯度方向一致性的线条也被保留下来,这些线条通常是物体的轮廓、表格的边缘等,一般孤立存在,不具备条码边缘分布的密集性。为了进一步消除背景的干扰,保证条码定位区域的准确性,采用形态学处理。形态学的基本操作有膨胀、腐蚀、开运算以及闭运算,其中开运算操作是先对图像腐蚀后膨胀,去掉目标外孤立的点及细小物体,再利用Halcon中的find_bar_code算子对药盒条形码进行识别定位,find_bar_code算子会查找并读取给定条形码图像中的条形码符号。但是,在一幅条形码的图像中,只能读取出来任意数量的单一类型条形码。并且,在调用find—bar—code算子前,必须通过调用create—bar—code—model算子来创建需要处理的条形码模型,find bar—code算子则只能够识别并定位出该模型所定义的条形码类型。通过识别药盒条形码的条码图案特征,将药盒条形码的图案区域进行定位识别。图6为药盒EAN-13码定位和药盒Code-128码定位。药盒条形码的条码图案定位后,为后续对药盒条形码的条形码信息识别解码转换打下基础。
3.3药盒条形码信息识别与解码
药盒条形码识别系统中最重要的是对采集到的药盒条形码图像进行信息提取,将药盒条形码图像中储存的条形码信息识别读取出来。通过Halcon软件的内置算子对采集到的药盒条形码图像进行图像识别,将药盒条形码中条码的二进制信息转化为十进制的数字字符信息,并将药盒条形码检测识别出的十进制数字字符信息显示于图形窗口的图片之上,便于对照是否识别出错。如图7所示,Halcon软件对药盒的Code-128类型条形码信息进行了识别,条形码信息所含的20位数字字符信息识别解码后显示在了窗口左上方,识别出的十进制数字字符的信息为83664920037628902502,这和图像中药盒条形码下部数字字符信息一致,说明正确识别出了药盒Code-128条形码信息。
对倾斜状态采集到的药盒条形码图像进行识别时,将采集到的药盒条形码图像倾斜,并且在不进行图像倾斜校正的情况下进行条形码识别。如图8所示,以EAN-13类型条形码为例,倾斜药盒的条形码图像经过识别解码,仍然可以将药盒条形码所含的数字字符信息识别出来。
图9为瓶装药盒EAN-13码解码识别。基于Halcon软件能够对有曲率、罐装、桶装的药盒上的条形码进行处理,对采集到的大罐装以及瓶装药盒条形码图像进行了成功识别解码。尽管瓶装药盒的圆柱形包装有一定的曲率,但仍然能如同平面药盒条形码图像一样正常识别解码。
4药盒条形码识别系统设计
4.1系统总体设计
药盒条形码系统主要由摄像头与计算机组成,计算机上搭载Halcon软件和QT框架。先由摄像头采集药盒条形码图像,将采集到的图像由数据线传输给计算机,在计算机中由Halcon软件对药盒条形码图像进行图像处理并将药盒条形码的条形碼信息识别解码,最后将Halcon所识别解码的结果传输到QT框架所搭建的界面中进行显示。图10为药盒条形码识别系统总体设计图。
4.2系统开发与实现
药盒条形码识别系统需要将Halcon处理解码得到的数字信息进行显示,并将解码得到的数字字符信息在药品信息数据库中进行对比,最终得到药品信息并在系统界面进行。Halcon软件的工作界面不利于客户直观使用,通常会将Halcon软件程序转换为C++程序,然后在QT中创建系统界面,再显示Halcon软件对药盒条形码图像所处理得到的结果。图11为QT界面展现的药品条形码信息。
5结束语
药品的管理、配发、监管等问题通过药盒上的条形码进行联网智能化管理,既提高了工作效率,也减少了药品的安全问题。利用Halcon软件内置算子能够实现药盒条形码识别,辅助QT界面设计,能够很好地实现系统的可视化。当然,利用Halcon软件进行条形码图像处理时,条形码图像采集环节仍然有需要改进的地方,如做一个简单的摄像头并进行遮光处理或者优化药盒放置台角度等方法来减少反光的影响;另外,在本次搭建的药盒条形码识别系统中,由于药盒条形码有EAN-13码和Code-128码,且两者模型解码模型不同,因此没有实现在一段程序中一次可以检测两种编码的功能,后期还需加入判别程序,以尝试实现药盒条形码两种编码的识别。