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