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

使用Java语言调用OpenCV库实现微信扫描二维码引擎功能的步骤如下: 首先,确保已经安装了Java开发环境和OpenCV库。 1. 导入所需的Java库和OpenCV库: 在Java项目中,我们需要导入相应的Java库和OpenCV库。可以使用构建工具如Maven或Gradle来导入这些库。 2. 加载OpenCV库: 在Java代码中,需要调用OpenCV库的功能之前,需要先加载OpenCV库。可以使用`System.loadLibrary()`方法来加载OpenCV核心库。 3. 打开摄像头并捕获图像: 在Java中,可以使用OpenCV的`VideoCapture`类来打开摄像头,并通过`read()`方法捕获图像。 4. 对捕获到的图像进行处理: 使用OpenCV提供的图像处理功能,可以对捕获到的图像进行二维码识别的预处理,如去噪、图像增强等。 5. 进行二维码识别: 使用OpenCV提供的二维码识别功能,可以对预处理后的图像进行二维码识别。可以调用相应的方法来进行识别,并获取二维码的信息。 6. 使用微信API进行扫码确认: 如果需要将二维码的信息传递到微信进行扫码确认,可以调用微信提供的API,将识别到的二维码信息传递给微信进行验证。 7. 处理识别结果: 根据微信返回的结果,可以进行相应的处理。例如,可以根据识别结果进行跳转、处理业务逻辑等。 以上是使用Java和OpenCV调用微信扫描二维码引擎的基本步骤。通过使用OpenCV库的图像处理功能和二维码识别功能,结合微信提供的API,可以实现二维码的扫描和处理。
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

修炼之路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值