当前位置: 首页 > article >正文

图像处理篇---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)训练自定义模型。

相关文章:

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

以下是使用face_recognition库实现人脸检测的详细步骤、实例代码及解释: 一、环境准备 1. 安装依赖库 pip install face_recognition opencv-python # 核心库 pip install matplotlib # 用于显示图像(可选)2. 依赖说明 face_recognitio…...

74. 搜索二维矩阵 (力扣)

给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…...

8088单板机C语言sprintf()格式化串口输出---Prj04

#include "tiny_stdarg.h" // 使用自定义可变参数实现#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define PC16550_THR 0x1f0 #define PC16550_LSR 0x1f5 / //基本的IO操作函数 / char str[]"Hello World! 20250531 Ve…...

板凳-------Mysql cookbook学习 (九)

第4章:表管理 4.0 引言 MySQL :: 员工样例数据库 :: 3 安装 https://dev.mysql.com/doc/employee/en/employees-installation.html Employees 数据库与几种不同的 存储引擎,默认情况下启用 InnoDB 引擎。编…...

深入解析 Flask 命令行工具与 flask run命令的使用

Flask 是一个轻量级的 Python Web 应用框架,其内置的命令行工具(CLI)基于 Click 库,提供了方便的命令行接口,用于管理和运行 Flask 应用程序。本文将详细介绍 Flask 命令行工具的功能,以及如何使用 flask r…...

第6篇:中间件 SQL 重写与语义分析引擎实现原理

6.1 章节导读 SQL 是数据库中间件的“输入语言”。 在一个真正强大的中间件系统中,SQL 语句的执行通常不再是“原封不动”地传递给数据库,而是需要先经过: 语义分析:解析 SQL 的结构和含义。 SQL 重写:根据中间件逻辑…...

基于SpringBoot的“嗨玩旅游”网站设计与实现(源码+定制+开发)嗨玩旅游平台开发:景点展示与个性化推荐系统(SpringBoot)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

python版若依框架开发:python版若依部署

python版若依框架开发 从0起步,扬帆起航。 python版若依部署文章目录 python版若依框架开发1.源码2.概述3.部署1.源码 https://gitee.com/insistence2022/RuoYi-Vue-FastAPI 请诸君移步上述链接,即可对python版若依项目进行初步了解。 2.概述 若依框架本身基于java,可以快…...

React进阶:状态管理选择题

React进阶:状态管理选择题 引言 随着React应用复杂度增加,选择合适的状态管理方案成为我们面临的关键决策。 状态管理本质上是解决"谁来存储数据"以及"如何更新和分发这些数据"的问题。在React生态中,随着应用规模扩大…...

h5的aliplayer-min.js 加密视频会走到debugger

h5的aliplayer-min.js 如果 https://g.alicdn.com/apsara-media-box/imp-web-player/2.19.0/aliplayer-min.js走加密视频的话会有debugger 更换aliplayer-min.js版本解决了 https://g.alicdn.com/apsara-media-box/imp-web-player/2.25.1/aliplayer-min.js 对应css&#xff1a…...

第5篇《中间件负载均衡与连接池管理机制设计》

5.1 章节导读 在数据库中间件中,如何高效地管理数据库连接与请求调度至关重要。 本节围绕两个核心模块展开: 连接池管理:提升连接复用能力,避免频繁建立/断开连接。 负载均衡策略:合理调度 SQL 请求,提升…...

DashBoard安装使用

DashBoard安装使用 一、实验目的 1、掌握dashboard 的安装部署 2、熟悉图像化部署任务:产生pod---定义服务--验证访问 二、实验内容: 1、配置步骤 1.1、Helm安装 离线安装(适用于内网/离线环境) # 根据系统架构选择版本&am…...

极客大挑战 2019 EasySQL 1(万能账号密码,SQL注入,HackBar)

题目 做法 启动靶机,打开给出的网址 随便输点东西进去,测试一下 输入1、1’、1"判断SQL语句闭合方式 输入以上两个都是以下结果 但是,输入1’时,出现的是另外结果 输入1,1"时,SQL语句没有…...

C# CallerMemberName特性

当你在一个方法运用了CallerMemberName特性,编译器会自动将调用该方法的方法或属性的名称作为该参数的默认值,可应用于MVVM框架。 代码: using System.ComponentModel; using System.Runtime.CompilerServices;public class Person : INoti…...

采用 Docker GPU 部署的 Ubuntu 或者 windows 桌面环境

# 国内下载不了 docker pull gezp/ubuntu-desktop:24.04-cu12.6.2# 阿里云镜像 docker pull registry.cn-hongkong.aliyuncs.com/gezp/ubuntu-desktop:24.04-cu12.6.2# create container with nomachine docker run -d --restarton-failure --name myubuntu --shm-size1024m -e…...

