Tesseract3.04 和opencv3.1在条形码识别中的应用

       商品条码是由一组按一定规则排列的条、空及对应字符(阿拉伯数字)所组成,其中条为深色、空为纳色,用于条形码识别设备的扫描识读。其对应字符由一组阿拉伯数字组成,供人们直接识读或通过键盘向计算机输入数据使用。这一组条、空和相应的字符所表示的信息是相同的。本文提及的条形码识别程序BarcodeOCR用于识别条形码中阿拉伯数字。

       前言

       BarcodeOCR的原型来源于Github上的一个名为openCV_Tesseract_testrepository,感谢原作者的开源精神!  

       openCV_Tesseract_test主要展示的是摄像头取数据样本和测试样本,在该仓库中有一个视频链接用于展示该程序的效果,有兴趣的同学可以去围观一下。

       BarcodeOCR保留了openCV_Tesseract_test中摄像头取样本训练和识别的代码,新增了用本地已有图像训练样本和识别的选项,目前仅测试了新增部分。该工程基于VS2013+opencv3.1+Tesseract3.04,关于opencv和Tesseract的设置和使用方案请在本博客内搜索相应关键词,博客内均有详细讲解。

       BarcodeOCR中包含两类条形码,其识别结果分别如下图:

Barcode test result1


Barcode test result2

       BarcodeOCR工作原理概述

       BarcodeOCR工作原理部分可配合该工程的源代码一起查阅,源代码地址:https://github.com/livezingy/BarcodeOCR

       1. BarcodeOCR启动界面如下图所示,需要用户选择opencv SVM所使用的特征。

Barcode Interface

       openCV_Tesseract_test训练SVM时,输入的是图像的全部特征。在BarcodeOCR中,我添加了LBP特征,不过训练样本openCV_Tesseract_test中的400个样本,其中包含200个非条码样本,100个1类条码样本,100个2类条码样本。在BarcodeOCR中,我将各类样本一分为二,一半用于做训练样本,另一半用于测试。

       下图为训练结果对比,貌似全部特征的训练结果略优于LBP特征。      

training result

       2. 选定特征后,BarcodeOCR会在BarcodeOCR.vcxproj同路径下查找是否已有选定特征已训练好的xml文件,若有,则直接加载该文件使用;若没有,则会在控制台提示选择训练样本来源,可选择用指定路径下的文件夹样本进行训练,也可以选择用摄像头来获取训练样本(目前暂未测试)。

       3. 待SVM文件加载完成或训练完成后,控制台会提示选择测试文件来源,两个选项:选择指定路径下的测试样本,或者选择直接用摄像头验证。(暂未测试)

       4. 目前选择指定路径下的测试样本时,那么BarcodeOCR会统一对该路径下的所有样本进行预判断,然后用openCV对判断为条形码的样本进行预处理,预处理完成后用Tesseract进行识别。若需要测试单张图像,那么请在指定路径下放置一张待测样本。测试结果会有窗口显示,同时在BarcodeOCR.vcxproj路径下会有一个result.txt文件,记录该路径下所有预测为条形码样本的识别结果。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Fork me on GitHub