当前位置: 首页 > 编程日记 > 正文

二维码检测哪家强?五大开源库测评比较

640?wx_fmt=jpeg

作者 | 周强

来源 | 我爱计算机视觉(ID:aicvml)

二维码已经进入人们的日常生活中,尤其是日本Denso Wave公司1994年发明的QR码,由于其易于检测、写入信息量大、提供强大的纠错机制,应用最为广泛,可说是名副其实的第一大图像识别应用。

640?wx_fmt=png

QR码的检测和解码成为很多应用开发的必备,面对众多的开源库,到底哪一种是比较好的呢?

BoofCV的作者Peter Abeles对较有影响力的五大开源库中检测算法进行了比较,值得大家参考。

参与比较的开源库

  • 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码的性能,作者收集了在应用中大量常见的情况。包括模糊、阴影、高光、扭曲、被涂损等15种情况,如下图:

640?wx_fmt=png

各类别包含的图像数:

640?wx_fmt=png

检测结果

作者以检测到的位置和标签位置重合10%为阈值定义检测成功,计算true positives, false positives, true negatives, 与 false negatives,并最终计算F-Measure来比较检测结果。


  • 分类别的检测结果统计


640?wx_fmt=png

  • 不分类别的全局统计:


640?wx_fmt=png

可见,没有哪个库处于统治地位完全比其他库更好,但BoofCV在大多数情况下为最好或者接近次好。Zbar在大多数类别下比ZXing好,但在ZXing最擅长的类别,Zbar不够好。quirc在一般情况下都表现良好,但在其他库表现最好的类别却不是很好。OpenCV则是毫无疑问总是最差。

  • 检测速度结果比较:

640?wx_fmt=png

在哪一类别的表现均一致,ZXing是最快的库,BoofCV次之。OpenCV的速度表现很稳定,最慢。。。

结论

选择哪个库取决于你的应用,如果二维码比较标准建议BoofCV,它的检测精度高而且速度也很好,如果二维码有污损或外观变化,ZXing是不错的选择。如果只能使用C++,则推荐Zbar。(反正OpenCV是不被推荐的!)


(*本文为 AI科技大本营转载文章,转载请联系作者)


福利时刻



入群参与每周抽奖~

扫码添加小助手,回复:大会,加入福利群,参与抽奖送礼!

640?wx_fmt=jpeg

大会5折优惠票倒计时 2 天! 团购还享立减优惠,倒计时 2 天!此外,伯克利大学名师精髓课程移师北京。《动手学深度学习》作者、亚马逊首席科学家李沐线下亲授「深度学习实训营」,免费GPU资源,现场还将限量赠送价值85元的配套书籍一本,先到先得。原价1099元,限时专享CSDN 独家福利价199元识别海报二维码,即刻购票~

640?wx_fmt=png

推荐阅读

  • 2019 AI ProCon日程出炉:Amazon首席科学家李沐亲授「深度学习」

  • 玩嗨的2亿快手“老铁”和幕后的极致视觉算法

  • 与旷视、商汤等上百家企业同台竞技?AI Top 30+案例评选等你来秀

  • 从不温不火到炙手可热:语音识别技术简史

  • 入门大爆炸式发展的深度学习,你先要了解这6个著名框架

  • 用Python的算法工程师们,编码问题搞透彻了吗?

  • Python冷知识,不一样的技巧带给你不一样的乐趣

  • 我是如何通过开源项目月入 10 万的?

  • 撬动百亿台设备,让物联网“造”起来!

  • 程序员离无人值班有多远?

640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

相关文章:

linux 内核 出错-HP 方案

2019独角兽企业重金招聘Python工程师标准>>> SUPPORT COMMUNICATION - CUSTOMER ADVISORY Document ID: c03456595 Version: 1 Advisory: Red Hat Enterprise Linux 6 - "P4-Clockmod: Warning: EST-Capable CPU Detected" Messages Logged in /var/log…

Windows7 64bit VS2013 Caffe test MNIST操作步骤

在http://blog.csdn.net/fengbingchun/article/details/49849225中用Caffe对MNIST数据库进行训练,产生了model。下面介绍下如何将产生的model应用在实际的数字图像识别中。用到的测试图像与http://blog.csdn.net/fengbingchun/article/details/50573841中相同&#…

记住这35个英文单词,你就可以在RPA界混了!

无论是想玩转RPA(机器人流程自动化),还是有意了解、进入这项行业,只有先了解该领域的专有名词(行业术语),才能为之后的活动提供更多的可能。UiBot现为您编译整理了这份机器人流程自动化术语表&a…

福利 | 送你一张通往「2019 AI开发者大会」的门票

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。…

收缩日志文件夹

