本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!
二维码和条形码在我们的日常生活中的使用场景越来越多,使得其识别成为CV技术中的热门方向,下面介绍如何是使用 pyzbar 快速识别二维码和条形码,让您的业务快速成型。
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 ,您的点赞可以让技术传播得更远更广,谢谢!
首先需要了解下 ZBar
:ZBar是一个开源软件套件,用于从各种来源(如视频流、图像文件和原始强度传感器)读取条形码。它支持许多流行的符号(条形码类型),包括EAN-13/UPC-A
、UPC-E
、EAN-8
、代码128
、代码39
、交错2/5
和二维码
。
而 pyzbar
是通过 Python2
和3
接口,使用 ZBar
库读取一维条形码和QR码 。
在 Windows 的环境下只需要使用 pip
安装即可:
pip install pyzbar
sudo apt-get install libzbar-dev
pip install zbar
yum install python-devel
yum install zbar-devel
yum install zbar
# -*- coding:utf-8 -*-
"""
@author: HinGwenWoong
@license: MIT
"""
import datetime
import time
from pathlib import Path
import numpy as np
import cv2
from pyzbar import pyzbar
def get_qrcode_result(image_input, binary_max=230, binary_step=2):
"""
获取二维码的结果
:param image_input: 输入图片数据
:param binary_max: 二值化的最大值
:param binary_step: 每次递增的二值化步长
:return: pyzbar 预测的结果
"""
# 把输入图像灰度化
if len(image_input.shape) >= 3:
image_input = cv2.cvtColor(image_input, cv2.COLOR_RGB2GRAY)
# 获取自适配阈值
binary, _ = cv2.threshold(image_input, 0, 255, cv2.THRESH_OTSU)
# 二值化递增检测
res = []
while (binary < binary_max) and (len(res) == 0):
binary, mat = cv2.threshold(image, binary, 255, cv2.THRESH_BINARY)
res = pyzbar.decode(mat)
binary += binary_step
return res
if __name__ == '__main__':
image_dir = Path(r"图片路径")
total_image = 0
success_count = 0
for image_file in Path.iterdir(image_dir):
if image_file.suffix not in [".jpg", ".png"]:
# 非图片,跳过该文件
continue
# 使用 cv2.imdecode 可以读取中文路径下的图片
image = cv2.imdecode(np.fromfile(Path(image_dir).joinpath(image_file),
dtype=np.uint8),
cv2.IMREAD_COLOR)
start_time = time.time()
result = get_qrcode_result(image, binary_max=230, binary_step=2)
print(f"Got {image_file} result: {result}, "
f"using time : {datetime.timedelta(seconds=(time.time() - start_time))}")
if len(result) > 0:
success_count += 1
total_image += 1
print(f"total image = {total_image}, success count = {success_count}")
安装完,run,出现如下报错!
FileNotFoundError: Could not find module '你的路径\Python\Python38\site-packages\pyzbar\libzbar-64.dll' (or one of its dependencies). Try using the full path with constructor syntax.
没事,这个坑我已经踩过。这个报错的原因是没有安装 Visual C++
的依赖库
下载地址:Visual C++ Redistributable Packages for Visual Studio 2013
以上是如何使用 pyzbar
快速识别二维码和条形码的方法,感谢您看到这里!希望能够助力您的业务快速落地!
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 ,您的点赞可以让技术传播得更远更广,谢谢!
[1] pyzbar 安装
[2] OSError: [WinError 126] Cannot find the specified module.
作者:HinGwenWoong
一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
CSDN: HinGwenWoong
原文链接:Python识别二维码条形码?用pyzbar一招搞掂(含代码)