簡體   English   中英

OpenALPR不適用於PyQt

[英]OpenALPR not work with PyQt

我嘗試用PyQt和openalpr構建一個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

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錯誤:在detectMultiScale中斷言失敗(scaleFactor> 1 && image.depth()== CV_8U),文件/build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/objdetect/src/cascadedetect.cpp,第1081行OpenALPR中的捕獲異常識別:/build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/objdetect/src/cascadedetect.cpp:1081:錯誤:(-215)scaleFactor> 1 && image.depth()== CV_8U函數detectMultiScale

回溯(最近一次調用最后一次):文件“analize.py”,第39行,在window = Window()文件“analize.py”,第31行,在init self.analize.proccess()文件“analize.py”中,第22行,在proccess results = self.alpr.recognize_file(“/ tmp / 1487428945.14.jpg”)文件“/usr/lib/python2.7/dist-packages/openalpr/openalpr.py”,第132行,在recogn_file response_obj中= json.loads(json_data)文件“/usr/lib/python2.7/json/ INIT py”為,線339,在負荷返回_default_decoder.decode(一個或多個)文件“/usr/lib/python2.7/json/ decoder.py“,第364行,在解碼obj中,end = self.raw_decode(s,idx = _w(s,0).end())文件”/usr/lib/python2.7/json/decoder.py“ ,第380行,在raw_decode obj中,end = self.scan_once(s,idx)ValueError:期望屬性名稱:第1行第122列(字符121)

這可能是DPI意識的問題。 您可能需要在http://doc.qt.io/qt-5/highdpi.html上查看Qt中的高DPI支持 此外,如果您願意將Qt更新為5.6,這可能有助於https://stackoverflow.com/a/36058813/2135548

我猜新應用程序app = QtGui.QApplication(sys.argv)簽名缺少argc 新應用程序的簽名是QApplication(int & argc, char ** argv)請看這里

我們發現,當進程A啟動進程B時,使用Python多處理,如果在A中導入並從B調用,OpenCV將失敗,無論B是否再次導入它。 我不熟悉QT,但如果窗口在一個單獨的進程中運行,可能會發生同樣的事情(OpenCV是OpenALPR的依賴)。

如果是,那么您可能會發現將AnalizePlate [1]保留在單獨的源文件中,並在頂部import openalpr並從窗口代碼引用它,頂部沒有import openalpr將正常工作。

[1]我認為你的意思是分析(美國)/分析(BR / AU)。 Analize意味着別的東西:-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM