You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求Python中替代qrtools的可靠开源二维码读取库

替代qrtools的可靠Python二维码读取库推荐

我完全理解你用qrtools时遇到的糟心情况——这个库确实在很多场景下都不太靠谱,只能识别一些特别清晰、标准的二维码。下面几个开源的Python二维码读取库,识别可靠性和适用性都强很多,给你详细说说:

1. Pyzbar

这是我日常开发里用得最多的库,它是基于ZBar这个成熟条码识别引擎的Python绑定,对各种常见格式的二维码(包括QR Code、Data Matrix等)识别率很高,就算是倾斜、轻微模糊或者有小遮挡的二维码,也能大概率识别出来。

安装命令:

pip install pyzbar opencv-python

(这里搭配opencv是为了方便处理图像,你也可以用PIL/Pillow替代)

简单使用示例(用PIL):

from pyzbar.pyzbar import decode
from PIL import Image

# 读取本地二维码图片
img = Image.open("your_qr_image.png")
qr_results = decode(img)

if qr_results:
    # 取出第一个识别结果,解码为字符串
    print("识别到的内容:", qr_results[0].data.decode("utf-8"))
else:
    print("没找到二维码哦")

如果用OpenCV处理图像(适合实时摄像头扫码场景):

import cv2
from pyzbar.pyzbar import decode

img = cv2.imread("your_qr_image.png")
# 转灰度图提升识别效率
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
qr_results = decode(gray_img)

for qr in qr_results:
    print(qr.data.decode("utf-8"))

2. OpenCV内置的QRCodeDetector

如果你已经在项目里用了OpenCV,那这个模块简直是完美选择——从OpenCV 3.4.0版本开始,官方内置了二维码检测功能,不需要额外安装其他依赖,对标准、清晰的二维码识别速度极快,非常适合实时扫码的场景(比如监控摄像头、手机扫码)。

安装命令(如果还没装OpenCV):

pip install opencv-python

使用示例:

import cv2

# 初始化二维码检测器
qr_detector = cv2.QRCodeDetector()
img = cv2.imread("your_qr_image.png")

# detectAndDecode会返回三个值:解码内容、二维码顶点坐标、校正后的二维码图像
qr_content, bbox, _ = qr_detector.detectAndDecode(img)

if qr_content:
    print("识别到的内容:", qr_content)
else:
    print("未识别到二维码")

3. ZXingCPP-Python

这个是ZXing-C++(一款全球广泛使用的跨平台条码识别库)的纯Python绑定,不需要依赖Java环境,支持的条码格式超级全,对严重变形、低对比度或者有部分遮挡的二维码处理能力很强,适合复杂场景下的扫码需求。

安装命令:

pip install zxingcpp

使用示例:

import zxingcpp

# 直接读取图片文件识别二维码
qr_result = zxingcpp.read_barcode("your_qr_image.png")
if qr_result.is_valid():
    print("识别到的内容:", qr_result.text)
else:
    print("未识别到有效的二维码")

额外小技巧:提升低质量二维码的识别率

如果你的二维码图片质量很差(比如严重模糊、扭曲),可以先对图像做预处理,比如用OpenCV进行灰度化、降噪、阈值调整,能大幅提升识别成功率:

import cv2

img = cv2.imread("blurry_qr.png")
# 转灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 高斯降噪
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# 自适应阈值处理,增强二维码对比度
processed_img = cv2.adaptiveThreshold(blurred, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

# 之后用上面任意一个库处理processed_img即可

内容的提问来源于stack exchange,提问作者user2970016

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:05:47