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