1、图像人脸检测
import cv2 as cv
def face_detect_demo():
gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face_detect = cv.CascadeClassifier('D:/AI/Python/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
face = face_detect.detectMultiScale(gary, 1.01, 5, 0, (100, 100), (300, 300))
for x, y, w, h in face:
cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
cv.imshow('result', img)
img = cv.imread('face3.jpg')
face_detect_demo()
while True:
if ord(' ') == cv.waitKey(0):
break
cv.destroyAllWindows()
2、视频人脸检测
import cv2 as cv
def face_detect_demo(img):
gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
face_detect = cv.CascadeClassifier('D:/python/Python/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
face = face_detect.detectMultiScale(gary, 1.01, 5, 0, (100, 100), (300, 300))
for x, y, w, h in face:
cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
cv.imshow('result', img)
cap = cv.VideoCapture(0)
while True:
flag, frame = cap.read()
if not flag:
break
face_detect_demo(frame)
if ord(' ') == cv.waitKey(10):
break
cv.destroyAllWindows()
3、人脸识别
存储人脸信息
import os
import cv2
from PIL import Image
import numpy as np
def getImageAndLabels(path):
facesSamples = []
ids = []
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
face_detector = cv2.CascadeClassifier('D:/AI/Python/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
print('数据排列:', imagePaths)
for imagePath in imagePaths:
PIL_img = Image.open(imagePath).convert('L')
img_numpy = np.array(PIL_img, 'uint8')
faces = face_detector.detectMultiScale(img_numpy)
id = int(os.path.split(imagePath)[1].split('.')[0])
for x, y, w, h in faces:
ids.append(id)
facesSamples.append(img_numpy[y:y + h, x:x + w])
print('id:', id)
print('fs:', facesSamples)
return facesSamples, ids
if __name__ == '__main__':
path = 'D:/AI/Python/Lib/site-packages/cv2/data/tt'
faces, ids = getImageAndLabels(path)
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.train(faces, np.array(ids))
recognizer.write('D:/others/trainer.yml')
识别人脸
import cv2
import os
recogizer = cv2.face.LBPHFaceRecognizer_create()
recogizer.read('D:/others/trainer.yml')
names = []
def face_detect_demo(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_detector = cv2.CascadeClassifier('D:/AI/Python/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml')
face = face_detector.detectMultiScale(gray, 1.1, 5, cv2.CASCADE_SCALE_IMAGE, (100, 100), (300, 300))
for x, y, w, h in face:
cv2.rectangle(img, (x, y), (x + w, y + h), color=(0, 0, 255), thickness=2)
cv2.circle(img, center=(x + w // 2, y + h // 2), radius=w // 2, color=(0, 255, 0), thickness=1)
ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])
if confidence > 80:
cv2.putText(img, 'unknow', (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
else:
cv2.putText(img, str(names[ids - 1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)
cv2.imshow('result', img)
def name():
path = 'D:/AI/Python/Lib/site-packages/cv2/data/tt'
# names = []
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
for imagePath in imagePaths:
name = str(os.path.split(imagePath)[1].split('.', 2)[1])
names.append(name)
cap = cv2.VideoCapture(0)
name()
while True:
flag, frame = cap.read()
if not flag:
break
face_detect_demo(frame)
if ord(' ') == cv2.waitKey(10):
break
cv2.destroyAllWindows()
cap.release()