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.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)
이 오류를 재현 할 수 없습니다. 최신 버전의 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
결근 한 일이 있은 후에, 나는이 문제로 돌아왔다. @ekhumoro는 opencv 버전을 알아 차렸으므로 OpenCV 3.1을 설치했다는 것을 알았습니다. 설치된 패키지를 조사한 후, OpenALPR은'apt-get'을 통해 설치되었고 opencv 지원 (버전 2.4.9.1)이 함께 제공됨을 기억했습니다. 그래서 코드를 수정하지 않고 소스에서 설치하면 문제가 해결되었습니다. 그러나 문제는 opencv 2.4.9와 pyqt에서 충돌이있는 이유는 무엇입니까? – Aleksandar