Opencv多线程Python-当前未按预期工作

Opencv多线程Python-当前未按预期工作,python,multithreading,opencv,Python,Multithreading,Opencv,代码: 我的问题是Opencv多线程?这段代码不完整,但它给出了我正在尝试做的事情的图片 主要功能是运行一个马里奥游戏。这就是程序开始的地方。它为视频流启动一个线程,该线程运行一个简单的人脸检测算法。如果面部存在,则存在设置为500的硬编码阈值,该阈值确定面部相对于相机的大致位置。理想情况下,我们通过AppleScript触发一个键盘事件,它被马里奥游戏捕获。马里奥游戏通过脸部的位置左右控制 问题是,代码运行速度非常慢。独立地,这两个功能都运行得非常顺利。但是,当线程连接在一起时,它的运行速度非

代码:

我的问题是Opencv多线程?这段代码不完整,但它给出了我正在尝试做的事情的图片

主要功能是运行一个马里奥游戏。这就是程序开始的地方。它为视频流启动一个线程,该线程运行一个简单的人脸检测算法。如果面部存在,则存在设置为500的硬编码阈值,该阈值确定面部相对于相机的大致位置。理想情况下,我们通过AppleScript触发一个键盘事件,它被马里奥游戏捕获。马里奥游戏通过脸部的位置左右控制


问题是,代码运行速度非常慢。独立地,这两个功能都运行得非常顺利。但是,当线程连接在一起时,它的运行速度非常慢。视频流功能忽略了很多人脸检测。

级联分类器绝对不是线程安全的。它正在为检测建立内部状态,因此同时执行2将破坏它。安全运行cascadeclassifier并更新游戏循环的适当方法是什么?
def video_stream(self):
    while(True):


        # Our operations on the frame come here

        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        faces = self.face_cascade.detectMultiScale(gray, 1.3, 5)
        while(faces == ()):
            faces = self.face_cascade.detectMultiScale(gray, 1.3, 5)

        if faces is not ():
            if faces[0][0] < 500: # head is on left
                #cmd = """osascript -e 'tell application "System Events" to keystroke "f"'"""
                print "right"
                #.system(cmd)
            else: # head is on right
                #cmd = """osascript -e 'tell application "System Events" to keystroke "d"'"""
                print "left"
                #os.system(cmd)



def main(self):
    t = threading.Thread(target = self.video_stream)
    t.start()

    while not self.done:
        self.event_loop()
        self.update()
        pg.display.update()
        self.clock.tick(self.fps)
        if self.show_fps:
            fps = self.clock.get_fps()
            with_fps = "{} - {:.2f} FPS".format(self.caption, fps)
            pg.display.set_caption(with_fps)