OpenCV - 调用伺服函数时如何仅获取第一帧并跳过其他帧



我正在做的项目是人脸识别。人脸识别位工作正常。但是,当人脸被识别出来时,伺服器打开门并在几秒钟后关闭。当镜头前没有人时,伺服不断打开门。打开和关闭门5-10次后停止。首先,我认为睡眠将是解决方案,但这不起作用,我也尝试了没有for循环,但是伺服器仍然保持打开状态。我认为OpenCV在我站在相机前的几秒钟内捕捉到帧。有什么办法只有在镜头前有一个人(识别的脸(时才能打开门。我正在使用网络摄像机

谢谢

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()

我认为你在这里需要的是跟踪面部,直到它离开框架,当你第一次检测到人脸时,你调用你的函数,你应该保持门打开,直到人脸不再被跟踪(离开框架(

最新更新