python识别二维码条形码?用pyzbar一招搞掂(含代码)!

原创声明

本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!

前言

二维码和条形码在我们的日常生活中的使用场景越来越多,使得其识别成为CV技术中的热门方向,下面介绍如何是使用 pyzbar 快速识别二维码和条形码,让您的业务快速成型。

我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!

一、pyzbar 是什么?

  1. 首先需要了解下 ZBarZBar是一个开源软件套件,用于从各种来源(如视频流、图像文件和原始强度传感器)读取条形码。它支持许多流行的符号(条形码类型),包括EAN-13/UPC-AUPC-EEAN-8代码128代码39交错2/5二维码

  2. pyzbar 是通过 Python23接口,使用 ZBar 库读取一维条形码和QR码 。

二、安装 pyzbar

1. Windows

在 Windows 的环境下只需要使用 pip 安装即可:

pip install pyzbar
1

2. Ubuntu

sudo apt-get install libzbar-dev
pip install zbar
12

3、centos7

yum install python-devel
yum install zbar-devel
yum install zbar
123

三、开始识别

代码走起:

# -*- 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}")

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

结果:

在这里插入图片描述

可能出现的问题:

安装完,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.
在这里插入图片描述

解决方法:

总结

以上是如何使用 pyzbar 快速识别二维码和条形码的方法,感谢您看到这里!希望能够助力您的业务快速落地!

我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!

参考:

[1] pyzbar 安装
[2] OSError: [WinError 126] Cannot find the specified module.

授权须知

  1. 原创文章在推送一天后才可进行转载
  2. 转载文章,禁止声明原创
  3. 不允许直接二次转载,转载请根据原文链接联系作者
  4. 若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
    但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:HinGwenWoong
一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
CSDN: HinGwenWoong
原文链接:Python识别二维码条形码?用pyzbar一招搞掂(含代码)

  1. 若需要修改文章的排版,请根据原文链接联系作者
  2. 再次感谢您的认可,转载请遵守如上转载须知!

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值