Python人脸识别(1)——使用CV2库进行人脸采集
图像预处理,处理成64*64大小的图片。# 0: 笔记本内置摄像头;# 图像去噪处理,使得训练出来的模型具备一定的泛化能力。# 默认获取100张图片作为训练数据集。# 改变亮度与对比度。# 在图片上显示名字。# 请输入您的name和id。# 将捕获照片的大小裁剪为正方形。# 将最长的边进行处理。
·
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import random
# 将捕获照片的大小裁剪为正方形
def getpaddingSize(shape):
# 照片的长和宽
h, w = shape
longest = max(h, w)
# 将最长的边进行处理
result = (np.array([longest]*4, int) - np.array([h, h, w, w], int)) // 2
return result.tolist()
# 图像去噪处理,使得训练出来的模型具备一定的泛化能力
def dealwithimage(img, h=64, w=64):
top, bottom, left, right = getpaddingSize(img.shape[0:2])
img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0])
img = cv2.resize(img, (h, w))
return img
# 改变亮度与对比度
def relight(imgsrc, alpha=1, bias=0):
imgsrc = imgsrc.astype(float)
imgsrc = imgsrc * alpha + bias
imgsrc[imgsrc < 0] = 0
imgsrc[imgsrc > 255] = 255
imgsrc = imgsrc.astype(np.uint8)
return imgsrc
# 捕获人脸
def GetFace(name,face_id):
# 0: 笔记本内置摄像头; 1: USB摄像头
camera = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# 获取分类器
face_detector = cv2.CascadeClassifier(r'./cv2data/haarcascade_frontalface_default.xml')
count = 1
while True:
# 默认获取100张图片作为训练数据集
if(count<=100):
print("It's processing %s image." % count)
# 读取图片
success,img = camera.read()
# 图片灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = face_detector.detectMultiScale(gray,1.3,8)
for (x, y, w, h) in faces:
# 图像预处理,处理成64*64大小的图片
face = gray[y:y+h, x:x+w]
face = cv2.resize(face, (64, 64))
# 图像去噪处理
face = dealwithimage(face)
# 改变亮度与对比度
#face = relight(face, random.uniform(0.5, 1.5), random.randint(-50, 50))
# 保存图片
cv2.imwrite("Facedata/User." + str(face_id) + '.' + str(count) + '.jpg', face)
# 在图片上显示名字
cv2.putText(img, name, (x, y-20), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2)
# 画一个矩形
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
count+=1
cv2.imshow('img', img)
# 保持画面持续
key = cv2.waitKey(30)&0xff
# Esc退出
if key == 27:
break
else:
break
# 关闭摄像头
camera.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
# 请输入您的name和id
name = input('Please input your name:')
face_id = input('Please input face id:')
GetFace(name,face_id)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)