2014-12-01 394 views
44

TL; DR:我需要一種方法來使用(更好的純Python)從圖像文件中解碼QR碼。如何解碼(最好是純Python)的QR碼圖像?

我有一個QR碼的jpg文件,我想用Python進行解碼。我發現,聲稱這樣做一對夫婦庫:

PyQRCodewebsite here),據稱可以通過簡單地提供這樣的路徑譯碼從圖像QR碼:

import sys, qrcode 
d = qrcode.Decoder() 
if d.decode('out.png'): 
    print 'result: ' + d.result 
else: 
    print 'error: ' + d.error 

所以我乾脆裝它使用sudo pip install pyqrcode。但是,我發現上面的示例代碼奇怪的是,它只進口qrcode(而不是pyqrcode雖然)因爲我認爲qrcodethis library哪些只能生成 qr-code圖像它讓我感到困惑。所以我試着用pyqrcodeqrcode上面的代碼,但都在第二行說AttributeError: 'module' object has no attribute 'Decoder'失敗。此外,the website是指Ubuntu 8.10(6年前發佈的),我無法找到它的公共(git或其他)存儲庫來檢查最新的提交。讓我感動到下一個庫:

zbar和website here)聲稱自己是"an open source software suite for reading bar codes from various sources, such as image files."所以,我想在Mac OSX上運行sudo pip install zbar安裝。這與error: command 'cc' failed with exit status 1失敗。我試圖在this SO question的答案中提出建議,但我似乎無法解決它。所以我決定再前進:

QRTools,它根據this blogpost可以使用下面的代碼輕鬆解碼圖像:

from qrtools import QR 
myCode = QR(filename=u"/home/psutton/Documents/Python/qrcodes/qrcode.png") 
if myCode.decode(): 
    print myCode.data 
    print myCode.data_type 
    print myCode.data_to_string() 

所以我試圖用sudo pip install qrtools安裝它,它不能找到任何東西。我也試過python-qrtools,qr-tools,python-qrtools和幾個組合,但不幸的是無濟於事。我想它指的是this repo,它說它是基於ZBar(見上文)。雖然我想運行我在Heroku上的代碼(因此喜歡純Python的解決方案),我成功地安裝了它在Linux箱(帶sudo apt-get install python-qrtools),並試圖運行它:

from qrtools import QR 
c = QR(filename='/home/kramer65/qrcode.jpg') 
c.data # prints u'NULL' 
c.data_type # prints u'text' 
c.data_to_string() # prints '\xef\xbb\xbfNULL' where I expect an int (being `1234567890`) 

儘管這似乎對其進行解碼,這似乎沒有做到這一點。它還需要ZBar,因此不是純粹的Python。所以我決定找到另一個圖書館。

PyXingwebsite here)是所謂的流行的Java ZXing library的一個Python端口,但最初只有承諾是6歲和項目沒有自述或文件任何責任。

對於剩下的我發現一對夫婦QR-EN編碼器(未編碼器),並且能爲你解碼一些API端點。因爲我不喜歡這個服務依賴於其他API端點,所以我想保留解碼本地。

所以得出結論;有人會知道我怎樣才能解碼來自(更好的純Python)圖像的QR碼?歡迎所有提示!

+0

它應該是:「如果myCode.decode(「/家/ kramer65 ')'而不是 'QR(filename ='/ home/kramer65/qrcode.jpg')' – 2016-04-20 21:09:41

+0

我覺得值得一提的是** @ kramer65 **提出的關於安裝' zip'與'pip':http://stackoverflow.com/questions/27406641/how-to-install-python-bindings-originating-from-an-a pt-package – Nez 2016-06-01 18:09:36

回答

64

可以使用qrtools嘗試以下步驟和代碼:

  • 創建qrcode文件,如果沒有已經存在的

    • 我用pyqrcode這樣做,可以使用pip install pyqrcode安裝
    • 然後使用代碼:

      >>> import pyqrcode 
      >>> qr = pyqrcode.create("HORN O.K. PLEASE.") 
      >>> qr.png("horn.png", scale=6) 
      
  • 解碼現有qrcode文件中使用qrtools

    • 使用sudo apt-get install python-qrtools
    • 現在使用Python提示符中下面的代碼安裝qrtools

      >>> import qrtools 
      >>> qr = qrtools.QR() 
      >>> qr.decode("horn.png") 
      >>> print qr.data 
      u'HORN O.K. PLEASE.' 
      

這裏是在單次運行的完整代碼:

In [2]: import pyqrcode 
In [3]: qr = pyqrcode.create("HORN O.K. PLEASE.") 
In [4]: qr.png("horn.png", scale=6) 
In [5]: import qrtools 
In [6]: qr = qrtools.QR() 
In [7]: qr.decode("horn.png") 
Out[7]: True 
In [8]: print qr.data 
HORN O.K. PLEASE. 

注意事項

  • 您可能需要PyPNG使用pip install pypng安裝使用pyqrcode
  • 萬一你可能會安裝PIL得到IOError: decoder zip not available。在這種情況下,使用try uninstalling and reinstalling PIL

    pip uninstall PIL 
    pip install PIL 
    
  • 如果還是不行,請嘗試使用Pillow代替

    pip uninstall PIL 
    pip install pillow 
    
+1

Hi mu無,謝謝你的回答。儘管qrtools需要zbar,因此不是純粹的python,但現在確實可行。現在的主要問題是我需要在heroku上安裝zbar python綁定,我在這裏問了一個問題:http://stackoverflow.com/questions/27406641/how-to-install-python-bindings-originating-from -an-apt-package。我會接受你的答案,但如果你也看看我的另一個問題,以便我可以解決在heroku上運行的qrtools,我將不勝感激。太感謝了! – kramer65 2014-12-10 17:03:52

+0

@ kramer65不幸的是,我對heroku沒有太多經驗,所以我不確定包裝是如何安裝的。 – 2014-12-10 18:21:57

+3

這不起作用,例外:tostring()已被刪除。 – 2016-10-01 16:42:05