关于面试找工作的总结(四)

不同情况下收到offer后的处理方法 1.不会去的,只是面试练手2.还有疑问,考虑中3.offer/职位不满足期望的4.已确认,但又收到更好的5.还想挽回之前的offer6.确认,准备入职7.还想拖一下的1.不会去的,只是面试练手 HR您好,非常荣幸收到贵司的offer,非常感谢一直以来您的帮助,…...

分布式拜占庭容错算法——实现工作量证明(PoW)算法详解

Java 实现工作量证明(PoW)算法详解 一、PoW 核心原理 #mermaid-svg-AAj0Pvst1PVcVy5v {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AAj0Pvst1PVcVy5v .error-icon{fill:#552222;}#mermaid…...

深度解析Mysql中MVCC的工作机制

MVCC,多版本并发控制 定义:维护一个数据的多个版本,使读写操作没有冲突,依赖于:隐藏字段,undo log日志,readView MVCC会为每条版本记录保存三个隐藏字段 DB_TRX_ID: 记录最近插入或修改该记录的事务IDDB_R…...

MP4文件声音与视频分离

最近学习PR剪辑 要添加视频文件和音频文件 但是直接给MP4文件 得到的是一个整体 不管怎么切分 都是无法得到单独的整体 这就需要将视频文件和音频文件分离 我推荐使用ffmpeg工具进行分离 迅雷链接:https://pan.xunlei.com/s/VORu5x64jjL-gXFd_VTpYjRPA1?pwd8wec#…...

接口自动化测试之pytest 运行方式及前置后置封装

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、Pytest 优点认知 1.可以结合所有的自动化测试工具 2.跳过失败用例以及失败重跑 3.结合allure生产美观报告 4.和Jenkins持续集成 5.很多强大的插件 pytest-htm…...

服务器被攻击了怎么办

可以上一个高防IP或者AI云防护都是可以的。(有效防御CC、APl接口、http、tcp、WEB应用扫描/爬虫、SYN、WAF、DDOS、UDP、入侵、渗透、SQL注入、XSS跨站脚本攻击、远程恶意代码执行、session fixation、Webshell攻击、恶意请求,恶意扫描、暴力破解、CSRF等…...

06-排序

排序 1. 排序的概念及其应用 1.1 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键…...

python,shell,linux,bash概念的不同和对比联系

一、基本概念理解 1. Linux 是一个 操作系统内核,常与 GNU 工具集成组成完整的 Linux 操作系统。 提供对硬件的管理能力与系统调用接口。 用户通过 Shell 或 GUI 与 Linux 交互。 2. Shell 是用户与 Linux 内核之间的 命令行解释器(CLI)…...

FPGA管脚类型,及选择

fpga的IO Type选择,如下: 具体的定义:...

如何在 Ubuntu22.04 上安装并开始使用 RabbitMQ

单体架构学的差不多了,可以朝着微服务进军了,笔者打算实操一下 RabbitMQ(这个和 Redis 一样重要的组件) 笔者这里采用的是本地 wsl2 的 Ubuntu22.04 先按指定的博客进行前置操作 Ubuntu22.04 安装 RabbitMQ 解决 ARM Ubuntu 22.04 缺少 libs…...

R-CNN 模型算法流程梳理

目录 一、R-CNN整体流程 二、需要注意的地方 论文连接:[1311.2524] Rich feature hierarchies for accurate object detection and semantic segmentation 如果你之前了解过RNN,很容易混淆认为R-CNN也具有RNN的时序循环功能,这种理解是错误…...

细说C语言将格式化输出到FILE *stream流的函数fprintf、_fprintf_I、fwprintf、_fwprintf_I

目录 1、将格式化数据输出到FILE *stream流基本型 (1)语法 (2)参数 (3)示例 2、将格式化数据输出到FILE *stream流并启用并启用在格式字符串中使用参数的顺序的规范 (1)语法 …...

本地日记本,用于记录日常。

文章目录 想法程序说明展望 想法 本人想要复盘以前的事情,所以就想着写一个小程序,记录一下一天发生了什么事情。以后如果忘记了可以随时查看。写日记的想法来自我看的一本书,里面有一段话说的意思是,经验从来都不是随着年龄增长…...

[蓝桥杯]格子刷油漆

格子刷油漆 题目描述 X 国的一段古城墙的顶端可以看成 2N2N 个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数&…...

Monorepo架构: 项目管理工具介绍、需求分析与技术选型

概述 如何实现 monorepo,以及在项目中如何管理多个包,在进行具体项目开发前,有必要强调一个重要思维 — 全局观 即看待技术方案时,要从需求角度出发,综合考量该方案能否长远满足项目或团队需求 为什么要有全局观呢&a…...