qrencode生成二维码\微信开源算法识别opencv-contrib(一)

2023-11-12

最近需要开发一个二维码识别的应用,调研了几个开源算法库,opencv、quirc、zxing、zbar和微信开源的基于深度学习的识别算法,最终选定了微信开源的算法,毕竟又好又快

二维码

QR(Quick Response)二维码,即快速响应二维码,是Denso Wave公司在1994年9月研制出的一种矩阵二维码。QR二维码是矩阵式二维码的一种,其深浅颜色的小模块沿垂直和水平两个方向分布,代表着编码后的数据。
在这里插入图片描述

位置探测图形

标准的QR二维码中一般包含3个形状相同的位置探测图形,为了快速定位,这3个图形被设计为具有相同的深浅模块,比例为1:1:3:1:1,如下图所示。

在这里插入图片描述

QR二维码中其他部分的深浅颜色宽度比例呈“回”字型的可能性很小,并且该特性使得不论扫描方向如何,只需其满足该比例,即可在扭曲变形的情况下快速定位。

定位图形

QR二维码中存在两个定位图形,其中水平的定位图形为一行黑白两色相互交替的模块单元,同样,垂直定位图形也是一列颜色交替的模块单元。定位图形的起始和结束模块一定是黑色模块。

校正图形

QR二维码中,毎个校正图形也是一个“回”字形状,由3个不同颜色不同尺寸的正方形依次重叠而成,它们分别为5×5的深色模块,3×3的浅色模块和1个深色模块。同时在垂直和水平方向上检测到1:1:1:1:1的宽度流,即确定为一个校正图形。太小的版本中没有校正图形

编码区域

黑色模块代表数据上的0,白色模块代表1.编码区域用于存储数据信息、版本信息、纠错级别信息和格式信息

空白区

围绕在二维码边缘外侧的白色区域,不存储信息,用于区分其他背景模型,减少外部干扰。
QRencode库并没有自动生成边缘外侧的空白区,也没有相关的接口,需要自己在生成图形的代码中添加。

优点

● 存储容量大,可容纳7089个数字或1817个汉字
● 编码字符类型多。条形码只能编码数字和26个英文字母,二维码可编码汉字
● 具有很强的纠错功能。有4个纠错等级,最高的纠错等级可纠正出30%的错误数据,可将LOGO放入图片中间
● 译码可靠性高,识别快速。能够旋转校正,畸变也能识别出

常见的识别二维码的算法库

opencv

opencv自带的识别精度较差,速度还可以。只需要他搭配其他算法库使用。
OpenCV能够加快读取条形码和二维码的过程,包括从硬盘加载图像,从视频流中抓取新的帧,并进行处理。 等我们获取图像或视频帧后,就可以将其传入Python中专用的条形码解码库,比如Zbar。
OpenCV4 二维码定位识别源码解析

zxing

谷歌开源的一个框架zxing-github,对win下的python不是很友好,出现莫名其妙的错误
刚开始用的的时候,会出现一个报错信息:zxing.BarCodeReaderException: ('Could not execute specified Java binary', 'java'), 是缺少java的环境
python识别二维码(3.6环境下的zxing包进行识别并解决中文报错问题)
Zxing Zbar 结合真正的极速秒扫 手动编译zxing库

碰到的奇怪bug

出现 “java”不是内部或外部命令,也不是可运行程序或批处理文件的问题 添加java的环境变量
到最后所有的关键都在于没装Java,而ZXing是用java写的,python只是负责调用

Quirc

Quirc-Github Quirc的特点就是:简单,方便移植,识别准确率高 但是python上的库在12年就停止更新了,无法使用

wechat

