कैसे (अधिमानतः शुद्ध) पायथन में एक क्यूआर-कोड छवि को डीकोड करना है?


86

टीएल; डीआर : मुझे एक छवि फ़ाइल से क्यूआर-कोड को डिकोड करने के लिए एक तरीका चाहिए (बेहतर शुद्ध) पायथन का उपयोग करके।

मुझे एक क्यूआर-कोड के साथ एक jpg फ़ाइल मिली है जिसे मैं पायथन का उपयोग करके डिकोड करना चाहता हूं। मुझे एक युगल पुस्तकालय मिला है जो ऐसा करने का दावा करता है:

PyQRCode ( यहां वेबसाइट ) जो माना जाता है कि छवियों से 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हालांकि नहीं ) क्योंकि मुझे लगता है कि इस पुस्तकालयqrcode को संदर्भित करता है जो केवल क्यूआर-कोड छवियां उत्पन्न कर सकता है जो मुझे इस तरह का भ्रमित करता है। इसलिए मैं दोनों के साथ ऊपर कोड की कोशिश की और है, लेकिन दोनों कह दूसरी पंक्ति में असफल । इसके अलावा, वेबसाइट उबंटू 8.10 को संदर्भित करता है (जो 6 साल से अधिक समय पहले सामने आया था) और मैं नवीनतम प्रतिबद्ध की जांच करने के लिए इसे एक सार्वजनिक (गिट या अन्य) भंडार नहीं पा सकता। इसलिए मैं अगले पुस्तकालय में चला गया:pyqrcodeqrcodeAttributeError: 'module' object has no attribute 'Decoder'

ZBar ( यहाँ वेबसाइट ) का दावा है कि "an open source software suite for reading bar codes from various sources, such as image files."मैंने मैक ओएसएक्स पर इसे चलाने की कोशिश की sudo pip install zbar। इसके साथ विफल रहता है error: command 'cc' failed with exit status 1। मैंने इस SO प्रश्न के उत्तर में सुझाव देने की कोशिश की , लेकिन मैं इसे हल नहीं कर पाया। इसलिए मैंने फिर से आगे बढ़ने का फैसला किया:

