导读

用过二维码识别的小伙伴们都知道,微信的二维码识别确实要比开源的二维码识别zxingzbar要强不少,zxing和zbar对小的二维码以及模糊的二维码基本上是识别不出来的,有时候一张包含二维码的图片可能你缩放一下就可能导致识别不出来,而微信的二维码识别不仅可以远距离识别还可以识别各个拍照角度以及模糊的二维码

腾讯的WeChatCV团队最近开源了微信的二维码识别模型,并将这个功能添加到了opencv_contrib中,只需要简单的三行代码即可完成调用,这篇文章就来教大家如何使用

微信的二维码识别引擎解析

微信的二维码识别能力如此强劲,主要依赖两个模块,二维码检测二维码增强

  • 二维码检测

随着深度学习的发展,以及移动端设备性能的提升,给深度学习的应用提供了更好的平台。微信的二维码检测基于SSD目标检测框架来实现的,以便支持小的二维码检测、模糊的二维码检测。

  • 二维码增强

    二维码增强是依赖于图像超分辨率实现,将小的和模糊的二维码处理成清晰的二维码,以便于后面更好地识别二维码。

微信二维码识别引擎的使用

WeChatCV团队已经将开源的二维码识别功能嵌入到opencv_contrib中,目前opencv官方提供的release版本还没有嵌入微信二维码识别功能,所以大家需要将自己重新编译OpenCV,我有编译好的基于Windows的库,有需要的可以私信我。

opencv git地址:https://github.com/opencv/opencv

  • OpenCV的编译

git上提供了比较详细的编译介绍,大家可以参考上面的步骤自己进行编译,Windows需要借助于cmakevs或者mingw64来进行编译,详细步骤可以百度,不过需要注意的时候,在添加opencv_contrib时不要勾选OPENCV_ENABLE_NONFREE否则后面可能会出现编译错误的问题。

编译opencv的时候可以勾选BUILD_OPENCV_world这样编译出来的库就只会有一个opencv_world451.lib,如果你不需要集成,就不用去勾选它默认是不勾选的。

注意:这个编译只是编译了c++版本的库,如果你想编译Python版本的,需要改opencv-python的代码。

  • 环境配置

编译好opencv之后,打开vs,新建一个c++项目,然后配置好OpenCV的环境即可。

  • 测试代码
#include <iostream>
#include <string>
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/wechat_qrcode.hpp>using namespace cv;
using namespace std;int main()
{const std::string detector_prototxt_path = "D:\\opencv\\source_code\\build_vs2019_world\\downloads\\wechat_qrcode\\detect.prototxt";const std::string detector_caffe_model_path = "D:\\opencv\\source_code\\build_vs2019_world\\downloads\\wechat_qrcode\\detect.caffemodel";const std::string super_resolution_prototxt_path = "D:\\opencv\\source_code\\build_vs2019_world\\downloads\\wechat_qrcode\\sr.prototxt";const std::string super_resolution_caffe_model_path = "D:\\opencv\\source_code\\build_vs2019_world\\downloads\\wechat_qrcode\\sr.caffemodel";wechat_qrcode::WeChatQRCode weChatQR;weChatQR = wechat_qrcode::WeChatQRCode(detector_prototxt_path,detector_caffe_model_path,super_resolution_prototxt_path,super_resolution_caffe_model_path);Mat img;img = imread("../imgs/code.png");if (!img.empty()) {vector<Mat> qrcode_box;vector<std::string> recon_res = weChatQR.detectAndDecode(img, qrcode_box);for (int i = 0; i < recon_res.size(); i++) {int min_x = (int)qrcode_box[i].at<float>(0);int min_y = (int)qrcode_box[i].at<float>(1);int max_x = (int)qrcode_box[i].at<float>(4);int max_y = (int)qrcode_box[i].at<float>(5);cv::Rect box = cv::Rect(min_x, min_y, max_x - min_x, max_y - min_y);cv::rectangle(img, box, cv::Scalar(0, 255, 0), 2);cv::putText(img,recon_res[i],cv::Point(min_x,min_y-10), cv::FONT_HERSHEY_COMPLEX,1, cv::Scalar(0,0,255),2,2);}cv::imshow("draw_qrcode", img);cv::waitKey(0);}}

资源下载:我已经上传到CSDN上面,大家可以去CSDN资源下载

模型文件下载地址:https://github.com/WeChatCV/opencv_3rdparty

