Python实现人脸检测(个人、多人、视频)


我们先逐步进行学习。我将人脸检测的学习步骤分为如下几个方面。
(1—4是一些小步骤。5—7是具体实现的案例)
关于代码的相关意义我已经在程序中写上了备注(已经尽可能详细了!!)

1、加载图片:

源程序代码如下:

"""
   __author__="dazhi"
    2021/3/20-15:00
"""
#导入模块
import cv2 as cv
#读取图片(注意路径不要有中文,否则会报错)
img = cv.imread("C:\\Users\\26301\\Desktop\\2.jpg")
#显示图片(这时的照片会一闪而过)
cv.imshow('read_img',img)
#设置等待键盘输入(保证上边显示的照片可以停留)
#传入0表示无限等待,直到有东西输入(单位是毫秒)
cv.waitKey(3000)
#释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
cv.destroyAllWindows()

运行结果如下:

在这里插入图片描述

2、图片灰度转换:

源程序代码如下:

"""
   __author__="dazhi"
    2021/3/20-15:25
"""
#导入模块
import cv2 as cv
#读取图片(注意路径不要有中文,否则会报错)
BGR_img = cv.imread("C:\\Users\\26301\\Desktop\\2.jpg")
#显示图片(这时的照片会一闪而过)
cv.imshow('BGR_img',BGR_img)

#图片灰度转换
gray_img = cv.cvtColor(BGR_img,cv.COLOR_BGR2GRAY)
cv.imshow('gray_img',gray_img)

#保存图片
cv.imwrite('gray_img.jpg',gray_img)

#设置等待键盘输入(保证上边显示的照片可以停留)
#传入0表示无限等待,直到有东西输入(单位是毫秒)
cv.waitKey(0)
#释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
cv.destroyAllWindows()

运行结果如下:

在这里插入图片描述
在这里插入图片描述

3、修改图片尺寸(在此次人脸检测案例中未用到):

源程序代码如下:

"""
   __author__="dazhi"
    2021/3/20-15:30
"""
# 导入模块
import cv2 as cv

# 读取图片(注意路径不要有中文,否则会报错)
img = cv.imread("C:\\Users\\26301\\Desktop\\2.jpg")
# 显示图片(这时的照片会一闪而过)
cv.imshow('img', img)
print("原来图片的形状:",img.shape)
# 修改图片尺寸(宽度,高度)
resize_img = cv.resize(img, dsize=(200, 240))
print("修改后图片的形状:",resize_img.shape)
# 显示图片(这时的照片会一闪而过)
cv.imshow('resize_img', resize_img)
# 设置等待键盘输入(保证上边显示的照片可以停留)
# 传入0表示无限等待,直到有东西输入(单位是毫秒)
#设置只有输入q的时候、退出
while True:
    #ord('q')表示q对应的ascall
    if ord('q') == cv.waitKey(0):
        break

# 释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
cv.destroyAllWindows()

运行结果如下:

在这里插入图片描述

4、绘制矩形-圆形(只是简单地在图片上随便画一个):

源程序代码如下:

"""
   __author__="dazhi"
    2021/3/20-15:39
"""
# 导入模块
import cv2 as cv

# 读取图片(注意路径不要有中文,否则会报错)
img = cv.imread("C:\\Users\\26301\\Desktop\\2.jpg")
# 画矩形(x,y指的是矩形左上角的哪个点)
x, y, w, h = 50, 50, 80, 80
# color变量里参数的顺序是BGR,thickness表示的是宽度
# (x,y,x+w,y+h)左上和右下两个点
cv.rectangle(img, (x, y, x + w, y + h), color=(0, 255, 0), thickness=2)

#画圆center元组指的是原点的坐标
x,y,r = 200,200,100
cv.circle(img,center=(x,y),radius=r,color=(0,0,255),thickness=3)

# 显示图片(这时的照片会一闪而过)
cv.imshow('img', img)
# 设置等待键盘输入(保证上边显示的照片可以停留)
# 传入0表示无限等待,直到有东西输入(单位是毫秒)
cv.waitKey(0)
# 释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
cv.destroyAllWindows()

运行结果如下:

在这里插入图片描述

5、图像单个人脸检测:

源程序代码如下:

"""
   __author__="dazhi"
    2021/3/20-16:30
"""
# 导入库
import cv2 as cv