使用 OpenCV + 微信二维码引擎实现二维码识别from掘金
微信开源了其二维码的解码功能,并贡献给 OpenCV 社区。其开源的 wechat_qrcode 项目被收录到 OpenCV contrib 项目中。从 OpenCV 4.5.2 版本开始,就可以直接使用。
该项目 github 地址
模型文件的地址
微信的扫码引擎,很早就支持了远距离二维码检测、自动调焦定位、多码检测识别等功能,它是基于 CNN 的二维码检测。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qrencode生成二维码\微信开源算法识别opencv-contrib(一) 的相关文章

  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • OpenCV 2.2 和多 CPU - opencv_haartraining.exe 是多线程的吗?

    我在 VS 2010 上构建了 OpenCV 2 2 启用了 TBB 3 支持 我确保所有项目都有正确的 tbb lib 目录 并将 tbb lib 列为依赖项 通过隐藏 tbb dll 进行验证 果然 haartraining exe 抱
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • 如何将多行文本插入到框架/图像中

    我使用 C 和 OpenCV 创建了一个框架 并想在其中插入几行文本 使用以下代码 putText frame My text here cvPoint 30 30 FONT HERSHEY COMPLEX SMALL 0 8 cvScal
  • iphone opencv - 模板匹配

    我已经在我的 iphone 项目中实现了这个 OpenCV 构建 http aptogo co uk 2011 09 opencv framework for ios http aptogo co uk 2011 09 opencv fra
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • 在骨架图像中查找线 OpenCV python

    我有以下图片 我想找到一些线来进行一些计算 平均长度等 我尝试使用HoughLinesP 但它找不到线 我能怎么做 这是我的代码 sk skeleton mask rows cols sk shape imgOut np zeros row
  • Opencv 2.4.2 代码讲解-人脸识别

    我参考OpenCV提供的文档制作了一个人脸识别程序 可以识别多个人脸 并且工作正常 在文档中 他们制作了省略号来突出显示脸部 我不明白的是他们如何计算椭圆的中心 他们的计算如下 for int i 0 i lt faces size i P
  • 提取二值图像中的最中心区域

    我正在处理二进制图像 之前使用此代码来查找二进制图像中的最大区域 Use the hue value to convert to binary thresh 20 thresh thresh img cv2 threshold h thre
  • 如何在python 3.8中安装opencv-python

    我在 pycharm 中安装 opencv python 时遇到问题 打开 pycharm 后 我单击 设置 然后单击 项目解释器 单击 并搜索正确的模块 我开始安装 但失败了 Could not find a version that s
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使
  • OpenCV SVM 给出奇怪的预测结果

    我对 OpenCV 和支持向量机都很陌生 我想使用 SVM 训练具有两个标签的数据集 然后预测给定集合的标签 我当前的集合包含大约 600 行 具有相等的类分布 1 为 300 行 1 为 300 行 包含 34 列 这是我当前用于设置 O
  • HTC One M8 - 使用第二个后置摄像头

    我有一台 HTC One M8 设备 它有 2 个后置摄像头和一个额外的前置摄像头 我的问题是尝试访问第二个后置摄像头 我已经成功制作了一个应用程序 它同时运行 2 个摄像头 1 个前置摄像头和 1 个后置摄像头 但问题是我无法访问第二个后
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • OpenCV InRange 参数

    我在 Android 上使用 OpenCV 来实时查找特定颜色的圆圈 我的第一步是仅保留与我正在寻找的定义颜色相对应的像素 在本例中为红色或绿色 示例图像 https i stack imgur com CIozU jpg 为此 我正在使用
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • OpenCV 2.4.3rc 和 CUDA 4.2:“OpenCV 错误:没有 GPU 支持”

    我在这张专辑中上传了几张截图 https i stack imgur com TELST jpg https i stack imgur com TELST jpg 我正在尝试在 Visual Studio 2008 中的 OpenCV 中
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di

