2017-02-19 61 views
11

Tôi đã cố tạo ứng dụng GUI với PyQt và openalpr, nhưng có vấn đề với mã của tôi. Một ví dụ đơn giản:OpenALPR không hoạt động với 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() 

Mã trên hoạt động như sự quyến rũ, nhưng nếu có liên quan đến GUI, hành vi lạ sẽ xảy ra.

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_()) 

Đây là ví dụ cơ bản nhưng lỗi vẫn còn ở đây. Đã cố gắng triển khai mã openalpr trực tiếp vào Window lớp mà không có may mắn. Vì vậy, cơ bản, nếu không có gui, mã hoạt động. Sử dụng openALPR version 2.2.4PyQT4. Ngoài ra, kiểm tra hình ảnh, nó ở đó. Điều tương tự cũng áp dụng khi sử dụng recognize_array() thay vì recognize file. Lỗi tôi nhận được là:

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

Tôi không thể tạo lại lỗi này. Bạn nên thử nghiệm với phiên bản mới nhất của openalpr và các phụ thuộc của nó. FWIW, thiết lập của tôi là: openalpr-2.3.0, opencv-3.2.0, tesseract-3.0.5, python-2.7.10, pyqt-4.12. Openalpr readme cho rằng opencv-2.4.8 là yêu cầu tối thiểu. Tuy nhiên, linh cảm của tôi là opencv là thủ phạm có khả năng nhất, cho rằng phiên bản 2 series bây giờ là mã kế thừa và bạn thậm chí không sử dụng bản phát hành mới nhất của nó (2.4.13). – ekhumoro

+0

Sau khi một số công việc vắng mặt, tôi đã trở lại trong vấn đề này. @ekhumoro nhận thấy phiên bản opencv, do đó, tôi đã làm, nhưng tôi biết rằng tôi đã cài đặt OpenCV 3.1. Sau khi điều tra các gói đã cài đặt, tôi nhớ rằng OpenALPR được cài đặt thông qua 'apt-get' và nó đi kèm với hỗ trợ opencv (phiên bản 2.4.9.1). Vì vậy, cài đặt từ nguồn đã giải quyết được sự cố của tôi mà không cần bất kỳ sửa đổi mã nào. Nhưng, câu hỏi là, tại sao có xung đột trong opencv 2.4.9 và pyqt? – Aleksandar

Trả lời

0

Tôi đoán chữ ký cho các ứng dụng mới app = QtGui.QApplication(sys.argv) thiếu argc. Chữ ký cho đơn đăng ký mới là QApplication(int & argc, char ** argv) xem here

+0

Điều này hoàn toàn sai và không trả lời câu hỏi dưới bất kỳ hình thức nào. – ekhumoro

Các vấn đề liên quan