opencv调用微信的二维码识别引擎

导读

用过二维码识别的小伙伴们都知道,微信的二维码识别确实要比开源的二维码识别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

评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修炼之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值