13

爱笑的小姐姐 · 2021年05月18日

树莓派搭建二维码扫描设备

我是来自山区、朴实、不偷电瓶的AI算法工程师阿chai,给大家分享人工智能、自动驾驶、机器人、3D感知相关的知识

腾讯开源了微信二维码扫描的算法,今天阿chai介绍一下如何将树莓派搭建我们自己的二维码扫描设备。

算法介绍

1. 基于CNN的二维码检测

早在2016年,微信扫码引擎在业内率先支持远距离二维码检测、自动调焦定位、多码检测识别。然而,传统方法需要牺牲40%以上的性能来支持多码的检测与识别。伴随着深度学习技术的成熟和移动端计算能力的提升,微信扫码引擎引入基于CNN的二维码检测器解决上述问题。

image.png

图片

以SSD框架为基础,构造了短小精干的二维码检测器,采用残差连接、深度卷积、空洞卷积、卷积投影等技术进行了针对性的优化。整个模型大小仅943KB,在iPhone7单CPU的推理时间仅需20ms,很好地满足“低延时、小体积、高召回”的业务需求。

2. 基于CNN的二维码增强 “大图小码”是远距扫码和长按识码经常面临的难点,二维码增强技术可以让小码更加清晰。2014年,微信率先在对话中上线“识别图中二维码”能力,离不开增强技术的加持。在长按识别的场景中,二维码图像经过用户的裁剪、压缩、转发,图像质量严重受损,分辨率急剧下降,边缘变得模糊不清,这给扫码引擎的识别带来了极大的挑战。

传统图像增强算法很难完美地解决以上问题,因此微信扫码引擎率先在识别流程中引入了基于深度学习的超分辨率技术。在网络结构上,密集连接、深度卷积、反向卷积、残差学习等技术改善模型的性能;在目标函数上,针对二维码强边缘和二值化的特点,结合L2/L1损失、边界加权、二值约束设计了针对二维码的目标函数。经过精心的调优,超分辨率模型大小仅23KB,在iPhone7(A10)单CPU的推理时间仅需6ms(100x100超分200x200),完全满足移动端的应用需求。

image.png

图片

3. 更鲁棒的定位点检测

二维码在识别的时候,通常需要根据扫描像素行/列匹配对应比例来寻找定位点。

image.png
图片

在定位点检测上,我们提出面积法的定位点检测方法,相比于传统扫描线方法更为鲁棒和高效,有效地避免了误召回和漏召回;在定位点匹配上,特征聚类方法使得扫码引擎可以高效和准确地匹配多个定位点;在图像二值化上,引入多种更为鲁棒的二值化方法,有效地提高解码的成功率。

实验平台

image.png

image.png

安装opencv

1.下载opencv已经opencv-contrib:

git clone https://github.com/opencv/opencv.gitgit clone https://github.com/opencv/opencv_contrib.git

下载慢可以使用sftp的put命令从本地上传到树莓派。

2.安装相关依赖:

sudo apt-get install  devscripts debhelper cmake libgtkmm-3.0-dev libarchive-dev libcurl4-openssl-dev intltoolsudo apt-get install build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk2.0-dev libgtk-3-dev libatlas-base-dev libblas-dev libeigen{2,3}-dev liblapack-dev gfortran

3.编译

cd opencv-mastermkdir build && cd buildcmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=/usr/local \-D OPENCV_GENERATE_PKGCONFIG=ON \-D INSTALL_PYTHON_EXAMPLES=ON \-D INSTALL_C_EXAMPLES=ON \-D OPENCV_ENABLE_NONFREE=ON \-D OPENCV_EXTRA_MODULES_PATH= 你的路径/opencv_contrib/modules \-D BUILD_EXAMPLES=ON ..make -j4sudo make install

运行demo

1.下载本项目:

git clone https://github.com/zihan987/WeChat_QRCode_OpenCV.git

2.编译:

算法模型文件在models文件夹中,需要在demo中替换路径。

cd WeChat_QRCode_OpenCVmkdir build && cd buildcmake ..build

3.测试

命令如下:

./demo [input_path] [output_path]

举例(需要自己选择路径):

./demo ../images/achai.jpeg ../images/res/res.jpg

结果如下:

WeChat_QRCode time:183.902msNumber_1: http://weixin.qq.com/r/5zvUzBnEZUQarV2v9271

image.png

本文转自:阿chai带你学AI
作者:阿chai

更多嵌入式AI技术相关内容请关注嵌入式AI专栏。

推荐阅读
关注数
16518
内容数
1230
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息