python机器学习——人脸识别

用OpenCV-Python从网络摄像头采集信息

import cv2

# 初始化网络摄像头
cap = cv2.VideoCapture(0)

# 定义网格摄像头采集图像比例系数
scaling_factor = 0.5

# 循环采集直到按下Esc键
while True:
    # 采集当前画面
    ret, frame = cap.read()

    # 调整帧的大小
    frame = cv2.resize(frame, None, fx=scaling_factor, fy=scaling_factor, 
            interpolation=cv2.INTER_AREA)

    # 显示帧
    cv2.imshow('Webcam', frame)

    # 等待1秒,然后采集帧,检查是否按了Esc键
    c = cv2.waitKey(1)
    if c == 27:
        break

# 释放视频采集对象
cap.release()

# 关闭所有窗口
cv2.destroyAllWindows()

用Haar级联创建一个人脸识别器

Haar级联通过在多个尺度上从图像中提取大量的简单特征来实现,简单特征主要指边线、矩形特征等,这些特征都非常易于计算,然后通过创建一系列简单的分类器来做训练。

import cv2
import numpy as np

# 导入人脸检测级联文件
face_cascade = cv2.CascadeClassifier('cascade_files/haarcascade_frontalface_alt.xml')

# 确定级联文件是否正确的加载
if face_cascade.empty():
    raise IOError('Unable to load the face cascade classifier xml file')

# 初始化视频采集对象
cap = cv2.VideoCapture(0)

# 定义图像向下采样的比例系数
scaling_factor = 0.5

# 循环采集直到按下Esc键
while True:
    # 采集当前帧并进行调整
    ret, frame = cap.read()
    frame = cv2.resize(frame, None, fx=scaling_factor, fy=scaling_factor, 
            interpolation=cv2.INTER_AREA)

    # 将图像转化为灰度
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 在灰度图像上运行人脸检测器
    face_rects = face_cascade.detectMultiScale(gray, 1.3, 5)

    # 在脸部画出矩形
    for (x,y,w,h) in face_rects:
        cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 3)

    # 展示出图像
    cv2.imshow('Face Detector', frame)

    # 检查是否按下Esc键
    c = cv2.waitKey(1)
    if c == 27:
        break

# 释放视频采样对象并关闭窗口
cap.release()
cv2.destroyAllWindows()

检测眼睛和鼻子

import cv2
import numpy as np

# 人脸,眼睛,和鼻子级联文件
face_cascade = cv2.CascadeClassifier('cascade_files/haarcascade_frontalface_alt.xml')
eye_cascade = cv2.CascadeClassifier('cascade_files/haarcascade_eye.xml')
nose_cascade = cv2.CascadeClassifier('cascade_files/haarcascade_mcs_nose.xml')

# 检查脸部级联文件是否加载
if face_cascade.empty():
    raise IOError('Unable to load the face cascade classifier xml file')

# 检查眼睛级联文件是否加载
if eye_cascade.empty():
    raise IOError('Unable to load the eye cascade classifier xml file')

# 检查鼻子级联文件是否加载
if nose_cascade.empty():
    raise IOError('Unable to load the nose cascade classifier xml file')

# 初始化视频采集对象并定义比例系数
cap = cv2.VideoCapture(0)
scaling_factor = 0.5

while True:
    # 读取当前帧画面,调整大小,转化为灰度
    ret, frame = cap.read()
    frame = cv2.resize(frame, None, fx=scaling_factor, fy=scaling_factor, 
            interpolation=cv2.INTER_AREA)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 在灰度图像上运行人脸检测器
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)

    # 在每张脸的矩形区域运行眼睛和鼻子检测器
    for (x,y,w,h) in faces:
        # 从彩色与灰度图中提取人脸ROI信息
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = frame[y:y+h, x:x+w]

        # 在灰度图ROI信息中检测眼睛
        eye_rects = eye_cascade.detectMultiScale(roi_gray)

        # 在灰度图ROI信息中检测鼻子
        nose_rects = nose_cascade.detectMultiScale(roi_gray, 1.3, 5)

        # 在眼睛周围画绿色的圈
        for (x_eye, y_eye, w_eye, h_eye) in eye_rects:
            center = (int(x_eye + 0.5*w_eye), int(y_eye + 0.5*h_eye))
            radius = int(0.3 * (w_eye + h_eye))
            color = (0, 255, 0)
            thickness = 3
            cv2.circle(roi_color, center, radius, color, thickness)

        for (x_nose, y_nose, w_nose, h_nose) in nose_rects:
            cv2.rectangle(roi_color, (x_nose, y_nose), (x_nose+w_nose, 
                y_nose+h_nose), (0,255,0), 3)
            break

    # 展示图像
    cv2.imshow('Eye and nose detector', frame)

    # 检查是否按了Esc键
    c = cv2.waitKey(1)
    if c == 27:
        break

# R释放视频采样对象,并关闭窗口
cap.release()
cv2.destroyAllWindows()

文中用到的人脸,眼睛,和鼻子级联文件都已经上传到csdn。下载地址:https://download.csdn.net/download/qq_41251963/10611907

猜你喜欢

转载自blog.csdn.net/qq_41251963/article/details/81805970