Python 人脸检测:使用 Dlib 和 OpenCV
简介
本文用Python、Dlib 和 OpenCV 库来检测图像中的人脸,并在人脸上绘制矩形框进行窗口显示。
环境准备
在开始之前,请确保您的计算机上已安装 Python。此外,您还需要安装以下库:
dlib:一个包含多种机器学习算法的库,包括人脸检测。opencv-python(即 OpenCV):一个强大的计算机视觉库,用于图像处理和视频分析。numpy:一个用于科学计算的库,用于处理多维数组和矩阵。
您可以使用 pip 来安装这些库:
pip install dlib opencv-python numpy
另外,dlib的安装可能出现问题,可以参考该文:https://blog.csdn.net/qq_43466323/article/details/120855699
代码解析
import dlib
import cv2
import numpy as np
from pathlib import Path
from time import time# 加载dlib人脸检测器
detector = dlib.get_frontal_face_detector()def read_image(file, flags=1):"""读取图像,特别适合文件路径出现中文的情况"""return cv2.imdecode(np.fromfile(file, np.uint8), flags)def scale_image(img, max_width=1920, max_height=1080):"""比例缩放图片"""# 获取原始图片的尺寸height, width = img.shape[:2]# 只有图片宽度或高度超出指定范围,才缩放图片if width > max_width or height > max_height:# 计算缩放比例ratio = min(max_width / width, max_height / height)else:ratio = 1# 缩放图片return cv2.resize(img, None, fx=ratio, fy=ratio)def detect_image(img):"""人脸检测并绘制人脸矩形框 """# 只对BGR图转化灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 检测人脸faces = detector(gray)# 绘制人脸矩形框for face in faces:x, y, w, h = face.left(), face.top(), face.width(), face.height()cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)return imgdef run(file):"""将绘制人脸矩形框的图片进行显示"""start_time = time()# 人脸检测img = detect_image(scale_image(read_image(file)))# 计算人脸检测耗时并作为窗口标题显示win_name = f'duration:{time() - start_time:.2f}'cv2.imshow(win_name, img)key = cv2.waitKey()cv2.destroyAllWindows()return keydef run_many(dir_path):"""依次检测指定目录的图片并显示"""print('温馨提示:按q键退出,其他按键切换图片')for file in Path(dir_path).iterdir():# 按q键退出if ord('q') == run(file):break
导入库
import dlib
import cv2
import numpy as np
from pathlib import Path
from time import time
这段代码导入了我们所需的所有外部库。
初始化人脸检测器
detector = dlib.get_frontal_face_detector()
这行代码初始化了 Dlib 的人脸检测器,用于后续的人脸检测操作。
读取图像函数
def read_image(file, flags=1):return cv2.imdecode(np.fromfile(file, np.uint8), flags)
这个函数用于读取图像文件,特别适合处理包含中文路径的文件。
缩放图像函数
def scale_image(img, max_width=1920, max_height=1080):height, width = img.shape[:2]if width > max_width or height > max_height:ratio = min(max_width / width, max_height / height)else:ratio = 1return cv2.resize(img, None, fx=ratio, fy=ratio)
这个函数用于按比例缩放图像,以确保图像的宽度和高度不会超过指定的最大值。
人脸检测函数
def detect_image(img):gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = detector(gray)for face in faces:x, y, w, h = face.left(), face.top(), face.width(), face.height()cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)return img
这个函数将图像转换为灰度图,然后使用 Dlib 的检测器来检测人脸,并在每个检测到的人脸周围绘制一个绿色的矩形框。
运行检测函数(主函数)
def run(file):start_time = time()img = detect_image(scale_image(read_image(file)))win_name = f'duration:{time() - start_time:.2f}'cv2.imshow(win_name, img)key = cv2.waitKey()cv2.destroyAllWindows()return key
这个函数读取一个图像文件,对其进行缩放和人脸检测,然后显示结果。
批量检测函数(主函数)
def run_many(dir_path):print('温馨提示:按q键退出,其他按键切换图片')for file in Path(dir_path).iterdir():if ord('q') == run(file):break
这个函数遍历指定目录下的所有图像文件,并使用 run 函数对每个文件进行人脸检测和显示。
相关文章:
Python 人脸检测:使用 Dlib 和 OpenCV
简介 本文用Python、Dlib 和 OpenCV 库来检测图像中的人脸,并在人脸上绘制矩形框进行窗口显示。 环境准备 在开始之前,请确保您的计算机上已安装 Python。此外,您还需要安装以下库: dlib:一个包含多种机器学习算法…...
【大数据学习 | flume】flume的概述与组件的介绍
1. flume概述 Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到HDFS、Hbase,简单来说flume就是收集日志的。 Flume两个版本区别: 1&…...
torch.is_storage()
torch.is_storage() 判断给定的对象是否是一个 PyTorch 存储对象 PyTorch 存储对象:PyTorch 中,存储对象(Storage)是一个低级别的对象,它表示一个存储数据的连续内存块。存储对象不包含任何关于数据如何解释的信息&a…...
2411rust,编译时自动检查配置
原文 Cargo和编译器团队很高兴地宣布,从Rust1.80(或nightly-2024-05-05)开始,会自动检查每个可访问的#[cfg],看看是否与期望的配置名和值匹配. 这帮助验证crate,是否正确处理不同目标平台或函数的条件编译.它确保在期望和使用设置的配置间保持一致,帮助在开发过程的早期抓住潜…...
在 Ubuntu 中用 VSCode 配置 C 语言项目的编译与调试(详解教程)
目录 一、准备工作二、配置 VSCode 的编译任务三、配置 VSCode 的调试任务四、编译与调试流程五、常见问题排查六、总结 在 C 语言开发过程中,调试与编译是不可缺少的环节,而 VSCode(Visual Studio Code)作为一个强大且轻量级的编…...
MATLAB绘制克莱因瓶
MATLAB绘制克莱因瓶 clc;close all;clear all;warning off;% clear all rand(seed, 100); randn(seed, 100); format long g;% Parameters u_range linspace(0, 2*pi, 100); v_range linspace(0, pi, 50); [U, V] meshgrid(u_range, v_range);% Parametric equations for t…...
HTML5实现趣味飞船捡金币小游戏(附源码)
文章目录 1.设计来源1.1 主界面1.2 游戏中界面1.2 飞船边界框效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/143799554 HTML5实现趣味飞船捡金币小游戏(附源码)&…...
Excel表数学于三角函数、统计函数
一、数学与三角函数 函数说明ABS返回数值的绝对值ACOS反余弦函数ACOSH反双曲余弦函数ASIN反正弦函数ASINH反双曲正弦函数ATAN反正切函数ATAN2以 x、y 坐标返回反正切值ATANH反双曲正切函数CEILING向上舍入(指定倍数的整数)COMBIN组合公式COS余弦函数COS…...
小试银河麒麟系统OCR软件
0 前言 今天在国产电脑上办公,需要从一些PDF文件中复制文字内容,但是这些PDF文件是图片转换生成的,不支持文字选择和复制,除了手工输入,我们还可以使用OCR。 1 什么是OCR OCR (Optical Character Recogni…...
Dubbo RPC线程模型
消费端线程模型,提供者端线程模型 消费端线程模型 对 2.7.5 版本之前的 Dubbo 应用,尤其是一些消费端应用,当面临需要消费大量服务且并发数比较大的大流量场景时(典型如网关类场景),经常会出现消费端线程…...
三角波生成函数
% 设置时间范围和采样频率 t 0:0.01:2; % 时间从0到2秒,步长为0.01秒% 定义频率 f 和角频率 theta f 5; % 频率为5Hz theta 2 * pi * f * t;% 初始化输出向量 y zeros(size(t));% 根据给定的公式计算 y for k 1:fy y (-1)^(k-1)*(2 /(k * pi)) * sin(k * the…...
使用Python实现对接Hadoop集群(通过Hive)并提供API接口
安装必要的库 首先,确保已经安装了以下库: pip install flask pip install pyhive代码实现 1. app.py(主应用文件) from flask import Flask, jsonify, request, abort from pyhive import hive import re from datetime impo…...
Qt学习笔记(四)多线程
系列文章目录 Qt开发笔记(一)Qt的基础知识及环境编译(泰山派) Qt学习笔记(二)Qt 信号与槽 Qt学习笔记(三)网络编程 Qt学习笔记(四)多线程 文章目录 系列文章…...
java的小数计算如何保证精度不丢失
前言 学java的肯定都知道,要保证小数运算精度不丢失我们得用BigDecimal对象。这篇文章就分析一下为什么用浮点数会造成精度丢失?BigDecimal是怎么解决精度丢失问题的?下面我们一起看看吧! 浮点数的表示 浮点数在计算机中通常采用 IEEE 75…...
分布式----Ceph应用(下)
目录 创建 Ceph 对象存储系统 RGW 接口 1、对象存储概念 2、创建 RGW 接口 //在管理节点创建一个 RGW 守护进程(生产环境下此进程一般需要高可用,后续介绍) //开启 httphttps ,更改监听端口 //创建 RadosGW 账户 //S3 接口…...
小鹏汽车嵌入式面试题及参考答案
static 变量放在哪个段中? 在 C 和 C++ 等编程语言中,static 变量根据其定义的位置不同放置的段也不同。对于全局的静态变量(在函数体外定义的静态变量),它会被放在数据段(.data 段或者.bss 段)。如果这个静态变量被初始化了非零值,那么它会被放在.data 段,这个段存储…...
qt5半成品飞机大战小游戏
最近在学Qt,心血来潮做了个飞机大战小游戏,由于一些资源比较难找,就做了个半成品。效果图如下: 目前已做功能:人物飞机的自由移动,子弹的发射,子弹与敌机的物体碰撞,碰撞特效。 缺少功能&#x…...
一文速学---红黑树
文章目录 一、红黑树简介二、 红黑树特性三、红黑树插入3.1 红黑树为空3.2 父节点为黑色3.3 父节点为红色3.3.1 父亲和叔叔都是红色3.3.2 父节点为红色,叔叔节点为黑色3.3.2.1 父节点在左节点,插入节点在父亲左节点3.3.2.2 父节点在左节点,插…...
【graphics】图形绘制 C++
众所周知,周知所众,图形绘制对于竞赛学僧毫无用处,所以这个文章,专门对相关人员教学(成长中的码农、高中僧、大学僧)。 他人经验教学参考https://blog.csdn.net/qq_46107892/article/details/133386358?o…...
全志科技嵌入式面试题及参考答案
C 语言的编译过程是怎样的? C 语言的编译过程主要包括以下几个阶段。 首先是预处理阶段。在这个阶段,预处理器会处理以 “#” 开头的预处理指令。比如 #include 指令会把指定的头文件内容插入到当前的源文件中,这使得我们可以在程序中使用标准库函数或者自定义头文件中的声明…...
Node.js二维码生成终极指南:使用node-qrcode快速创建个性化二维码
Node.js二维码生成终极指南:使用node-qrcode快速创建个性化二维码 【免费下载链接】node-qrcode qr code generator 项目地址: https://gitcode.com/gh_mirrors/no/node-qrcode 在数字化时代,二维码已成为信息传递的重要桥梁。node-qrcode作为一款…...
STAR-BENCH:4D音频智能评估基准解析
1. STAR-BENCH:重新定义音频智能评估的边界 在人工智能的诸多研究方向中,音频智能一直是个独特而富有挑战性的领域。与视觉信息不同,声音不仅包含语义内容,还承载着丰富的时空信息——从声源的方位、距离到声音在环境中的传播特性…...
腐蚀-Rust-服务器开服联机教程
前言: 推荐云服务平台:购买实例 该服务器目前商业行为很多,同行之间互相攻击服务器,所以服务器默认不提供列表查询 正因为服务器商业行为较多,所以该游戏服务器高度依赖插件模组,原版白皮不是很好玩 存档…...
基于大语言模型的游戏AI助手:ChatGPT-On-CS项目实战解析
1. 项目概述:当ChatGPT遇上反恐精英如果你是一名《反恐精英》(Counter-Strike, 简称CS)的玩家,同时又对AI助手ChatGPT的强大能力有所耳闻,那么“ChatGPT-On-CS”这个项目可能会让你眼前一亮。简单来说&…...
Atlas200l DK A2内核编译实战:自己动手为AX210网卡定制驱动模块
Atlas200l DK A2内核编译实战:为AX210网卡定制驱动模块的完整指南 当你在Atlas200l DK A2开发板上插上那块崭新的Intel AX210无线网卡时,系统却对它视而不见——这种挫败感我太熟悉了。去年在为边缘计算设备部署无线功能时,我连续三天卡在驱动…...
macOS微信防撤回终极教程:WeChatIntercept插件完整使用指南
macOS微信防撤回终极教程:WeChatIntercept插件完整使用指南 【免费下载链接】WeChatIntercept 微信防撤回插件,一键安装,仅MAC可用,支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 还在为微…...
告别串口调试烦恼:STM32 HAL库下三种printf重定向方案保姆级教程(含MicroLIB与标准库对比)
STM32 HAL库下printf重定向的三种高效方案与实战避坑指南 在嵌入式开发中,串口调试是工程师最常用的调试手段之一。然而,许多开发者在使用STM32 HAL库时,常常会遇到printf输出乱码、系统卡死、多任务冲突等问题。本文将深入探讨三种主流的pri…...
F-MCP:基于MCP协议实现AI与Figma本地化协作的完整指南
1. 项目概述:F-MCP,一个连接AI与Figma的本地化桥梁 如果你是一名设计师或前端开发者,每天在Figma和代码编辑器之间反复横跳,肯定幻想过:能不能让AI直接理解我的设计稿,甚至帮我修改它?或者反过来…...
带 CSS 样式模式的甘特图开发代码|Highcharts Gantt高级开发示列
带 CSS 样式模式的甘特图完整代码,这是 Highcharts 非常专业的 ** 纯 CSS 控制样式(styledMode)** 用法,完全分离结构与样式,适合企业级、可换肤场景。完整可运行代码(Styled Mode 纯 CSS 甘特图࿰…...
从修补Boot到反编译锁屏:一个安卓ROM修改新手的完整避坑日记
从修补Boot到反编译锁屏:一个安卓ROM修改新手的完整避坑日记 第一次接触安卓ROM修改时,我像大多数新手一样充满热情却屡屡碰壁。那些看似简单的解包、修改、打包操作背后,隐藏着无数让设备变砖的陷阱。这篇日记记录了我从零开始学习安卓ROM修…...