opencv调用微信的二维码识别引擎相关推荐

  1. Java使用opencv调用微信扫描二维码引擎,附带windows和linux需要的动态库文件

    前言 最近公司项目有一个需求,要用二维码传递数据.于是使用了zxing生成和解析二维码,但是zxing扫描二维码原图还可以,一旦扫描用户使用手机拍摄的二维码,识别率急剧下降.尝试了对拍摄的照片进行降噪 ...

  2. js调用微信利用二维码扫码登录

    js调用微信利用二维码扫码登录 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐 ...

  3. 基于ZBar,OpenCV和Python的二维码识别

    0 前言 今天分享一个之前做过的二维码识别,参考:https://www.pyimagesearch.com/2018/05/21/an-opencv-barcode-and-qr-code-scan ...

  4. OpenCV(项目)二维码识别(二维码、条形码)

    目录 过程 1.获取图片中的二维码信息 2.获取视频中的二维码信息 3.检测出二维码框 4.显示数据 5.添加数据,判断二维码是否授权 5-1:.添加数据 5-2.读取文件信息,放入数组 5-3.判断 ...

  5. 【毕业设计】python+opencv+深度学习实现二维码识别

    文章目录 0 前言 2 二维码基础概念 2.1 二维码介绍 2.2 QRCode 2.3 QRCode 特点 3 机器视觉二维码识别技术 3.1 二维码的识别流程 3.2 二维码定位 3.3 常用的扫 ...

  6. 媲美微信的二维码识别库

    查看全文 http://www.taodudu.cc/news/show-2807478.html 相关文章: 无线视频监控系统设计 OpenMAX编程-音视频等组件介绍 通信教程 | 概述并行与串行 ...

  7. python微信群二维码识别,用python中的itchat框架 筛选出 指定某个微信群中 是否还有你自...

    用python中的itchat框架 筛选出 指定某个微信群中 是否还有你自 用python中的itchat框架 筛选出 指定某个微信群中 是否还有你自己的好友 并列出来 当你新加入一个微信群,比如一个 ...

  8. 微信 图片二维码识别不了的问题

    img{ padding:200px 0 0 200px !important;margin:-200px 0 0 -200px !important;position: relative;z-ind ...

  9. Jetson nano 摄像头二维码识别 Opencv zbar QT

    环境以及前言 环境 jetson nano Linux ubuntu 18.4 QT版本 QT5.98 摄像头 Csi摄像头 Opencv Jetson nano 自带的-.- 应该是4.1?不太清楚 ...

最新文章

  1. 怎么请假显智商高?评论区亮了! | 每日趣闻
  2. yum命令安装jdk
  3. exp ORA-01455: converting column overflows integer datatype
  4. python读文件路径-在Python中按路径读取数据文件的几种方式
  5. SVN用户验证,调错
  6. ACM如何产生各种随机数
  7. linux源码编译rpm,Linux的RPM和源码包(CentOS)
  8. 华为鸿蒙2.0的意义,鸿蒙华为研发了多少年_华为鸿蒙意义
  9. 使用C++对TINY+语言进行词法分析、语法分析、语义分析和中间代码生成
  10. String为null
  11. 《C++ Primer》第一章的 Sales_item.h头文件源码
  12. maven将第三方依赖_如何将商业第三方文物整合到您的Maven版本中
  13. 【Flink】Flink 如何 保证 同一个key对应的state是一个呢?KeyedProcessFunction
  14. 如何反编译dll文件
  15. 一台电脑群控上百台手机是什么样?
  16. 使用usb有线网卡u-boot无法ping通虚拟机
  17. Delphi FireDAC SQLite “database is locked“ 解决办法
  18. cab和ocx什么区别_CAB的完整形式是什么?
  19. iphone 越狱需要安装的包
  20. 【论文阅读】提升的自动作文评分通过Prompt预测和匹配

热门文章

  1. 小马哥---高仿苹果6s 主板型号 T618 9900真实6571芯片刷机拆机主板多图展示
  2. Windows 2012 安装windows server backup时发生错误0x80070422 的解决方法
  3. QVector基本用法
  4. python进行聚类分析:鸢尾花(iris)代码
  5. 基于openfire+spark+smack
  6. 幻影追逐者服务器维护,幻影追逐者应用宝版
  7. SQL 日期格式转换(转)
  8. linux上mkfs代码,Linux mkfs使用
  9. 矩阵转置(transpose、T)
  10. 用GreycShop插件将照片制作为油画效果