前言
Python火是有他的道理的,因为他拥有特别多的第三方库,可以尽情的享用前人大佬的智慧成果,不像C/C++一样 ,几乎什么都要自己写,近一段时间在学与人脸识别,刚学出怎样识别人脸并且在短时间内保存快照到指定文件夹,下一步需要学习Tensorflow库中的神经网络实现模型训练,这俩结合之后就做好简单的人脸识别的框架了。
代码
#如果运行的时候出现cv2错误的话,检查代码和路径(尤其是路径)
import cv2
import sys
import os
import numpy as np
def Exit():
try:
os.mkdir('/Facedata') # 创建目录,Reserence_Page:134
except Exception as e:
print("友情提示:创建目录失败,请检查目标路径的上层路径是否可写")
def Video_detected():
'''
从视频中进行人脸检测
'''
# 创建一个级联分类器,家在一个 .xml文件它既可以是Haar特征,也可以是LBP特征的分类器
face_cascade = cv2.CascadeClassifier(
'D:/python environment/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('D:/python environment/Lib/site-packages/cv2/data/haarcascade_eye.xml')
name = input("首先,你得说一下你叫啥名或自己的昵称吧,方便我给你命名:\n")
# 打开摄像头
camera = cv2.VideoCapture(0)
cv2.namedWindow('Dynamic')
i = 0
count = 0
while (True):
# 读取一帧图像 ret
ret, frame = camera.read()
# 判断图片读取是否成功
if ret:
gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 人脸检测
faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
for (x, y, w, h) in faces:
# 在原图上绘制矩形
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2) # 蓝色
roi_gray = gray_img[y:y + h, x:x + w]
# 眼睛检测
eyes = eye_cascade.detectMultiScale(roi_gray, 1.1, 5, 0, (40, 40))
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(frame, (ex + x, ey + y), (ex + x + ew, ey + y + eh), (0, 255, 0), 2) # 绿色
count += 1
if count <= 10:
# 每次检测到脸眼睛之后,执行拍摄
cv2.imwrite("/Facedata/User." + str(name) + '.' + str(count) + '.jpg', gray_img)
cv2.imshow('Dynamic', frame)
# 如果按下q键则退出
if cv2.waitKey(10) & 0xff == ord('q'): # waitkey里面是以毫秒计数
break
# if wait==27: #渣渣渣渣,不能使用两段语句 可能的原因:1.内存不够,机器渣渣 2.内存溢出 3.不知道。。。
# break
camera.release()
cv2.destroyAllWindows()
# 线程强制关闭,方便下一次启动调试
sys.exit(0)
if __name__ == '__main__':
exit = os.path.isdir('/Facedata')
if not exit:
Exit()
Video_detected()
要点
安装cv的时候出现小问题和运行时少加了斜杠。。。
退出登录?