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_())
これは基本的な例ですが、ここでもエラーはあります。 openalpr
コードを直接Window
クラスに実装しようとしましたが、運がありません。基本的に、GUIがない場合、コードが動作します。 openALPR version 2.2.4
とPyQT4
を使用します。また、画像をチェックして、それがあります。 recognize file
の代わりにrecognize_array()
を使用した場合も同様です。私が持っているエラーは:
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)を使用していない場合、opencvが最も有望な原因です。 – ekhumoro
欠けている仕事の後、私はこの問題に戻りました。 @ekhumoroはopencvのバージョンに気付きました。でも、私はOpenCV 3.1がインストールされていることを知っていました。インストールされたパッケージを調べた後、OpenALPRは 'apt-get'でインストールされ、opencvサポート(バージョン2.4.9.1)が付属していることを思い出しました。ですから、ソースからのインストールでコードを変更することなく問題を解決できました。しかし、問題は、opencv 2.4.9とpyqtに矛盾があるのはなぜですか? – Aleksandar