Подтвердить что ты не робот

OpenALPR не работает с PyQt

Я попытался создать графическое приложение с PyQt и openalpr, но есть проблема с моим кодом. Простой пример:

from openalpr import Alpr
from PyQt4 import QtCore, QtGui

class AnalizePlate(object):

    def __init__(self):

        self.alpr = None
        try:
            self.alpr = Alpr("eu", "/etc/openalpr/openalpr.conf", "/usr/share/openalpr/runtime_data")
            if not self.alpr.is_loaded():
                print("Error loading OpenALPR")
        except:
            print "Error"


    def proccess(self):
        self.alpr.set_top_n(7)
        self.alpr.set_default_region("md")

        results = self.alpr.recognize_file("/tmp/1487428945.14.jpg")
        print results

a = AnalizePlate()
a.proccess()

Над кодом работает как шарм, но если задействован GUI, возникает странное поведение.

from openalpr import Alpr
from PyQt4 import QtCore, QtGui

class AnalizePlate(object):

    def __init__(self):

        self.alpr = None
        try:
            self.alpr = Alpr("eu", "/etc/openalpr/openalpr.conf", "/usr/share/openalpr/runtime_data")
            if not self.alpr.is_loaded():
                print("Error loading OpenALPR")
        except:
            print "Error"


    def proccess(self):
        self.alpr.set_top_n(7)
        self.alpr.set_default_region("md")

        results = self.alpr.recognize_file("/tmp/1487428945.14.jpg")
        print results

class Window(QtGui.QWidget):

    def __init__(self):
        super(Window, self).__init__()
        self.resize(1198, 651)
        self.analize = AnalizePlate()
        self.analize.proccess()
        QtCore.QMetaObject.connectSlotsByName(self)


if __name__ == "__main__":
    import sys
    import sip
    app = QtGui.QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())

Это основной пример, но ошибка все еще здесь. Пытался внедрить код openalpr непосредственно в класс Window без везения. Так что, если нет gui, код работает. Используя openALPR version 2.2.4 и PyQT4. Кроме того, проверьте изображение, оно есть. То же самое применяется, когда recognize_array() используется вместо recognize file. Ошибка, которую я получил:

Ошибка OpenCV: утверждение не выполнено (scaleFactor > 1 && image.depth() == CV_8U) в файле detectMultiScale, файл /build/opencv -SviWsf/opencv-2.4.9.1+dfsg/modules/objdetect/src/cascadedetect.cpp, строка 1081 Обнаруженное исключение в OpenALPR распознает: /build/opencv -SviWsf/opencv-2.4.9.1+dfsg/modules/objdetect/src/cascadedetect.cpp:1081: ошибка: (-215) scaleFactor > 1 && image.depth() == CV_8U в функции detectMultiScale

Traceback (последний последний вызов): Файл "analize.py" , строка 39, в     window = Окно() Файл "analize.py" , строка 31, в init    self.analize.proccess() Файл "analize.py" , строка 22, в процессе     results = self.alpr.recognize_file ( "/tmp/1487428945.14.jpg" ) Файл "/usr/lib/python2.7/dist-packages/openalpr/openalpr.py", строка 132, в ident_file     response_obj = json.loads(json_data) Файл "/usr/lib/python2.7/json/ init.py", строка 339, в нагрузках     return _default_decoder.decode(s) Файл "/usr/lib/python2.7/json/decoder.py", строка 364, в декодировании     obj, end = self.raw_decode (s, idx = _w (s, 0).end()) Файл "/usr/lib/python2.7/json/decoder.py", строка 380, в raw_decode     obj, end = self.scan_once (s, idx) ValueError: Ожидание имени свойства: строка 1 столбец 122 (char 121)

4b9b3361

Ответ 1

Это может быть проблема осведомленности о ДОИ. вам может потребоваться взглянуть на Поддержка высокого DPI в Qt на http://doc.qt.io/qt-5/highdpi.html. Также, если вы хотите обновить Qt до 5.6, это может помочь fooobar.com/questions/354820/...

Ответ 2

Я предполагаю, что для нового приложения app = QtGui.QApplication(sys.argv) отсутствует argc. Подпись для нового приложения QApplication(int & argc, char ** argv) см. здесь