Python OpenCV-如何在调用伺服功能时仅获取第一帧并跳过其他帧
我的项目是人脸识别。人脸识别位工作正常。但是,当面部被识别时,伺服打开车门,几秒钟后关闭。当摄像机前方无人时,伺服保持开门,开关门5-10次后停止。首先,我认为睡眠是解决方案,但这不起作用,我尝试了没有for循环,但仍然,伺服保持打开。我想OpenCV捕捉到了我站在摄像机前的几秒钟。有没有办法,我只能在摄像机前面有人(可识别的脸)时才能开门。我正在使用ip摄像机 谢谢Python OpenCV-如何在调用伺服功能时仅获取第一帧并跳过其他帧,python,opencv,Python,Opencv,我的项目是人脸识别。人脸识别位工作正常。但是,当面部被识别时,伺服打开车门,几秒钟后关闭。当摄像机前方无人时,伺服保持开门,开关门5-10次后停止。首先,我认为睡眠是解决方案,但这不起作用,我尝试了没有for循环,但仍然,伺服保持打开。我想OpenCV捕捉到了我站在摄像机前的几秒钟。有没有办法,我只能在摄像机前面有人(可识别的脸)时才能开门。我正在使用ip摄像机 谢谢 import cv2 import time import RPi.GPIO as GPIO import numpy as n
import cv2
import time
import RPi.GPIO as GPIO
import numpy as np
import threading
class main:
def servo(self):
print ("door open")
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
pwm=GPIO.PWM(11,50)
pwm.start(8)
time.sleep(5.20)
pwm.ChangeDutyCycle(3)
def face(self):
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainner/trainner.yml')
cascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);
cam = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX
num = 1
while True:
ret, frame =cam.read()
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
faces=faceCascade.detectMultiScale(gray, 1.2,5)
for(x,y,w,h) in faces:
cv2.rectangle(frame,(x,y),(x+w,y+h),(225,0,0),2)
Id, conf = recognizer.predict(gray[y:y+h,x:x+w])
if(conf >= 50):
if(Id==1):
Id="Person 1"
elif(Id==2):
Id="Person 2"#
else:
Id="Unknown"
cv2.putText(frame,str(Id), (x, y+h), font, 4,(255,255,255),2,cv2.LINE_AA)
cv2.imshow('im',frame)
if cv2.waitKey(1) ==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
app = main()
app.face()
我认为你在这里需要的是跟踪人脸,直到它离开帧,当你第一次检测到你调用函数的人脸时,你应该打开门,直到人脸不再被跟踪(离开帧)