首页
学习
活动
专区
圈层
工具
发布

基于腾讯开源的二维码识别技术,通过OpenCV的WeChatQRCode模块实现复杂场景下的二维码识别。

以下文章来源于ALL程序猿,作者ALL程序猿

本文旨在分享编程、IT和爬虫相关知识,仅供学习和参考之用。读者在使用本文提供的信息和代码时,应该在合法范围内遵守相关法律法规,并对其行为负全部责任。作者和本公众号力求提供准确和可靠的信息,但不对信息的准确性、完整性、实时性或适用性作出任何明示或暗示的陈述或保证。阅读者在使用本文提供的代码和技术时,应该谨慎行事,并在实际应用中进行适当的测试和验证。对于因使用本文信息而引起的任何损失,作者和本公众号概不负责。感谢您的理解与支持。文章如有不当可联系删除!

  经常需要识别二维码,例如用于文件录入、药品追溯、发票校验等场景。一开始,尝试使用pyzbar,但测试后发现其对中文二维码的支持非常有限——要么乱码,要么识别失败,体验极差。

为此,开始寻找更强大的替代方案,最终选定了由微信团队贡献给 OpenCV 的wechat_qrcode模块。它结合了二维码检测与超分辨率增强模型,识别率高,抗干扰能力强,尤其适合复杂背景下的二维码识别任务。

一、环境依赖

Python 3.x

OpenCV ≥ 4.5(需包含wechat_qrcode模块)

安装命令如下:

pip install opencv-contrib-python

注意:必须安装opencv-contrib-python,而不是opencv-python,因为wechat_qrcode模块仅包含在 contrib 包中。

二、模型文件准备

要启用WeChatQRCode模块,需要下载以下四个模型文件:

detect.prototxt

detect.caffemodel

sr.prototxt

sr.caffemodel

请前往微信官方 GitHub 仓库下载,并将其放置于你的脚本目录中:

下载地址:https://github.com/WeChatCV/opencv_3rdparty/tree/wechat_qrcode

三、二维码识别核心代码

import cv2

def detect_qrcode(image_path):

  # 初始化 WeChat QRCode 检测器

  try:

      detector = cv2.wechat_qrcode_WeChatQRCode(

          "detect.prototxt",

          "detect.caffemodel",

          "sr.prototxt",

          "sr.caffemodel"

      )

  except Exception as e:

      print("初始化 WeChatQRCode 失败")

      print("请确认模型文件已正确放置到脚本目录中")

      return []

  # 读取图像并进行亮度与对比度增强

  img = cv2.imread(image_path)

  if img isNone:

      print(f"无法读取图片: {image_path}")

      return []

  img = cv2.convertScaleAbs(img, alpha=1.2, beta=40)

  # 检测并解码二维码

  results, _ = detector.detectAndDecode(img)

  return [res for res in results if res]

img = cv2.convertScaleAbs(img, alpha=1.2, beta=40)

四、运行示例

if __name__ == "__main__":

  image_path = "your_image.jpg"  # 替换为你的图片路径

  qrcodes = detect_qrcode(image_path)

  if qrcodes:

      print("识别到的二维码内容:")

      for i, content in enumerate(qrcodes, 1):

          print(f"{i}. {content}")

  else:

      print("未识别到二维码")

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OUPeKcyUJXQlWgE9Ro5dsADQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券