Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 在数组中保存不可识别的面_Python_Opencv_Raspberry Pi_Face Recognition - Fatal编程技术网

Python 在数组中保存不可识别的面

Python 在数组中保存不可识别的面,python,opencv,raspberry-pi,face-recognition,Python,Opencv,Raspberry Pi,Face Recognition,我正在做一个“人脸识别”项目。 我已经做了识别部分,我的项目是基于3个代码文件 人脸检测(采集约50人的样本) 面部训练(将训练捕获的图像) 人脸识别(将能够实时识别经过训练的图像 时间) 现在我要做的是,如果一个不在数据集中的未知人物在摄像机中被检测到超过3次,人脸识别程序将等待一个wile,然后人脸检测将运行,该检测将采集该人物的样本并进行训练,以便下一次该人物在摄像机上时能够被识别。这是我的面部识别代码 import cv2 from picamera.array import PiRGB

我正在做一个“人脸识别”项目。 我已经做了识别部分,我的项目是基于3个代码文件

  • 人脸检测(采集约50人的样本)
  • 面部训练(将训练捕获的图像)
  • 人脸识别(将能够实时识别经过训练的图像 时间)
  • 现在我要做的是,如果一个不在数据集中的未知人物在摄像机中被检测到超过3次,人脸识别程序将等待一个wile,然后人脸检测将运行,该检测将采集该人物的样本并进行训练,以便下一次该人物在摄像机上时能够被识别。这是我的面部识别代码

    import cv2
    from picamera.array import PiRGBArray
    from picamera import PiCamera
    import picamera 
    import numpy as np 
    import pickle
    import RPi.GPIO as GPIO
    from time import sleep
    from subprocess import call
    import time
    import datetime
    import boto3
    from botocore.client import Config
    import serial
    
    # port = serial.Serial('/dev/ttyUSB0',9600)
    now = datetime.datetime.now()
    currentDate = str(now.month) + "_" + str(now.day) + "_" + str(now.year)+ "_" + str(now.hour)
    cloudpath ='Videos/cctvfootage'+currentDate+'.mp4'
    with open('labels', 'rb') as f:
        dict= pickle.load(f)
        f.close()
        #setup the camera
    camera =PiCamera()
    camera.resolution = (600,500)
    camera.framerate = 30
    rawCapture = PiRGBArray(camera, size=(600, 500))
    
    
    
    # Load prebuilt model for Frontal Face detection
    faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
    # Create Local Binary Patterns Histograms for face recognization
    recognizer = cv2.face.createLBPHFaceRecognizer()
    # Load the trained mode
    recognizer.load("trainer.yml")
    
    font = cv2.FONT_HERSHEY_SIMPLEX
    # Define the codec and create VideoWriter object
    fourcc = cv2.VideoWriter_fourcc(*'X264')
    out = cv2.VideoWriter(cloudpath, fourcc, 2.0, (camera.resolution))
    lastRes=''
    for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
        frame = frame.array
        cv2.rectangle(frame, (0, 0), (455, 30), (0,0,0), thickness=-1)
        cv2.putText(frame, time.asctime(), (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), lineType=cv2.LINE_AA, thickness=2)  
        data = open(cloudpath, 'rb') 
         # Convert the captured frame into grayscale
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = faceCascade.detectMultiScale(gray, scaleFactor = 1.5, minNeighbors = 5)
        # For each face in faces
        for (x, y, w, h) in faces:
             # Create rectangle around the face
            roiGray = gray[y:y+h, x:x+w]
    # Recognize the face belongs to which ID
            id_, conf = recognizer.predict(roiGray)
            
            for name, value in dict.items():
                if value == id_:
                 break
                 print(name)
                 print(conf)
    #agar confidence <=70 hoga toh door open hoga wrna nhi
                         # Put text describe who is in the picture
            if conf <= 70:
                
                cv2.rectangle(frame,(x-20,y-20), (x+w+20,y+h+20), (0,255,0), 4)
                cv2.putText(frame,name,(x,y-40), font, 1, (255,255,255), 3)
               
                
            else:
                cv2.rectangle(frame,(x-20,y-20), (x+w+20,y+h+20), (0,255,0), 4)
                cv2.putText(frame,"Unknown", (x,y-40), font, 1, (255,255,255),3)
    
        cv2.imshow('frame', frame)
        out.write(frame)
        key = cv2.waitKey(1)
    
        rawCapture.truncate(0)  
    #if cross button is pressed close the cam
        if key == 27:
            print("Video Saved Successfully..")
            break               
    cv2.destroyAllWindows()
    
    导入cv2
    从picamera.array导入PiRGBArray
    从picamera进口picamera
    进口皮卡梅拉
    将numpy作为np导入
    进口泡菜
    将RPi.GPIO导入为GPIO
    从时间上导入睡眠
    从子流程导入调用
    导入时间
    导入日期时间
    进口boto3
    从botocore.client导入配置
    导入序列号
    #port=serial.serial('/dev/ttyUSB0',9600)
    now=datetime.datetime.now()
    currentDate=str(now.month)+“”+str(now.day)+“”+str(now.year)+“”+str(now.hour)
    cloudpath='Videos/CCTV视频'+currentDate+'.mp4'
    将open('labels','rb')作为f:
    dict=酸洗负荷(f)
    f、 关闭()
    #设置相机
    照相机=皮卡梅拉()
    相机分辨率=(600500)
    相机帧率=30
    rawCapture=PiRGBArray(摄像机,尺寸=(600500))
    #用于正面人脸检测的负载预建模型
    faceCascade=cv2.CascadeClassifier(“haarcascade\u frontalface\u default.xml”)
    #创建用于人脸识别的局部二元模式直方图
    recognizer=cv2.face.createLBPHFaceRecognizer()
    #加载训练模式
    识别器加载(“trainer.yml”)
    font=cv2.font\u HERSHEY\u SIMPLEX
    #定义编解码器并创建VideoWriter对象
    fourcc=cv2.VideoWriter_fourcc(*“X264”)
    out=cv2.VideoWriter(cloudpath,fourcc,2.0,(相机分辨率))
    lastRes=''
    对于照相机中的帧。连续捕获(rawCapture,format=“bgr”,使用\u video\u port=True):
    frame=frame.array
    cv2.矩形(框架,(0,0),(455,30),(0,0,0),厚度=-1)
    cv2.putText(frame,time.asctime(),(10,25),cv2.FONT\u HERSHEY\u SIMPLEX,1.0,(0,255,0),线型=cv2.LINE\u AA,厚度=2)
    数据=打开(云路径'rb')
    #将捕获的帧转换为灰度
    灰色=cv2.CVT颜色(边框,cv2.COLOR\u BGR2GRAY)
    faces=Facescade.detectMultiScale(灰色,scaleFactor=1.5,minNeighbors=5)
    #对于面中的每个面
    对于面中的(x,y,w,h):
    #围绕面创建矩形
    roiGray=灰色[y:y+h,x:x+w]
    #识别属于哪个ID的脸
    id,conf=recognizer.predict(灰色)
    对于名称,dict.items()中的值:
    如果值==id\ux:
    打破
    印刷品(名称)
    打印(配置)
    
    #琼脂自信你试过deepface吗?它的流函数访问您的网络摄像头,并应用实时人脸识别和人脸属性分析(年龄、性别和情绪预测)。您也可以将网络摄像机流媒体内容切换为视频

    #!pip install deepface
    from deepface import DeepFace
    DeepFace.stream("my_db")
    

    这里,my_db是一个文件夹,用于存储我的面部数据库。

    有人需要帮助吗