2017-02-19 5 views
11

PyQt와 openalpr을 사용하여 GUI 응용 프로그램을 만들려고했지만 코드에 문제가 있습니다. 간단한 예 :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_()) 

기본 예이지만 오류는 계속 발생합니다. 행운없이 Window 클래스에 openalpr 코드를 직접 구현하려고했습니다. 그래서 기본적으로 GUI가 없으면 코드가 작동합니다. openALPR version 2.2.4PyQT4을 사용하십시오. 또한 이미지를 확인 했으니 까. 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이 최소 요구 사항이라고 주장합니다. 아직도, 오픈 코드가 가장 가능성이 큰 범인이다. 버전 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)에 대한 서명을 추측하는 데 도움이 될 수 있습니다. 새로운 응용 프로그램에 대한 서명은 QApplication(int & argc, char ** argv)입니다. here

+0

이것은 완전히 잘못되어 어떤 식 으로든 질문에 대답하지 않습니다. – ekhumoro