-- MSSQL2005 USE mastergo DECLARE dbname sysname;SET dbnameBSV100;-- 清空日志EXEC (DUMP TRANSACTION [dbname] WITH NO_LOG); -- 截断事务日志:EXEC (BACKUP LOG [dbname] WITH NO_LOG); -- 收缩数据库文件(如果不压缩,数据库的文件不会减小EXEC (DBCC SHR…

腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,支持3种算法,打造全栈机器学习平台...

出品 | AI科技大本营(ID:rgznai100)【导语】2019年8月22日,腾讯首个AI开源项目Angel正式发布3.0版本。Angel 3.0尝试打造一个全栈的机器学习平台,功能特性涵盖了机器学习的各个阶段:特征工程,模…

路印协议受邀参加澳洲新南威尔士政府孵化器Haymarket HQ分享论坛

2019年2月15日,澳洲新南威尔士政府孵化器Haymarket HQ和Next Genius 社区联合举办了区块链解决方案分享论坛,路印协议CMO周杰受邀介绍当前交易所现状和路印协议的去中心化解决方案。参与此次论坛的还有区块链开发人员、企业家和去中心化技术爱好者&#…

一步一步指引你在Windows7上配置编译使用Caffe(https://github.com/fengbingchun/Caffe_Test)

之前写过几篇关于Caffe源码在Windows764位上配置编译及使用过程,只是没有把整个工程放到网上,最近把整个工程整理清理了下,把它放到了GitHub上。下面对这个工程的使用作几点说明:1. 整个工程Caffe在Windows7 64位VS2013下编译…

演示:思科IPS在线模式下Inline Interface Mode的响应行为(区别各个防御行为)

演示:思科IPS在线模式下Inline Interface Mode的响应行为演示目标:科IPS在线模式下InlineInterface Mode的响应行为。演示环境:仍然使用图5.16所示的网络环境。演示背景:在VLAN3的主机192.168.4.2上发起对主机192.168.4.1的漏洞扫…

【笔记】重学前端-winter

本文为:winter 发布在极客时间 【重学前端】系列课程的的笔记和总结支持正版哦: https://time.geekbang.org/col... 导语 如果深入进去了解,你会发现,表面上看他们可能是一时忘记了,或者之前没注意但实际上是他们对于前端的知识体…

如何用知识图谱挖掘商业数据背后的宝藏?

这是一个商业时代,一个数据为王的时代,也是一个 AI 迎来黄金发展期的时代。据史料记载,商业在商朝已初具规模。斗转星移,时光流转,到 2019 年,商业形式已发生翻天覆地的变化,但是商业的本质——…

通过define _CRTDBG_MAP_ALLOC宏来检测windows上的code是否有内存泄露

VS中自带了内存泄露检测工具&#xff0c;若要启用内存泄露检测&#xff0c;则在程序中包括以下语句&#xff1a; #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> 它们的先后顺序不能改变。通过包括 crtdbg.h&#xff0c;将malloc和free函数映射到其”Debug”版本_malloc…

java.sql.SQLException: Data truncation: Truncated incorrect DOUBLE value

mysql 报这个异常&#xff1a;java.sql.SQLException: Data truncation: Truncated incorrect DOUBLE value update 表名 set col1 ? and col2 ? where id ? 改为&#xff1a; update 表名 set col1 ? , col2 ? where id ? 用逗号隔开

在Ubuntu14.04 64位上编译CMake源码操作步骤

在Ubuntu上通过apt-get install安装CMake并不是最新版的&#xff0c;这里记录下在Ubuntu上通过源码安装CMake的操作步骤&#xff1a;1. 卸载旧版CMake&#xff0c;执行以下命令&#xff1a;apt-get autoremove cmake如果卸载不掉&#xff0c;则通过执行以下命令删除&…

一份贪心算法区间调度问题解法攻略,拿走不谢

作者 | labuladong来源 | labuladong&#xff08;ID:labuladong&#xff09;【导读】什么是贪心算法呢&#xff1f;贪心算法可以认为是动态规划算法的一个特例&#xff0c;相比动态规划&#xff0c;使用贪心算法需要满足更多的条件&#xff08;贪心选择性质&#xff09;&#x…

css:z-index

针对position: absolute;解决position:relative;z-index固定定位层级显示问题转载于:https://blog.51cto.com/13507333/2352775

折半查找函数(from 《The C Programming Language》)

该函数用于判定已排序的数组array中是否存在某个特定的值value。这里假定数组元素以升序排列&#xff0c;如果数组array中包含value&#xff0c;则函数返回value在array中的位置&#xff08;介于0~n-1之间的一个整数&#xff09;&#xff1b;否则&#xff0c;该函数返回-1。 在…

C++中的explicit关键字介绍

C中的关键字explicit主要是用来修饰类的构造函数&#xff0c;被修饰的构造函数的类&#xff0c;不能发生相应的隐式类型转换&#xff0c;只能以显示的方式进行类型转换。类构造函数默认情况下声明为隐式的即implicit。隐式转换即是可以由单个实参来调用的构造函数定义了一个从形…

Redis的集群模式

集群 即使使用哨兵&#xff0c;此时的Redis集群的每个数据库依然存有集群中的所有数据&#xff0c;从而导致集群的总数据存储量受限于可用存储内存最小的数据库节点&#xff0c;形成木桶效应。由于Redis中的所有数据都是基于内存存储&#xff0c;这一问题就尤为突出了尤其是当使…

刚上线就报名2000人!8位大牛免费讲座,再不报名就满额了!

今年是CSDN的第20年&#xff0c;我们已经不再满足解决你的技术问题&#xff0c;还要帮你解决人生大事&#xff01;为了让你飞黄腾达&#xff0c;我们特别邀请到了8位大牛老师进行直播&#xff0c;他们已经实现了成为技术总监、创业、财富自由的梦想&#xff0c;这场直播&#x…

排序算法之插入排序

插入排序一般分为直接插入排序和二分插入排序。一、直接插入排序&#xff1a;直接插入排序又可以分为前插和后插&#xff0c;不过虽然是这样分&#xff0c;只是寻找地点的方向不一样而已。“前插”就是从头开始找合适的位置&#xff0c;“后插”就是从后面开始找合适的位置。直…

C++中#error/assert/static_assert的区别及使用

C 语言支持可帮助您调试应用程序的三个错误处理机制&#xff1a;#error 指令、static_assert 关键字和 assert (CRT) 宏。所有的三种机制都会发出错误消息。#error可看做预编译期断言&#xff0c;甚至都算不上断言&#xff0c;仅仅能在预编译时显示一个错误信息&#xff0c;它能…

读完ACL 2019录取的30篇知识图谱论文,我发现了这5点趋势

作者 | Michael Galkin译者 | Freesia编辑 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】近年来&#xff0c;自然语言处理领域中广泛应用的知识图谱&#xff08;KGs&#xff09;正在不断地吸引人们的目光&#xff0c;此次 ACL 2019 中的有关于知识图…

力扣(LeetCode)933

题目地址&#xff1a;https://leetcode-cn.com/probl...题目描述&#xff1a;写一个 RecentCounter 类来计算最近的请求。 它只有一个方法&#xff1a;ping(int t)&#xff0c;其中 t 代表以毫秒为单位的某个时间。 返回从 3000 毫秒前到现在的 ping 数。 任何处于 [t - 3000, …

2013年10月1日C#随机数

最近开始接触C跟C#&#xff0c;总是有人说女生本来就不适合做程序&#xff0c;就连今天都听到有人这样跟我讲&#xff0c;不过呢没有关系&#xff0c;我相信男生不一定比女生厉害多少&#xff0c;就好像我身边就有一位男生就总是觉得我的程序比他好一点就是理所当然的&#xff…

C/C++中inline/static inline/extern inline的区别及使用

引入内联函数的目的是为了解决程序中函数调用的效率问题&#xff0c;也是用内联函数取代带参宏定义&#xff08;函数传参比宏更加方便易用&#xff09;inline关键字用来定义一个类的内联函数。在类体中和类体外定义成员函数是有区别的&#xff1a;在类体中定义的成员函数为内联…

RISC-V架构上的Debian和Fedora现状

RISC-V仍然是开源/Linux用户非常感兴趣的&#xff0c;因为它是免版税且完全开放的CPU架构。部分原因是由于缺乏经济实惠的RISC-V硬件&#xff0c;限制了开发人员在这种架构上的更多工作&#xff0c;Linux发行版支持的RISC-V状态各不相同&#xff0c;但近年来至少有所改善。在上…

字节跳动李航:自学机器学习,研究AI三十载,他说AI发展或进入平缓期

作者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】一阵凉风吹过人工智能&#xff0c;让这个曾是燥热的领域逐渐冷却下来&#xff0c;留下的是扎实地在做研究的人、机构、企业。先后在 NEC 公司中央研究所、微软亚洲研究院、华为诺亚方舟实验室从事和…

PC上安装MAC X Lion

PC上安装MACXLion网上关于如何在PC下安装MAC的文章已近不少了&#xff0c;但对于一些初学者在实践当中会遇到各种问题&#xff0c;以下视频资料为大家展示两种虚拟机安装MacOS。1.VmwareWorkstation在虚拟机中安装首先将插件装好&#xff08;在远景上下载&#xff09;&#xff…

C++中static_cast/const_cast/dynamic_cast/reinterpret_cast的区别和使用

C风格的强制转换较简单&#xff0c;如将float a转换为int b&#xff0c;则可以这样&#xff1a;b (int)a&#xff0c;或者bint(a)。 C类型转换分为隐式类型转换和显示类型转换。 隐式类型转换又称为标准转换&#xff0c;包括以下几种情况&#xff1a; (1)、算术转换&#x…