2017-01-26 392 views
1

嗨,我正在努力提高自己,我对树莓派感兴趣。我想用树莓派,树莓派相机和TFT屏幕开发一个学生项目。它包括,当拉斯比凸轮检测到一个脸部时,显示一部电影,同时没有检测到任何脸部显示其他电影。我写了如下的代码。我用python opencv omxplayer库。当我运行代码时,如果没有检测到脸部,没有视频正在播放,但如果检测到脸部,视频会非常严肃地打开和关闭,视频不会出现,只有黑色阴影快速出现在屏幕上。感谢您的帮助。问候Raspberry Pi Omxplayer OpenCV

from picamera.array import PiRGBArray 
from picamera import PiCamera 
import time 
import cv2 
import os 
import numpy 
from subprocess import Popen 

#setup movies 
movie1 = ("my_movie1_path") 
movie2 = ("my_movie2_path") 

camera = PiCamera() 
camera.resolution = (320, 240) 
camera.framerate = 60 
rawCapture = PiRGBArray(camera, size=(320, 240)) 

# Load a cascade file for detecting faces 
face_cascade = cv2.CascadeClassifier('my_path/lbpcascade_frontalface.xml') 

t_start = time.time() 
fps = 0 

# Capture frames from the camera 

for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): 

    image = frame.array 

# Use the cascade file we loaded to detect faces 
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray) 
    print "1" 
    While True: 
    if len(faces) > 0 : 
     os.system('killall omxplayer.bin') 
     omcx = Popen(['omxplayer', '-b', movie2]) 
    else : 
     os.system('killall omxplayer.bin') 
     omcx = Popen(['omxplayer', '-b', movie1]) 


    #print "Found " + str(len(faces)) + " face(s)" 
    print "2" 

    rawCapture.truncate(0) 
+0

我认为你应该在这里解释更好的问题。我无法理解最后一句话。 –

+0

感谢您的重播,我编辑。 –

回答

1

这里的问题是while指令。程序在while循环中识别到一个脸部时。在这里,他继续杀死omxplayer并开始拍摄电影。
尝试删除while循环并查看代码是否有效。

+0

再次感谢您的回复。我指示删除。现在,当未检测到脸部时,视频看起来像是在旧代码中检测到脸部,视频非常严重地打开和关闭,视频不出现,只有黑色阴影快速出现在屏幕上。你对这种情况有什么建议吗? –

+0

你可以发布问题的截图吗? –

+0

我拍了一个2秒的视频。我加入了YouTube。链接:https://youtu.be/NPIPnlGYMOU –