首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenALPR不适用于PyQt

OpenALPR不适用于PyQt
EN

Stack Overflow用户
提问于 2017-02-19 08:10:09
回答 2查看 1K关注 0票数 13

我试图用PyQt和openalpr构建一个GUI应用程序,但是我的代码有一个问题。一个简单的例子:

代码语言:javascript
复制
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,就会发生奇怪的行为。

代码语言:javascript
复制
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时,同样的情况也适用。我得到的错误是:

/build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/objdetect/src/cascadedetect.cpp,错误:断言失败(scaleFactor >1& image.depth() == CV_8U),文件OpenCV行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() File“analize.py”中,第31行,在init self.analize.proccess() File“analize.py”中,第22行,在proccess =analize.py文件"/usr/lib/python2.7/dist-packages/openalpr/openalpr.py",第132行中,在"/usr/lib/python2.7/json/init.py",recognize_file response_obj = json.loads(json_data)文件第339行中,在负载返回_default_decoder.decode(s)文件“/usr/lib/python2.7/json/decder.py”中,第364行,在解码obj中,end = self.raw_decode(s,idx=_w(s,0).end() File“/usr/lib/python2.7/json/decder.py”,第380行,在raw_decode obj中,end = self.scan_once(s,idx) ValueError:预期的属性名称:第1列122 (char 121)

EN

回答 2

Stack Overflow用户

发布于 2017-02-28 07:43:35

我想新应用程序app = QtGui.QApplication(sys.argv)的签名缺失了。新应用程序的签名是QApplication(int & argc, char ** argv) (参见这里 )

票数 1
EN

Stack Overflow用户

发布于 2018-06-14 11:24:52

我们发现,使用process,当进程A启动进程B时,如果在A中导入OpenCV并从B调用它,无论B是否再次导入它,它都会失败。我不熟悉QT,但如果窗口在单独的进程中运行,可能会发生同样的事情(OpenCV是OpenALPR的依赖项)。

如果是的话,那么您可能会发现,将AnalizePlate1放在一个单独的源文件中,将import openalpr放在顶部,并在窗口代码中引用它,而顶部没有import openalpr,这将很好。

我认为你的意思是分析(美国)/Analyse(BR/AU)。分析意味着其他事情:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42325012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档