def face_detect_demo():
    # 将图片转换为灰度图片
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 加载特征数据
    face_detector = cv.CascadeClassifier('D:/wen10/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    #进行检测人脸操作
    faces = face_detector.detectMultiScale(gray)
    #得到的daces可能是多组x,y,h,w
    print("faces 的数值:",faces)
    for x, y, w, h in faces:
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
    # 显示图片(这时的照片会一闪而过)
    cv.imshow('result', img)


if __name__ == '__main__':
    # 读取图片(注意路径不要有中文,否则会报错)
    img = cv.imread("C:\\Users\\26301\\Desktop\\1.jpg")
    face_detect_demo()
    # 设置等待键盘输入(保证上边显示的照片可以停留)
    # 传入0表示无限等待,直到有东西输入(单位是毫秒)
    cv.waitKey(0)
    # 释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
    cv.destroyAllWindows()

运行结果如下:

在这里插入图片描述
在这里插入图片描述

6、图像多个人脸检测:

源程序代码如下:

"""
   __author__="dazhi"
    2021/3/20-16:49
"""
# 导入库
import cv2 as cv


def face_detect_demo():
    # 将图片转换为灰度图片
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 加载特征数据
    face_detector = cv.CascadeClassifier('D:/wen10/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    #进行检测人脸操作(参数也可以不写)
    faces = face_detector.detectMultiScale(gray,scaleFactor=1.01,minNeighbors=50)
    #得到的daces可能是多组x,y,h,w
    print("faces 的数值:",faces)
    for x, y, w, h in faces:
        #画矩形
        cv.rectangle(img, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
        #画圆
        cv.circle(img, center=(x + w // 2, y + h // 2),radius=w//2,color=(0,0,255),thickness=1)
    # 显示图片(这时的照片会一闪而过)
    cv.imshow('result', img)


if __name__ == '__main__':
    # 读取图片(注意路径不要有中文,否则会报错)
    img = cv.imread("C:\\Users\\26301\\Desktop\\5.jpg")
    face_detect_demo()
    # 设置等待键盘输入(保证上边显示的照片可以停留)
    # 传入0表示无限等待,直到有东西输入(单位是毫秒)
    cv.waitKey(0)
    # 释放内存(由于底层是c++写的,所以将底层里面的空间进行释放)
    cv.destroyAllWindows()

运行结果如下:

在这里插入图片描述

7、视频中的人脸检测:

源程序代码如下:

"""
   __author__="dazhi"
    2021/3/20-17:10
"""
#导入依赖
import cv2 as cv
def face_detect_demo(img):
    #将图片灰度
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    #加载特征数据
    face_detector = cv.CascadeClassifier('D:/wen10/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    #进行检测人脸操作(参数也可以不写)
    faces = face_detector.detectMultiScale(gray)
    for x,y,w,h in faces:
        #画矩形
        cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
        #画圆
        cv.circle(img,center=(x+w//2,y+h//2),radius=(w//2),color=(0,255,0),thickness=2)
    # 显示图片(这时的照片会一闪而过)
    cv.imshow('result',img)
#读取视频
cap=cv.VideoCapture('video.mp4')
#播放进行读取(一帧一帧的走)
while True:
    #flag表示是否在播放(布尔类型)
    flag,frame=cap.read()
    #判断是否在播放
    if not flag:
        break
    face_detect_demo(frame)
    #输入q的时候进行关闭
    if ord('q') == cv.waitKey(10):
        break
#释放内存
cv.destroyAllWindows()
#释放视频的空间
cap.release()

运行结果如下:

(这个可以实现视频播放过程中识别,但是博主忘记怎么在csdn里放视频了,所以就在视频的播放过程中截了几张图。如下~~~~~)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
【资源说明】 毕设项目-基于python实现多人人脸识别的课堂考勤系统设计源码.zip 本项目是一个简单的课堂考勤系统设计,可以用于课堂考勤。仅需将其部署在服务器上即可使用。 ## 部署 csdn下载该项目解压 ### 下载模型 请在根目录下创建一个名为 `model` 的文件夹,并将模型文件添加到该文件夹中。 安装依赖 ```bash cd classroom_attendance_face_recognition pip install -r requirements.txt ``` 修改配置文件 本仓库下已经提供了一个默认的 `config.py` 文件,但是不建议在生产环境中直接修改并使用该文件,因为通过 `git` 更新项目时会覆盖掉 `config.py`。 建议在项目根目录下复制一份 `config.py` 为 `config_local.py`,并在 `config_local.py` 中修改相关配置。 config_local.py ```python from config import * 定义你需要覆写的配置 例如: PORT = 8888 ``` 当服务端检测到有 `config_local.py` 文件时,会优先使用该文件中的配置。 启动服务 ```bash python app.py ``` 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢地上爬的孩子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值