Python+Opencv人脸识别,调用摄像头对人脸和眼睛进行捕获
效果图
代码
# -*- coding=utf-8 -*-
import cv2
def getimg(img):
faceCascade=cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
smileCascade = cv2.CascadeClassifier("haarcascade_smile.xml")
eye_cascade = cv2.CascadeClassifier("haarcascade_eye.xml")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 首先检测人脸,返回的是框住人脸的矩形框
faces=faceCascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=8,minSize=(55, 55),flags=cv2.CASCADE_SCALE_IMAGE)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
roi_gray = gray[y:y + h, x:x + w]
roi_color = img[y:y + h, x:x + w]
smile = smileCascade.detectMultiScale(roi_gray,scaleFactor=1.16, minNeighbors=35,minSize=(25, 25),flags=cv2.CASCADE_SCALE_IMAGE)
# 框出上扬的嘴角并对笑脸打上Smile标签
for (x2, y2, w2, h2) in smile:
cv2.rectangle(roi_color, (x2, y2), (x2 + w2, y2 + h2), (255, 0, 0), 2)
cv2.putText(img, 'Smile', (x, y - 7), 3, 1.2, (0, 255, 0), 2, cv2.LINE_AA)
eyes = eye_cascade.detectMultiScale(roi_gray, 1.1, 1, cv2.CASCADE_SCALE_IMAGE, (2, 2))
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
cv2.imshow('11',img)
capture = cv2.VideoCapture(0)
while True:
ret, frame = capture.read()
frame = cv2.flip(frame, 1)
getimg(frame)
c = cv2.waitKey(10)
# 如果在这个时间段内, 用户按下ESC(ASCII码为27),则跳出循环,否则,则继续循环
if c == 27:
cv2.destroyAllWindows() # 销毁所有窗口
break