随机推荐

  • 神经网络学习小记录46——Densenet模型的复现详解

    神经网络学习小记录46 Densenet模型的复现详解 学习前言 什么是Densenet 代码下载 Densenet 1 Densenet的整体结构 2 DenseBlock 3 Transition Layer 网络实现代码 学习前言 据
  • int和string互转

    int gt String 1 String s String valueOf i 直接使用String类的静态方法 只产生一个对象 用的较多 2 String s Integer toString i 先将int转换成Integer型 然
  • vsprintf用法解析

    vsprintf用法解析 原创 swif N F 最后发布于2017 12 04 09 43 14 阅读数 1703 收藏 发布于2017 12 04 09 43 14 分类专栏 C C 知识点总结 字符串 版权声明 本文为
  • webpack+vue-cli2修改部署后的请求路径

    在vue日常开发中 本地环境和线上环境的请求接口不同 如果频繁切换 显得不是那么优雅哈 所以 通过webpack的配置 实现不同环境请求不同地址 以下有三种方式 一种是写死地址 打包之后不可修改 另一种是 可根据打包生成的json文件 自由
  • xapofx1_5.dll怎么安装

    遇到因为xapofx1 5 dll文件丢失而无法正常运行软件或游戏程序的朋友们不用着急了 根据小编整理的这篇教程文章 将dll文件放在操作系统 system32 文件夹的合适位置 便能解决这一问题 缺少哪一项dll 在运行软件时都将有窗口提
  • 华为OD机试真题- 阿里巴巴找黄金宝箱(II)-2023年OD统一考试(B卷)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有箱子中藏有金币的数量 从金币数量中选出一个数字集合 并销毁贴有这些数字的每个箱子 如果能销毁一半及以上的箱子 则返回这
  • 服务器响应延时,服务器响应延时

    服务器响应延时 内容精选 换一换 一个响应消息通常由三部分组成 状态行 响应报头 响应正文 响应消息格式如表1所示 HTTP Version Status Code Reason Phrase CRLF其中 HTTP Version表示服务
  • java随机生成指定日期到现在的随机日期

    import java util Calendar import java util Random import java util Scanner public class Random 02 public static void mai
  • 逆矩阵的计算方法

    求出逆矩阵的2种手算方法 待定系数法 伴随矩阵法 待定系数法求逆矩阵 首先 我们来看如何使用待定系数法 求矩阵的逆 举例 矩阵A 1 2 1 3 A 1 12 3 A begin vmatrix 1 2 1 3 end vmatrix 假设
  • 童年回忆——捕鱼达人(内含源码inscode一键运行)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • 利用Vulnhub复现漏洞 - Joomla 3.4.5 反序列化漏洞(CVE-2015-8562)

    Joomla 3 4 5 反序列化漏洞 CVE 2015 8562 Vulnhub官方复现教程 漏洞原理 复现过程 启动环境 漏洞复现 成功情况 并未成功 POC Vulnhub官方复现教程 https vulhub org environ
  • python一维时间序列平滑:移动平均、指数平滑、开尔曼滤波等

    文章目录 1 移动平均 2 指数平滑 3 开尔曼滤波 记录处理时间序列时需要用到的数据平滑方式 参考博客 移动平均 指数平滑 三阶指数平滑 一阶指数平滑 1 移动平均 import numpy as np import pandas as
  • ChatGPT对未来教育的影响:或将成为奇点

    ChatGPT横空出世 不难想象 不久的将来 公司经理只要按一下按钮或者对语音机器人发个指令 就可以将一个粗略的文档转换成优雅的演示文稿 而无需劳烦公司文秘 这无疑颠覆了我们早已熟稔于心的工作场景 不论是这一次人们对ChatGPT的担忧 还
  • refind linux内核参数,Mac本Win10系统通过rEFInd启用CPU虚拟化及升级WSL2

    为了体验windows 10 2004版本的新功能 主要是想升级linux子系统到wsl2 倒腾了一下自己的电脑 也发现了些好玩的东西 这里记录一下 因为自己使用的是一台mac笔记本 但是使用苹果系统的时间不是特别多 特别是一些常用的软件
  • 以后就在这里写技术学习笔记啦

    以后就在这里写技术学习笔记啦 想用印象笔记 但是觉得还是来这里写比较好 在这里写 不好的地方 接受别人的批评
  • Python,利用openpyxl模块将数据写入excel时报错:TypeError:'module' object is not callable

    我在写 数据导出到excel中 时 报了这个错 就是这个错 我翻遍了全网 没找到解决方法 各大博主 要么教我如何正确使用import导入 要么告诉我可能引入模块名重复之类的 都没有解决我的问题 哭唧唧 于是 望穿了我的代码 终于发现了一个很
  • java db2 jdbc_今天搞清楚了java连接db2的问题,jdbc的解决方案

    java连接db2的问题 大家已经都讨论过了 看到论坛里又有坛友提问 我也就自己测试总结出来 共享下 JavaSoft将JDBC驱动程序细分为四大类 就是大家经常讲的type1 或者type4等 1 JDBC ODBC Bridge是一项瘦
  • nuxt-link点击无反应

    背景 比如以下2个地址 描述 路由 页面 用户列表页面 user pages user user vue 用户详情页面 user idxx pages user id vue 当我们停留在用户详情页面时 想要回退到用户列表页面页 在用户详情
  • Idea编译项目报错Error:Kotlin: Module was compiled with an incompatible version of Kotlin.

    错误信息 Error Kotlin Module was compiled with an incompatible version of Kotlin The binary version of its metadata is 1 5 1
  • qrencode生成二维码\微信开源算法识别opencv-contrib(一)

    最近需要开发一个二维码识别的应用 调研了几个开源算法库 opencv quirc zxing zbar和微信开源的基于深度学习的识别算法 最终选定了微信开源的算法 毕竟又好又快 二维码 QR Quick Response 二维码 即快速响应