发上等愿,结中等缘,享下等福;择高处立,寻平处住,向宽处行

Brick walls are there for a reason :they let us prove how badly we want things

代码改变世界

python 二维码识别包 pyzbar zxing使用简介

2019-07-26 17:01  kowme  阅读(7217)  评论(0编辑  收藏  举报

 

一、Python下二维码识别包的使用详情

在python下二维码识别,目前主要有三个模块:zbar 、zbarlight、zxing。

未使用zbarlight,原因是zbarlight和zbar的dll相同,二维码识别准去率没提升。另外,该包的pip安装存在一些问题未解决。

 

1、安装包:

pip install opencv-python

pip install pillow image zxing

pip install pyzbar

 

2、 安装使用包过程中遇到的问题:

A、使用zxing是,出现“FileNotFoundError: [WinError 2”

解决办法:安装java(jdk、jre都可以)。原因是zxing要调用一些java文件,要求java文件可被执行。

B、安装zbarlight出现“Microsoft Visual C++ 14.0 is required.”

解决办法:放弃。 原因:安装完vc_redist.x86后,还是会报相关的错误。

4、 使用详情

Pyzbar和zxing识别4张包含二维码的图片(图片如下),目前都只识别出来了前两张。微信(支付宝)扫一扫,4张都可以识别出来

 

pyzbar相关代码:

 

import pyzbar.pyzbar as pyzbar
from PIL import Image, ImageEnhance


def zabr_parser(image):
    img = Image.open(image)
    # img = ImageEnhance.Brightness(img).enhance(2.0)#增加亮度
    # img = ImageEnhance.Sharpness(img).enhance(17.0)#锐利化
    # img = ImageEnhance.Contrast(img).enhance(4.0)#增加对比度
    img = img.convert('L')#灰度化
    img = img.convert("1")
    img.show()

    barcodes = pyzbar.decode(img)
    for barcode in barcodes:
        barcodeData = barcode.data.decode("utf-8")
        print(barcodeData)

zxing相关代码:

 1 from PIL import Image
 2 import zxing  # 导入解析包
 3 
 4 
 5 def ocr_qrcode_zxing(filename):
 6     img = Image.open(filename)
 7     zx = zxing.BarCodeReader()  # 调用zxing二维码读取包
 8     data = ''
 9     zxdata = zx.decode(filename)  # 图片解码
10     return zxdata.parsed  # 返回记录的内容

 

4、使用的图片

 

 

 

 

 

二、对比:

1、zbar和zbarlight内核一致,都是基于zbar的dll编译加载的。zbarlight使用比zbar更简单,不过是在zbar的基础又做了封装,增加易用性,二维码识别准确率没有提高。

2、zxing是基于java的zxing核心的python分支,其原理是调用javaw 加载zxing的core.jar包,再获取输出结果。

3、微信和支付宝的扫一扫功能较python的这三个包强大很多,是有自己的算法(微信扫一扫使用了zxing,应该做了一定的修改。参考https://my.oschina.net/yushulx/blog/495471)

 

 

参考文档:https://www.php.cn/python-tutorials-373780.html

 

 

 

 

It's not who you are underneath, it's what you do that defines you

Brick walls are there for a reason :they let us prove how badly we want things