python3+pyzbar+Image識別本地二維碼


python3+pyzbar+Image 進行圖片二維碼識別

1.前言

  最近公司有個項目要寫個程序自動識別客戶提交照片里的二維碼,一接到這個任務馬上就想到了用Python這個萬能的工具!

2.搜尋

  首先在網上到處找了很多“靈感”,看看其他人都會用什么包來完成這個功能。實現方法大體可分為下面幾類:

2.1用zbar

但zbar不支持python3,只好作罷,用python2的可參考:https://www.cnblogs.com/dcb3688/p/4241048.html

2.2調用zxing項目

后面找這個zxing包,應用例程可見:http://www.cnblogs.com/oucsheep/p/6269813.html

https://blog.csdn.net/ld326/article/details/78671099 python3可用這個包,但用起來很麻煩,只好舍去再尋找

2.3opencv+pyzbar

偶然點開了一個視頻識別二維碼的例程(https://blog.csdn.net/zx66zx/article/details/82785334),試運行后感覺這個太厲害了!

但是這個是識別視頻中的二維碼,而我要做的是圖片識別,經過試驗后找到了最終可行且簡單的方法:Image+pyzbar

3.實現

3.1pip安裝pyzbar和Image兩個包

pip install Pillow
pip install pyzbar

win10若報找不到ctype包,則還需安裝Visual C++ Redistributable Packages for Visual Studio 2013,pyzbar官網可以找到程序下載連接https://www.microsoft.com/en-US/download/details.aspx?id=40784

3.2測試代碼

  1. 編寫測試代碼:PyZbarTest.py
import pyzbar.pyzbar as pyzbar
from PIL import Image,ImageEnhance

image = "test.jpg"
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.show() 圖片讀取測試
barcodes = pyzbar.decode(img)
for barcode in barcodes:
    barcodeData = barcode.data.decode("utf-8")
    print(barcodeData)
  1. 執行測試代碼
python PyZbarTest.py

是不是很簡單!可以識別一張照片上的多個二維碼,若識別效果不好可相應的調節亮度、銳利化、對比度還有灰度。實際測試中一般增加對比度和灰度化后識別效果會更好。

4.后續

需要提供系統級功能接口,供Java調用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM