图像处理篇---face_recognition库实现人脸检测

以下是使用face_recognition库实现人脸检测的详细步骤、实例代码及解释:

一、环境准备

1. 安装依赖库
pip install face_recognition opencv-python  # 核心库
pip install matplotlib  # 用于显示图像(可选)
2. 依赖说明
  • face_recognition:封装 dlib 的人脸检测和识别功能。
  • opencv-python:用于图像处理和结果可视化
  • matplotlib:用于在 Jupyter 或脚本中显示图像。

二、人脸检测基本流程

步骤 1:加载图像

使用face_recognition.load_image_file()加载图像,返回 NumPy 数组(BGR 格式)。

步骤 2:检测人脸位置

调用face_recognition.face_locations()返回人脸边界框坐标(top, right, bottom, left)。

步骤 3:可视化结果

使用 OpenCV 绘制边界框并显示图像。

三、实例代码:单张图像人脸检测

import face_recognition
import cv2
import matplotlib.pyplot as plt# 1. 加载图像
image = face_recognition.load_image_file("test.jpg")  # 替换为你的图像路径# 2. 检测人脸位置(返回(top, right, bottom, left)格式的元组列表)
face_locations = face_recognition.face_locations(image)# 3. 复制原图用于绘制边界框
image_with_boxes = image.copy()# 4. 遍历检测到的人脸并绘制边界框
for (top, right, bottom, left) in face_locations:cv2.rectangle(image_with_boxes, (left, top), (right, bottom), (0, 255, 0), 2)# 5. 转换颜色通道顺序(face_recognition使用RGB,OpenCV使用BGR)
image_with_boxes = cv2.cvtColor(image_with_boxes, cv2.COLOR_RGB2BGR)# 6. 显示结果(在脚本中使用cv2,在Jupyter中使用matplotlib)
cv2.imshow("Face Detection", image_with_boxes)
cv2.waitKey(0)  # 按任意键关闭窗口
cv2.destroyAllWindows()# 或在Jupyter中显示:
# plt.figure(figsize=(10, 10))
# plt.imshow(image_with_boxes)
# plt.axis('off')
# plt.show()

四、参数调整与进阶用法

1. 检测模型选择

face_locations()支持两种检测模型:

# HOG模型(CPU友好,速度快但精度稍低)
face_locations = face_recognition.face_locations(image, model="hog")# CNN模型(精度高,需GPU加速)
face_locations = face_recognition.face_locations(image, model="cnn")
2. 批量处理多图像
import osimage_paths = ["img1.jpg", "img2.jpg", "img3.jpg"]
for path in image_paths:image = face_recognition.load_image_file(path)face_locations = face_recognition.face_locations(image)print(f"在 {path} 中检测到 {len(face_locations)} 张人脸")
3. 视频流实时检测
import cv2video_capture = cv2.VideoCapture(0)  # 0表示默认摄像头while True:ret, frame = video_capture.read()rgb_frame = frame[:, :, ::-1]  # BGR转RGBface_locations = face_recognition.face_locations(rgb_frame)for (top, right, bottom, left) in face_locations:cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)cv2.imshow('Video', frame)if cv2.waitKey(1) & 0xFF == ord('q'):  # 按'q'键退出breakvideo_capture.release()
cv2.destroyAllWindows()

五、关键点检测(可选)

除了边界框,还可检测人脸关键点(眼睛、鼻子、嘴巴等):

# 检测人脸关键点
face_landmarks = face_recognition.face_landmarks(image)# 绘制关键点
for landmarks in face_landmarks:for feature in landmarks.keys():for (x, y) in landmarks[feature]:cv2.circle(image_with_boxes, (x, y), 2, (0, 0, 255), -1)

六、代码解释

  1. 加载图像load_image_file()将图像读取为 NumPy 数组,格式为 RGB(与 OpenCV 的 BGR 不同)。
  2. 人脸检测face_locations()返回每个人脸的边界框坐标,顺序为(top, right, bottom, left)
  3. 边界框绘制:使用 OpenCV 的rectangle()函数在原图上绘制绿色矩形。
  4. 颜色通道转换cv2.cvtColor()将 RGB 转换为 BGR,确保显示正常。
  5. 显示结果cv2.imshow()显示图像,waitKey(0)等待按键关闭窗口。

七、常见问题与解决方案

  1. 安装失败

    • 确保已安装 CMake 和 dlib 依赖(如brew install cmake dlib on macOS)。
    • 使用 conda 环境:conda install -c conda-forge dlib
  2. 检测不到人脸

    • 尝试切换模型(model="cnn")。
    • 调整图像亮度 / 对比度,或使用face_recognition.load_image_file()前预处理图像。
  3. 性能问题

    • 视频流处理时降低分辨率:video_capture.set(3, 640); video_capture.set(4, 480)
    • 仅每隔几帧检测一次人脸。

八、应用场景扩展

  1. 人脸数量统计:统计照片或视频中的人脸数量。
  2. 人脸裁剪:提取检测到的人脸区域用于后续分析。
  3. 人流量监控:结合 OpenCV 的背景减除算法,统计通过特定区域的人脸数量。

通过以上步骤,你可以快速实现基于face_recognition的人脸检测系统,适用于原型验证和轻量级应用。若需更高精度或定制化能力,建议转向深度学习框架(如 PyTorch)训练自定义模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vb.net oledb-Access 数据库本身不支持命名参数,赋值必须和参数顺序一致才行

参数顺序问题:OleDb 通常依赖参数添加的顺序而非名称,为什么顺序要一样? OleDbParameter 顺序依赖性的原因 OleDb 数据提供程序依赖参数添加顺序而非名称,这是由 OLE DB 规范和 Access 数据库的工作机制共同决定的。理解这个问题需要从数据库底层通信…

Syslog 全面介绍及在 C 语言中的应用

Syslog 概述 Syslog 是一种工业标准的日志记录协议,用于在网络设备之间传递日志消息。它最早由 Eric Allman 在 1980 年代为 BSD Unix 开发,现在已成为系统和网络管理的重要组成部分。Syslog 协议允许设备将事件消息发送到中央服务器(称为 sy…

HackMyVM-Art

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 03:00 EDT Nmap scan report for 192.168.43.1 Host is up (0.0047s latency). MAC Address: C6:45:66:05:91:88 (Unknown) Nmap scan rep…

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx:在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…

DOCKER使用记录

1、拉取镜像 直接使用docker pull <image>&#xff0c;大概率会出现下面的报错信息&#xff1a; (base) jetsonyahboom:~$ docker pull ubuntu:18.04 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while …

Java实习面试题

一、理想汽车一面 1、总结你这个人擅长什么&#xff0c;你的优势是什么&#xff1f; 2、挑一个项目详细讲讲&#xff0c;重点讲下你怎么设计的&#xff0c;你的思路是什么&#xff0c;你做的过程中遇到什么难点&#xff0c;怎么克服这些难点&#xff1f; 3、使用RabbitMQ处理…

单元测试报错

报错信息如下所示&#xff1a; 五月 30, 2025 5:35:44 下午 org.junit.vintage.engine.descriptor.RunnerTestDescriptor warnAboutUnfilterableRunner 警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class redis.demo.RedisTemplateTest) does not…

00 QEMU源码分析中文注释与架构讲解(v8.2.4版本)

QEMU-v8.2.4源码中文注释与架构讲解 文档会不定期更新 注释作者将狼才鲸创建日期2025-05-30更新日期2025-06-02 CSDN阅读地址&#xff1a;QEMU源码中文注释与架构讲解Gitee源码仓库地址&#xff1a;才鲸嵌入式/qemu 一、前言 其它参考教程的网址&#xff1a; QEMU 源码目录…

线段树刷题记录

一篇讲解很好的线段树博客&#xff1a;数据结构--线段树篇_数据结构线段树-CSDN博客 一、区间查询 无修改&#xff1a; &#xff08;一&#xff09;最值问题&#xff1a; 1.P1816 忠诚 - 洛谷 思路&#xff1a; 模板。 注意&#xff1a; 无。 代码&#xff1a; #include …

从一到无穷大 #46:探讨时序数据库Deduplicate与Compaction的设计权衡

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言Compaction AlgorithmsCompact Execution Flow Based On VeloxLocalMergeSource的…

大厂前端研发岗位设计的30道Webpack面试题及解析

文章目录 一、基础核心二、配置进阶三、性能优化四、Loader原理五、Plugin机制六、高级应用七、工程化实战八、原理深挖九、异常处理十、综合场景一、基础核心 Webpack的核心概念是什么? 解析:入口(entry)、输出(output)、加载器(loader)、插件(plugins)、模式(mode)。Loader…

pytest 常用命令参数

以下是 pytest 常用命令参数 的整理&#xff0c;涵盖测试运行、过滤、调试、报告等常见场景&#xff0c;方便你高效使用 pytest&#xff1a; 1. 基本测试运行 命令说明pytest运行当前目录及子目录下所有测试&#xff08;test_*.py 或 *_test.py&#xff09;pytest path/to/tes…

利用openwrt路由器和随身WIFI搭建CPE

背景&#xff1a; 最近5GCPE挺火&#xff0c;各种硬件层出不穷&#xff0c;包括DY上很多商家在推的AX3000叠加展锐RM500 5G模块&#xff0c;自己组装CPE&#xff0c;成本也在300 看了下开源硬件&#xff0c;其实就是一个开源的openwrt系统&#xff0c;硬件上5G模块通过usb协议…

Python中使用pandas

使用Pandas进行数据处理和分析 Pandas是Python中最流行的数据处理和分析库之一。下面我将介绍Pandas的基本使用方法。 安装Pandas pip install pandas 基本数据结构 1. Series - 一维数组 import pandas as pd# 创建Series s pd.Series([1, 3, 5, 7, 9]) print(s) 2. D…

ISO18436-2 CATII级振动分析师能力矩阵

ISO18436-2021是当前针对针对分析师的一个标准&#xff0c;它对振动分析师的能力和知识体系做了4级分类&#xff0c;这里给出的是一家公司响应ISO18436的CATII级标准&#xff0c;做的一个专题培训的教学大纲。摘自&#xff1a; 【振動噪音產學技術聯盟】04/19-23 ISO 18436-2…

Qt实现的水波进度条和温度进度条

一.效果 二.原理 1.水波 要模拟波浪,就要首先画出一条波浪线,正弦余弦曲线就很适合。 y=A*sin(ω*x+φ)+k y=A*cos(ω*x+φ)+k 这是正弦余弦曲线的公式,要想实现水波效果,那需要两条曲线,一条曲线的波峰对着另外一条曲线的波谷,要实现这样的曲线效果,只有让正弦曲线前移…

《Python 应用中的蓝绿部署与滚动更新:持续集成中的实践与优化》

《Python 应用中的蓝绿部署与滚动更新:持续集成中的实践与优化》 引言 在现代软件开发中,持续集成与持续部署(CI/CD)已成为标准实践。面对频繁发布与升级需求,蓝绿部署和滚动更新两种策略为 Python 应用提供了稳定、安全的发布方式。本文将深入探讨这两种策略的原理、适…

4.2.2 Spark SQL 默认数据源

在本实战概述中&#xff0c;我们探讨了如何在 Spark SQL 中使用 Parquet 格式作为默认数据源。首先&#xff0c;我们了解了 Parquet 文件的存储特性&#xff0c;包括其二进制存储方式和内嵌的 Schema 信息。接着&#xff0c;通过一系列命令&#xff0c;我们演示了如何在 HDFS 上…

当前用户的Git本地配置情况:git config --local --list

通过config命令可以查询当前用户的本地配置情况。这些配置项定义了 Git 在当前仓库中的行为&#xff0c;包括文件权限处理、符号链接处理以及大小写敏感性等。 git config --local --list core.repositoryformatversion0 指定 Git 仓库的格式版本。版本 0 是最初的格式。 cor…

Flutter 包依赖升级指南:让项目保持最新状态

在 Flutter 开发过程中&#xff0c;依赖项管理是确保项目顺利运行和持续优化的关键环节。依赖项是项目中不可或缺的外部库&#xff0c;它们提供了各种功能&#xff0c;从 UI 组件到数据处理工具&#xff0c;帮助开发者快速构建应用。然而&#xff0c;随着时间的推移&#xff0c…