我尝试使用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_())

这是一个基本示例,但错误仍然存​​在。尝试将openalpr代码直接实现为Window类,但没有运气。因此,基本上,如果没有gui,代码就可以工作。使用openALPR version 2.2.4PyQT4。此外,检查图像,它在那里。当使用recognize_array()而不是recognize file时,也是如此。我得到的错误是:

最佳答案

这可能是DPI意识的问题。您可能需要查看http://doc.qt.io/qt-5/highdpi.html上的Qt中的高DPI支持
另外,如果您愿意将Qt更新到5.6,则可能对https://stackoverflow.com/a/36058813/2135548有所帮助

10-07 17:26