Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV-如何在调用伺服功能时仅获取第一帧并跳过其他帧_Python_Opencv - Fatal编程技术网

Python OpenCV-如何在调用伺服功能时仅获取第一帧并跳过其他帧

Python OpenCV-如何在调用伺服功能时仅获取第一帧并跳过其他帧,python,opencv,Python,Opencv,我的项目是人脸识别。人脸识别位工作正常。但是,当面部被识别时,伺服打开车门,几秒钟后关闭。当摄像机前方无人时,伺服保持开门,开关门5-10次后停止。首先,我认为睡眠是解决方案,但这不起作用,我尝试了没有for循环,但仍然,伺服保持打开。我想OpenCV捕捉到了我站在摄像机前的几秒钟。有没有办法,我只能在摄像机前面有人(可识别的脸)时才能开门。我正在使用ip摄像机 谢谢 import cv2 import time import RPi.GPIO as GPIO import numpy as n

我的项目是人脸识别。人脸识别位工作正常。但是,当面部被识别时,伺服打开车门,几秒钟后关闭。当摄像机前方无人时,伺服保持开门,开关门5-10次后停止。首先,我认为睡眠是解决方案,但这不起作用,我尝试了没有for循环,但仍然,伺服保持打开。我想OpenCV捕捉到了我站在摄像机前的几秒钟。有没有办法,我只能在摄像机前面有人(可识别的脸)时才能开门。我正在使用ip摄像机

谢谢

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

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