一、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