QRTools , जो इस ब्लॉगपोस्ट के अनुसार निम्नलिखित कोड का उपयोग करके आसानी से छवियों को डीकोड कर सकते हैं:

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और कुछ और संयोजन, लेकिन दुर्भाग्य से कोई लाभ नहीं हुआ। मुझे लगता है कि यह इस रेपो को संदर्भित करता है जो कहता है कि यह ZBar (ऊपर देखें) पर आधारित है। हालाँकि मैं अपना कोड हेरोकू पर चलाना चाहता हूं (और इस तरह एक शुद्ध पायथन समाधान पसंद करता हूं) मैंने इसे सफलतापूर्वक लिनक्स बॉक्स (इसके साथ 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 की जरूरत है और इस तरह यह शुद्ध अजगर नहीं है। इसलिए मैंने अभी तक एक और पुस्तकालय खोजने का फैसला किया।

PyXing ( यहाँ वेबसाइट ) माना जाता है कि लोकप्रिय जावा ZXing लाइब्रेरी का एक पायथन पोर्ट है , लेकिन प्रारंभिक और केवल कमिट 6 साल पुराना है और इस परियोजना का कोई रीडमी या प्रलेखन नहीं है।

बाकी के लिए मुझे कुछ qr- एन कोडर्स ( डी कोडर्स नहीं ) और कुछ एपीआई एंडपॉइंट्स मिले, जो आपके लिए डीकोड कर सकते हैं। चूंकि मुझे यह सेवा अन्य एपीआई एंडपॉइंट पर निर्भर होने के लिए पसंद नहीं है, इसलिए मैं डिकोडिंग को स्थानीय रखना चाहूंगा।

इसलिए निष्कर्ष निकालना; किसी को भी पता होगा कि मैं (पसंदीदा शुद्ध) पायथन में छवियों से क्यूआर-कोड कैसे डिकोड कर सकता हूं? सभी सुझावों का स्वागत है!


यह होना चाहिए: 'अगर myCode.dubble ("/ home / kramer65 / qrcode.jpg")' और 'QR (फ़ाइल नाम =' / home / kramer65 / qrcode.jpg ') नहीं है
दिमित्री चिचकोव

मुझे लगता है यह एक अनुवर्ती प्रश्न से उत्पन्न उल्लेख योग्य है @ kramer65 स्थापित करने के बारे zbarसाथ pip: stackoverflow.com/questions/27406641/...
इयान

जवाबों:


108

आप निम्नलिखित चरणों और कोड का उपयोग करके देख सकते हैं qrtools:

  • एक qrcodeफ़ाइल बनाएँ , यदि पहले से मौजूद नहीं है

    • मैंने pyqrcodeऐसा करने के लिए उपयोग किया , जिसे उपयोग करके स्थापित किया जा सकता हैpip install pyqrcode
    • और फिर कोड का उपयोग करें:

      >>> import pyqrcode
      >>> qr = pyqrcode.create("HORN O.K. PLEASE.")
      >>> qr.png("horn.png", scale=6)
      
  • किसी मौजूदा qrcodeफ़ाइल का उपयोग करके डिकोड करेंqrtools

    • qrtoolsका उपयोग कर स्थापित करेंsudo apt-get install 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। उस स्थिति में, अनइंस्टॉल करने और पुनPIL : उपयोग करने की कोशिश करें :

    pip uninstall PIL
    pip install PIL
    
  • यदि वह काम नहीं करता है, तो Pillowइसके बजाय का उपयोग करने का प्रयास करें

    pip uninstall PIL
    pip install pillow
    

1
हाय म्यू 無, आपके उत्तर के लिए धन्यवाद। हालाँकि qrtools को zbar की आवश्यकता होती है और इस प्रकार यह शुद्ध अजगर नहीं है, यह वास्तव में अब काम करता है। मुख्य समस्या अब यह है कि मुझे हरोकू पर ज़बर पाइथन बंधन स्थापित करने की आवश्यकता है, जिसके बारे में मैंने यहां एक सवाल पूछा: stackoverflow.com/questions/27406641/… । मैं आपके उत्तर को स्वीकार करने जा रहा हूं, लेकिन अगर आप मेरे अन्य प्रश्न पर भी गौर करेंगे, तो मैं बहुत सराहना करूंगा, ताकि मैं हरकोल पर चलने वाले कुर्तियों को हल कर सकूं। बहुत - बहुत धन्यवाद!
kramer65

3
यह काम नहीं करता है, अपवाद देता है: tostring () हटा दिया गया है।
भीषण पौडेल

2
@BhishanPoudel मैंने इसका भी सामना किया। ऐसा लगता है कि बग को ठीक कर दिया गया है और अगली रिलीज में दिखाई देना चाहिए। इससे सामना करने वाले किसी भी व्यक्ति के लिए, आप /usr/lib/python2.7/dist-packages/qrtools.py (स्थान भिन्न हो सकते हैं) की रेखा 181 को संपादित कर सकते हैं और "tostring" को "tobytes" से बदल सकते हैं। यह अब मेरे लिए अच्छी तरह से चल रहा है।
जोंथली

5
काम नहीं करता। विशेषता: मॉड्यूल 'qrtools' में कोई विशेषता नहीं है 'QR'
सईद मोहतमश

1
@SaeedMohtasham कोशिशfrom qrtools import qrtools
Krenair

9

निम्नलिखित कोड मेरे साथ ठीक काम करता है:

brew install zbar
pip install pyqrcode
pip install pyzbar

QR कोड छवि निर्माण के लिए:

import pyqrcode
qr = pyqrcode.create("test1")
qr.png("test1.png", scale=6)

QR कोड डिकोडिंग के लिए:

from PIL import Image
from pyzbar.pyzbar import decode
data = decode(Image.open('test1.png'))
print(data)

यह परिणाम प्रिंट करता है:

[Decoded(data=b'test1', type='QRCODE', rect=Rect(left=24, top=24, width=126, height=126), polygon=[Point(x=24, y=24), Point(x=24, y=150), Point(x=150, y=150), Point(x=150, y=24)])]

काम करने के लिए उपरोक्त समाधान के लिए, आपको पाइप स्थापित करने की आवश्यकता है pypng && पाइप स्थापित छवि
asad_hussain

6

मैं zbarस्थापना के बारे में प्रश्न के केवल भाग का उत्तर दे रहा हूं ।

मैंने विंडोज + पायथन 2.7 64-बिट पर काम करने के लिए लगभग आधे घंटे कुछ घंटे बिताए , इसलिए यहां स्वीकार किए गए उत्तर के लिए अतिरिक्त नोट्स हैं:

  • डाउनलोड करें

  • इसके साथ स्थापित करें pip install zbar-0.10-cp27-none-win_amd64.whl

  • अजगर की रिपोर्ट तो एक ImportError: DLL load failed: The specified module could not be found.जब कर रही import zbarहै, तो आप करेंगे बस स्थापित करने की आवश्यकता विजुअल C ++ पुनर्वितरण संकुल वी.एस. 2013 के लिए (मैं समय यहाँ का एक बहुत खर्च किया, लेकिन विफल रहने पुन: संयोजित करने की कोशिश कर ...)

  • आवश्यक भी: libzbar64-0.dll उस फ़ोल्डर में होना चाहिए जो PATH में है। मेरे मामले में मैंने इसे "C: \ Python27 \ libzbar64-0.dll" (जो PATI में है) में कॉपी किया है। यदि यह अभी भी काम नहीं करता है, तो इसे जोड़ें:

    import os
    os.environ['PATH'] += ';C:\\Python27' 
    import zbar
    

पुनश्च: इसे पायथन 3.x के साथ काम करना और भी मुश्किल है: पायथन 3.x के लिए कंपाइल ज़बर

पीएस 2: मैं बस का परीक्षण किया pyzbar साथ pip install pyzbarऔर अधिक आसान है, यह काम करता है बाहर के बॉक्स (केवल एक चीज आप स्थापित कुलपति Redist 2013 फ़ाइलों की आवश्यकता है)। इस pyimagesearch.com लेख में इस पुस्तकालय का उपयोग करने की भी सिफारिश की गई है ।


0

BoofCV नामक एक पुस्तकालय है जो ZBar और अन्य पुस्तकालयों से बेहतर होने का दावा करता है
यहाँ उस (किसी भी OS) का उपयोग करने के चरण दिए गए हैं।

पूर्व आवश्यक वस्तुएँ:

  • सुनिश्चित करें कि JDK 14+ $ PATH में स्थापित और सेट किया गया है
  • pip install pyboof

डिकोड करने के लिए कक्षा:

import os
import numpy as np
import pyboof as pb

pb.init_memmap() #Optional

class QR_Extractor:
    # Src: github.com/lessthanoptimal/PyBoof/blob/master/examples/qrcode_detect.py
    def __init__(self):
        self.detector = pb.FactoryFiducial(np.uint8).qrcode()
    
    def extract(self, img_path):
        if not os.path.isfile(img_path):
            print('File not found:', img_path)
            return None
        image = pb.load_single_band(img_path, np.uint8)
        self.detector.detect(image)
        qr_codes = []
        for qr in self.detector.detections:
            qr_codes.append({
                'text': qr.message,
                'points': qr.bounds.convert_tuple()
            })
        return qr_codes

उपयोग:

qr_scanner = QR_Extractor()
output = qr_scanner.extract('Your-Image.jpg')
print(output)

परीक्षण किया और पायथन 3.8 (विंडोज और उबंटू) पर काम करता है


0

विंडोज का उपयोग करने के लिए ZBar

पूर्व आवश्यक वस्तुएँ:

डिकोड करने के लिए:

from PIL import Image
from pyzbar import pyzbar

img = Image.open('My-Image.jpg')
output = pyzbar.decode(img)
print(output)

वैकल्पिक रूप से, आप ZBarLightइसे यहां बताए अनुसार सेट करके भी उपयोग कर सकते हैं:
https://pypi.org/project/zbarlight/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.