python識(shí)別二維碼(3.6環(huán)境下的zxing包進(jìn)行識(shí)別并解決中文報(bào)錯(cuò)問題)

python用于識(shí)別二維碼的主要有三個(gè)包,zbar 、zbarlight、zxing。
從網(wǎng)上down了一個(gè)關(guān)于zxing的代碼下來試試,程序報(bào)錯(cuò)是編碼問題。重新學(xué)習(xí)了一下好像對(duì)伸手黨不是很友好。于是重新開始學(xué)習(xí)其他兩種包。

zbar:
zbar和zbarlight內(nèi)核一致,都是基于zbar的dll編譯加載的。
由于zbar只有32位的版本,聽聞64位python最后會(huì)出現(xiàn)“ImportError: DLL load failed: %1 不是有效的 Win32 應(yīng)用程序。"錯(cuò)誤,暫時(shí)無解。

zbarlight:
zbar和zbarlight內(nèi)核一致,都是基于zbar的dll編譯加載的。安裝過程中出現(xiàn)
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/
但是檢查過我的系統(tǒng)環(huán)境,根據(jù)網(wǎng)上教程重新裝過一次,也沒用,還是同樣的問題,暫時(shí)沒有想到解決方法。

zxing:
zxing是基于java的zxing核心的python分支,其原理是調(diào)用javaw 加載zxing的core.jar包,再獲取輸出結(jié)果。按照網(wǎng)上所說的,識(shí)別能力來說,zxing>zbarlight(zbar)。所以我又回來了!

下載:
pip3 install zxing
或者直接在pycharm中導(dǎo)入,ctrl+回車
實(shí)現(xiàn)代碼:

import os
import logging
from PIL import Image
import zxing    #導(dǎo)入解析包
import random


logger=logging.getLogger(__name__)
if not logger.handlers :logging.basicConfig(level=logging.INFO)
DEBUG= (logging.getLevelName(logger.getEffectiveLevel())=='DEBUG')

def ocr_qrcode_zxing(filename):
    #在當(dāng)前目錄生成臨時(shí)文件,規(guī)避java的路徑問題
    img= Image.open(filename)
    ran= int(random.random()*100000)
    img.save('%s%s.jpg' %(os.path.basename(filename).split('.')[0],ran))
    zx = zxing.BarCodeReader()
    data = ''
    zxdata = zx.decode('%s%s.jpg' %(os.path.basename(filename).split('.')[0], ran))
    print(zxdata)
    #刪除臨時(shí)文件
    os.remove('%s%s.jpg' %(os.path.basename(filename).split('.')[0],ran))
    if zxdata:
        logger.debug(u'zxing識(shí)別二維碼:%s,內(nèi)容: %s' %(filename ,zxdata))
        data = zxdata
    else:
        logger.error(u'識(shí)別zxing二維碼出錯(cuò):%s' %(filename))
        img.save('%s-zxing.jpg' %filename)
    return data

if __name__ == '__main__':
    filename = r'G:\wx\ww\c5a9367c3df1d2c8d64f1dc28bdb279.png'
    #zxing二維碼識(shí)別
    ltext = ocr_qrcode_zxing(filename)
    logger.info( u'[%s]Zxing二維碼識(shí)別:[%s]!!!' %(filename,ltext))
    print(ltext)

注意,以上代碼識(shí)別的二維碼信息中不能為中文。不然會(huì)報(bào)錯(cuò),解決方法需要另外學(xué)習(xí),稍等我一會(huì)。
打印出來的信息就是原始的二維碼信息了。以上代碼也是從同行處借鑒而來,學(xué)習(xí)參考。。

其他兩種方法暫時(shí)么有嘗試過,電腦位數(shù)實(shí)在令望而卻步。

中文報(bào)錯(cuò)問題解決:
找到python3安裝路徑下的zxing包,進(jìn)去在init修改源碼,將barcode函數(shù)中的decode(),加上“gkb”,運(yùn)行即可。

從另外大牛那里學(xué)習(xí)到的是將函數(shù)直接return utf-8,嘗試過,沒有用,不知道為什么。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容