Python人脸识别

实现效果 

Python人脸识别_第1张图片

代码

import cv2

# 加载人脸识别分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 打开摄像头
cap = cv2.VideoCapture(0)

while True:
    # 读取摄像头捕获的帧
    ret, frame = cap.read()

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

    # 使用分类器检测人脸
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    # 在帧上绘制人脸框
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # 显示结果图像
    cv2.imshow('人脸识别', frame)

    # 按下 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头资源
cap.release()
cv2.destroyAllWindows()

解释

加载人脸识别分类器(理论可不看直接用就行)

1.cv2.CascadeClassifier() 是 OpenCV 提供的一个级联分类器对象,用于进行目标检测任务。在这行代码中,我们创建了一个名为 face_cascade 的级联分类器对象。

2.'haarcascade_frontalface_default.xml' 是一个训练好的人脸检测器模型文件,它基于 Haar 特征和 Adaboost 算法进行训练。这个模型文件包含了用于检测人脸的特征和分类器参数。

3.在运行这段代码之前,你需要确保 haarcascade_frontalface_default.xml 文件存在,并且位于当前工作目录下或者指定了正确的路径。(没有这个文件的可以私聊我)

 打开摄像头 

创建了一个 VideoCapture 对象,用于从摄像头读取视频流或者视频文件。

cv2.VideoCapture(0) 中的参数 0 表示打开默认的摄像头设备。如果你的电脑上有多个摄像头,可以使用不同的整数值来选择不同的摄像头。

通过创建 VideoCapture 对象,我们可以使用它提供的方法来获取连续的视频帧,然后对每一帧进行处理,如人脸检测、图像识别等

读取摄像头捕获的帧

cap 对象中读取一帧视频帧,并将结果赋值给 frame 变量

cap.read() 方法返回两个值,第一个值 ret 表示是否成功读取了一帧数据,如果成功则返回 True,否则返回 False。第二个值 frame 是一个 Numpy 数组,表示读取到的视频帧。

每次调用 cap.read() 方法都会读取下一帧视频帧,因此我们可以使用循环语句来不断读取视频流中的每一帧数据。

将帧转换为灰度图像 

将读取到的彩色图像 frame 转换为灰度图像 gray

OpenCV 中,许多图像处理操作需要使用灰度图像作为输入,而不是彩色图像。因此,在进行人脸检测、边缘检测、图像处理等操作时,通常需要先将彩色图像转换为灰度图像。

cv2.cvtColor() 是 OpenCV 提供的一个颜色空间转换函数,用于将图像从一个颜色空间转换到另一个颜色空间。其中,frame 是输入图像,cv2.COLOR_BGR2GRAY 是目标颜色空间,表示将图像从 BGR(蓝绿红)颜色空间转换为灰度颜色空间。

使用分类器检测人脸 

gray 是输入的灰度图像,scaleFactor 是每个图像尺度的缩小比例,minNeighbors 是每个候选矩形应该保留的邻居矩形数目的最小值,minSize 是检测到的目标的最小尺寸。

在帧上绘制人脸框 

for (x, y, w, h) in faces: 循环遍历每个检测到的人脸区域,并将其表示为 (x, y, w, h) 四元组,其中 (x, y) 是矩形左上角的坐标,wh 分别是矩形的宽度和高度。

cv2.rectangle() 是 OpenCV 提供的一个绘制矩形框的函数,用于在图像上绘制矩形。其中,frame 是要绘制矩形框的图像,(x, y)(x+w, y+h) 分别是矩形框左上角和右下角的坐标,(0, 255, 0) 是绘制矩形框的颜色(在 RGB 颜色空间中,绿色的值为 255,而红色和蓝色的值都为 0),2 是矩形框的线宽。

你可能感兴趣的:(python,opencv,计算机视觉)