2017-02-19 26 views
11

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

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 Error: Assertion failed (scaleFactor > 1 && image.depth() == CV_8U) in detectMultiScale, file /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/objdetect/src/cascadedetect.cpp, line 1081 Caught exception in OpenALPR recognize: /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/objdetect/src/cascadedetect.cpp:1081: error: (-215) scaleFactor > 1 && image.depth() == CV_8U in function detectMultiScale

Traceback (most recent call last): File "analize.py", line 39, in window = Window() File "analize.py", line 31, in init self.analize.proccess() File "analize.py", line 22, in proccess results = self.alpr.recognize_file("/tmp/1487428945.14.jpg") File "/usr/lib/python2.7/dist-packages/openalpr/openalpr.py", line 132, in recognize_file response_obj = json.loads(json_data) File "/usr/lib/python2.7/json/init.py", line 339, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 364, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python2.7/json/decoder.py", line 380, in raw_decode obj, end = self.scan_once(s, idx) ValueError: Expecting property name: line 1 column 122 (char 121)

+0

Я не могу воспроизвести эту ошибку. Вы должны попробовать тестирование с последней версией openalpr и ее зависимостями. FWIW, моя настройка: openalpr-2.3.0, opencv-3.2.0, tesseract-3.0.5, python-2.7.10, pyqt-4.12. Openalpr readme утверждает, что opencv-2.4.8 является минимальным требованием. Тем не менее, моя догадка заключается в том, что opencv является наиболее вероятным виновником, учитывая, что версия 2 серии теперь является устаревшим кодом, и вы даже не используете последнюю версию (2.4.13). – ekhumoro

+0

После некоторых работ, я вернулся в этом выпуске. @ekhumoro заметила версию opencv, так же как и я, но я знал, что у меня установлен OpenCV 3.1. После изучения установленных пакетов я вспомнил, что OpenALPR устанавливается через 'apt-get' и поставляется с поддержкой opencv (версия 2.4.9.1). Таким образом, установка из источника разрешила мою проблему без изменения кода. Но, вопрос в том, почему существует конфликт в opencv 2.4.9 и pyqt? – Aleksandar

ответ

0

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

+0

Это совершенно неправильно, и никоим образом не отвечает на вопрос. – ekhumoro

 Смежные вопросы

  • Нет связанных вопросов^_^