使用Python和OpenCV实现实时人脸检测并保存截图

news/2024/7/24 9:28:07 标签: python, opencv, 人工智能

在本篇博客中,我们将使用Python和OpenCV库实现一个实时人脸检测的小项目。我们将利用OpenCV中的Haar级联分类器来检测摄像头捕获的图像中的人脸。

项目功能

  1. 通过摄像头实时捕获视频流。
  2. 使用Haar级联分类器检测视频帧中的人脸。
  3. 在检测到的人脸周围绘制矩形框。
  4. 实时显示检测结果。
  5. 截图人脸并保存。

环境准备

确保您已经安装了Python和OpenCV。如果尚未安装,请按照以下步骤进行安装:

  1. 安装Python:请访问Python官网下载并安装适合您操作系统的Python版本。
  2. 安装OpenCV:在命令行中输入以下命令以安装OpenCV库:
    pip install opencv-python
    

项目代码

首先,我们需要导入所需的库:

python">import cv2

接下来,加载预训练的Haar级联分类器: 

python">face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

现在,我们将编写一个函数来检测图像中的人脸并在检测到的人脸周围绘制矩形框: 

python">def detect_faces(img, cascade):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    return img

 最后,我们将捕获摄像头的视频流,并对每一帧应用人脸检测:

python">cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    frame = detect_faces(frame, face_cascade)
    cv2.imshow('Real-time Face Detection', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

现在,您可以运行上面的代码,启动实时人脸检测程序。在弹出的窗口中,您应该能看到摄像头捕获的图像,检测到的人脸周围用矩形框标记。按“q”键退出程序。

但是如果要实现截图并且保存到文件夹还需要:
导入额外的库来处理时间和文件操作:

python">def save_faces(img, faces, output_dir):
    for i, (x, y, w, h) in enumerate(faces):
        face = img[y:y + h, x:x + w]
        filename = os.path.join(output_dir, f'face_{i}.png')
        cv2.imwrite(filename, face)

现在,我们需要稍微修改 detect_faces 函数,使其返回检测到的人脸坐标:

python">def detect_faces(img, cascade):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    return img, faces

接下来,在捕获摄像头的视频流的循环中,我们将为每个检测到的人脸创建一个以实时时间命名的文件夹,并将人脸截图保存到其中:

python">cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    frame, faces = detect_faces(frame, face_cascade)

    if len(faces) > 0:
        timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
        output_dir = os.path.join('faces', timestamp)
        os.makedirs(output_dir, exist_ok=True)
        save_faces(frame, faces, output_dir)

    cv2.imshow('Real-time Face Detection', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

现在,当程序检测到人脸时,它将自动截取人脸并将其保存为PNG格式的图像。这些图像将保存在一个名为 "faces" 的文件夹中,该文件夹中包含以实时时间命名的子文件夹。按“q”键退出程序。


http://www.niftyadmin.cn/n/195208.html

相关文章

10 kafka生产者发送消息的原理

1.发送原理: 在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程 中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator, Sender 线程不断从 RecordAccumulator 中拉取消息发送到…

函数的七大结论【总结,f(x),导数,积分】

上一部分对于函数的四大特性进行了讲解,这是属于中学数学的。 但是我们大学中学的是微积分,所以更加关注 导数 和 积分 考微积分:一定是给f’(x),然后研究它的微分(导数) 和 积分 f(x)、f’(x)、f(x)积分的…

前后台协议联调拦截器

前后台协议联调&拦截器4,前后台协议联调4.1 环境准备4.2 列表功能4.3 添加功能4.4 添加功能状态处理4.5 修改功能4.6 删除功能5,拦截器5.1 拦截器概念5.2 拦截器入门案例5.2.1 环境准备5.2.2 拦截器开发步骤1:创建拦截器类步骤2:配置拦截器类步骤3:S…

驾校预约课程管理系统设计与实现

2021030104 摘要:本文主要介绍了基于Java语言的SSM框架技术开发的驾校预约课程管理系统,包括需求分析、概要设计、详细设计、编码以及数据库概念设计、逻辑设计和物理设计等方面的内容。 关键词:Java语言;SSM框架技术;MyBatis技术;eclipse开发环境;mysql数据库;需求分…

周记录总结

1.oracle的number(11,2) 指的是总长度为11,小数2位 Oracle对超精度的数字会自动四舍五入,整数位(9位)别超就可以 2.MapperScan("com.*.mapper") 与 MapperScan("com.**.mapper")的区别 MapperScan("com.*.mapper")&#x…

【NLP入门教程】四、句法分析

句法分析(Syntactic Parsing)是自然语言处理中的一项重要任务,其目标是确定文本中词元之间的结构关系。句法分析可以分为两大类:短语结构分析(Phrase Structure Parsing)和依存关系分析(Dependency Parsing)。 1. 短语结构分析 短语结构分析旨在构建一个树状结构,以…

【NLP入门教程】八、数据清洗

数据清洗是文本预处理的第一步,主要目的是去除文本中的噪声和无关信息,使文本更加干净、规范化。数据清洗通常包括以下几个方面: 1 去除HTML标签 当我们从网页抓取文本数据时,可能会遇到包含HTML标签的文本。为了使文本更加可读,我们需要去除这些标签。可以使用Python的…

【JavaWeb】10— Vue.js

⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍…