ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

检测识别二维码的几大开源库汇总

2019-08-13 16:40:38  阅读:696  来源: 互联网

标签:pts symbol 汇总 二维码 开源 检测 Zbar textPoint


自从手机APP二维码支付进入了人们的日常生活后,方便安全,真是无处不在。

特别是1994年日本Denso Wave发明的QR码(快速响应),它获得最广泛应用,因为它易于检测,写入大量信息,并提供强大的错误纠正机制,它可以说是第一个最大的图像识别应用程序。

 

「干货」检测识别二维码的几大开源库汇总

 

 

二维码的检测和解码已成为许多应用开发的必要条件。面对许多开源库,哪一个更好?

我们比较了五个值得参考的有影响力的开源库中的检测算法。

参与开源库的比较:

BoofCV (Ver. 0.33):一种用Java实现的开源、实时的计算机视觉库;

http://boofcv.org/

OpenCV (Ver. 4.0.1):OpenCV 4.0后加入了QR码检测和解码功能,C++实现;

http://opencv.org/

Quirc (Feb 1, 2018. SHA 307473db):一种专门面向QR码的检测和解码库,C语言实现;

ZBar (Ver. 0.10):一种被广泛使用的包含各种条码检测识别的专门库,支持各种平台,支持Python, Perl, C++等语言;

ZXing (Ver. 3.3.3):一种面向Java Android开发的各种条码检测识别库,用Java开发,支持多种语言;

为了全面比较每个开源库的性能以检测QR码,作者在应用程序中收集了大量常见情况。

 

「干货」检测识别二维码的几大开源库汇总

 

 

各类别包含的图像数:

 

「干货」检测识别二维码的几大开源库汇总

 

 

作者通过将检测到的位置和标签位置与10%作为阈值进行匹配来定义检测成功,并计算真阳性,假阳性,真阴性和假阴性,最后计算F-Measure以比较检测结果。

按类别划分的测试结果统计:

 

「干货」检测识别二维码的几大开源库汇总

 

 

不分类别的全局统计:

 

「干货」检测识别二维码的几大开源库汇总

 

 

可以看出,没有哪个库比其他库更好,但在大多数情况下,BoofCV最好或接近最佳。在大多数类别中,Zbar优于ZXing,但在ZXing最擅长的类别中,Zbar还不够好。Quirc在正常情况下表现良好,但其他图书馆中表现最佳的类别并不是很好。OpenCV无疑总是最糟糕的。

检测速度结果比较:

 

「干货」检测识别二维码的几大开源库汇总

 

 

在哪个类别中,性能是一致的,ZXing是最快的库,其次是BoofCV。OpenCV的速度性能非常稳定且速度最慢。。。

结论:

您选择哪个库取决于您的应用程序。如果QR码比较标准推荐BoofCV,其检测精度高,速度也很好。如果QR码脏了或外观发生变化,ZXing是个不错的选择。如果您只能使用C ++,建议使用Zbar。

我们挑一个Zbar来实验下:

环境:VS2010、OpenCV2.4.9、Zbar环境配置

环境说明:

1. OpenCV是一个机器视觉开源类库,广泛用于图像处理、模式识别等领域,它是Zbar项目的核心。这里我使用的是OpenCV2.4.9。(不建议使用OpenCV1版本)

2. 集成开发工具Visual Studio2010。(不建议使用Visual C++ 6.0,因其仅支持OpenCV1.0的版本),新建C++控制台应用程序,并设置相应的工程属性,添加包含目录、附加链接等。

3. 测试程序如下:

  •  


#include "zbar.h" 


#include "cv.h" 


#include "highgui.h" 


#include <iostream> 


 


using namespace std; 


using namespace zbar; 


using namespace cv; 


 
郑州不孕不育医院哪家好:http://jbk.39.net/yiyuanzaixian/zztjyy/

int main(void) 


{ 


 ImageScanner scanner; 


 scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1); 


 char file[256]; 


 cin>>file; 


 Mat img = imread(file,0); 


 Mat imgout; 


 cvtColor(img,imgout,CV_GRAY2RGB); 


 int width = img.cols; 


 int height = img.rows; 


 uchar *raw = (uchar *)img.data; 


 Image image(width, height, "Y800", raw, width * height); 


 int n = scanner.scan(image); 


 for(Image::SymbolIterator symbol = image.symbol_begin();symbol != image.symbol_end();symbol++) 


 { 


 vector<Point> vp; 


 cout<<"Decoded:êo"<<endl<<symbol->get_type_name()<<endl<<endl; 


 cout<<"Symbol:êo"<<endl<<symbol->get_data()<<endl<<endl; 


 int n = symbol->get_location_size(); 


 for(int i=0;i<n;i++) 


 { 


 vp.push_back(Point(symbol->get_location_x(i),symbol->get_location_y(i))); 


 } 


 RotatedRect r = minAreaRect(vp); 


 Point2f pts[4]; 


 r.points(pts); 


 Point textPoint(pts[1]); 


 string codeNum=symbol->get_data(); 


 for(int i=0;i<4;i++) 


 { 


 line(imgout,pts[i],pts[(i+1)%4],Scalar(255,0,0),3); 


 textPoint.x>=pts[i].x?textPoint.x=pts[i].x:textPoint.x=textPoint.x; 


 textPoint.y>=pts[i].y?textPoint.y=pts[i].y:textPoint.y=textPoint.y; 


 putText(imgout,codeNum,textPoint,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255),1,8,false); 


 } 


 cout<<"Angle: "<<r.angle<<endl; 


 } 


 imshow("imgout.jpg",imgout); 


 waitKey(); 


}



 

4. 先生成一个嵌入文本信息的二维码

 

「干货」检测识别二维码的几大开源库汇总

 

 

 

运行测试程序,如下图:

 

「干货」检测识别二维码的几大开源库汇总

 

 

 

换个网址再试试:

 

「干货」检测识别二维码的几大开源库汇总

 

 

 

大家可以自己尝试下。

标签:pts,symbol,汇总,二维码,开源,检测,Zbar,textPoint
来源: https://blog.csdn.net/cyxhjy1314/article/details/99445634

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有