代码:
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)
我的问题是Opencv多线程?这段代码并不完整,但它给出了我想要做的事情的图片。
主要功能是运行马里奥游戏。这是程序开始的地方。它启动video_stream
的线程,该线程运行简单的人脸检测算法。如果面部存在,则存在设置的硬编码阈值(500),其大致确定面部相对于相机的位置。理想情况下,我们会触发由Mario游戏捕获的键盘事件(通过AppleScript)。然后通过脸部位置左右控制马里奥游戏。
问题是,代码运行速度极慢。独立地,两个功能都运行得非常顺利。但是,当连接在一起时,它运行得非常慢。 video_stream函数错过了很多面部检测。