Probleme mit zbar processor- Hilfe!!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
paeppi_79
User
Beiträge: 27
Registriert: Montag 13. Juli 2009, 19:33

Hallo Leute,
ich bräuchte etwas Hilfe bei einem kleinen Problem mit dem Modul zbar.
Ich habe eine Applikation indem man Daten in ein Formular eingibt und sie dann in eine Datenbank speichert. Nun gibt es Daten, welche aus vielen Zahlen bzw. Zahlen/Buchstabenkombis bestehen und es bei der manuellen Eingabe zu Verwechslungen kommt. Um dies zu vermeiden möchte ich gern diese Daten über einen Strichcode bzw. QR-Code einlesen lassen. Ich habe im Netz das Modul zbar gefunden und damit etwas herum experimentiert.
Mein System: Windows 7 32bit, Python 2.7.10, zbar 0.1
Dabei habe ich im Netz diesen code gefunden:

Code: Alles auswählen

import zbar
 
class QRCode():
 
    data = None
    proc = None
    scanner = None
 
    def qr_handler(self,proc,image,closure):
        # extract results
        for symbol in image:
            if not symbol.count:
                #self.data = symbol.data
                self.data = symbol.data
                self.data_type = 'text'
                callback(symbol.data)
 
    def __init__(self):
        self.proc = zbar.Processor()
        self.scanner = zbar.ImageScanner()
        self.scanner.parse_config('enable')
 
        self.proc.init("/dev/video0")
        self.proc.set_data_handler(self.qr_handler)
        self.proc.visible = True
#display cam window if True,  hide if False
        self.proc.active = True

    def get_data(self):
        #self.proc.process_one()
        self.proc.user_wait()
        self.proc.visible = False
        return(self.data)
Ich habe die in meinem script importiert und rufe es folgender Maßen auf:

Code: Alles auswählen

import test_qr
from test_qr import QRCode

    def ScanTarget1(self):

        data = QRCode().get_data()
        print data

    def ScanTarget2(self):
        
        data = QRCode().get_data()
        print data
Betätige ich einen Button wird die interne Webcam aktiviert und liest mir auch den Code aus. Das Problem kommt erst wenn ich versuche erneut eine Code zu lesen ohne meine Applikation zu beenden. Es scheint dass der processor noch geöffnet ist. Hier die Meldung:

Code: Alles auswählen

  File "E:\Projekte\cms\Projektdateien\CMS.py", line 1942, in ScanTarget2
    data = QRCode().get_data()
  File "E:\Projekte\cms\Projektdateien\test_qr.py", line 24, in __init__
    self.proc.init("/dev/video0")
zbar.InvalidRequestError: ERROR: zbar processor in _zbar_video_open():
    invalid request: failed to connect to camera '/dev/video0'
Für mich stellt sich nun folgende Fragen: 1. Wie kann ich den Processor richtig schließen damit ich erneut einen QR-Code auslesen kann ohne mein Programm neu zu starten?
2. Wie kann ich realisieren dass die Kamera nach dem ersten Aufruf aktiviert bleibt und permanent scant und auf einen code wartet? Gleiche Funktion wie im mitgelieferten zbarcam.exe Programm. Ich müßte dann nur die Daten in meine Applikation bringen.

Für eure Hilfe und Gedankenanstöße wäre ich dankbar!
Zuletzt geändert von Anonymous am Freitag 4. Dezember 2015, 23:33, insgesamt 2-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@paeppi_79: Der erste Quelltext den Du da gefunden hast, der ist offensichtlich fehlerhaft. Die Klasse erbt nicht von `object`, die Attribute auf Klassenebene gehören da nicht hin, `qr_handler()` benutzt zwei der übergebenen Argumente überhaupt gar nicht, dafür aber die Funktion `callback()` die nicht existiert, bei `get_data()` sind unnötige Klammern bei ``return`` und es ist geschrieben als wäre es eine Funktion.

Warum sind in Deinem Code durchnummerierte Methodennamen die sich nicht an den Style Guide for Python Code halten und zudem noch nicht einmal Methoden sind, aber exakt den gleichen Inhalt enthalten‽

'/dev/video0' ist der Pfad für ein Video-Gerät *unter Linux*. Du bist aber offensichtlich unter Windows unterwegs.
Antworten