本文主要是介绍Tesseract3.04 和opencv3.1在条形码识别中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
商品条码是由一组按一定规则排列的条、空及对应字符(阿拉伯数字)所组成,其中条为深色、空为纳色,用于条形码识别设备的扫描识读。其对应字符由一组阿拉伯数字组成,供人们直接识读或通过键盘向计算机输入数据使用。这一组条、空和相应的字符所表示的信息是相同的。本文提及的条形码识别程序BarcodeOCR用于识别条形码中阿拉伯数字。
前言
BarcodeOCR的原型来源于Github上的一个名为openCV_Tesseract_test的repository,感谢原作者的开源精神!
openCV_Tesseract_test主要展示的是摄像头取数据样本和测试样本,在该仓库中有一个视频链接用于展示该程序的效果,有兴趣的同学可以去围观一下。
BarcodeOCR保留了openCV_Tesseract_test中摄像头取样本训练和识别的代码,新增了用本地已有图像训练样本和识别的选项,目前仅测试了新增部分。该工程基于VS2013+opencv3.1+Tesseract3.04,关于opencv和Tesseract的设置和使用方案请在本博客内搜索相应关键词,博客内均有详细讲解。
BarcodeOCR中包含两类条形码,其识别结果分别如下图:
BarcodeOCR工作原理概述
BarcodeOCR工作原理部分可配合该工程的源代码一起查阅,源代码地址:https://github.com/livezingy/BarcodeOCR
1. BarcodeOCR启动界面如下图所示,需要用户选择opencv SVM所使用的特征。
openCV_Tesseract_test训练SVM时,输入的是图像的全部特征。在BarcodeOCR中,我添加了LBP特征,不过训练样本openCV_Tesseract_test中的400个样本,其中包含200个非条码样本,100个1类条码样本,100个2类条码样本。在BarcodeOCR中,我将各类样本一分为二,一半用于做训练样本,另一半用于测试。
下图为训练结果对比,貌似全部特征的训练结果略优于LBP特征。
2. 选定特征后,BarcodeOCR会在BarcodeOCR.vcxproj同路径下查找是否已有选定特征已训练好的xml文件,若有,则直接加载该文件使用;若没有,则会在控制台提示选择训练样本来源,可选择用指定路径下的文件夹样本进行训练,也可以选择用摄像头来获取训练样本(目前暂未测试)。
3. 待SVM文件加载完成或训练完成后,控制台会提示选择测试文件来源,两个选项:选择指定路径下的测试样本,或者选择直接用摄像头验证。(暂未测试)
4. 目前选择指定路径下的测试样本时,那么BarcodeOCR会统一对该路径下的所有样本进行预判断,然后用openCV对判断为条形码的样本进行预处理,预处理完成后用Tesseract进行识别。若需要测试单张图像,那么请在指定路径下放置一张待测样本。测试结果会有窗口显示,同时在BarcodeOCR.vcxproj路径下会有一个result.txt文件,记录该路径下所有预测为条形码样本的识别结果。
这篇关于Tesseract3.04 和opencv3.1在条形码识别中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!