使用ros2服务实现人脸检测2-人脸检测功能实现(适合0基础小白)

文章目录

  • 一、用到的库
  • 二、使用步骤
    • 1.引入库
    • 2.获取图片真实路径
    • 3.检测人脸
    • 4.绘制人脸
    • 5.显示结果
    • 6.更改setup.py
    • 7.完整代码
  • 三、结果展示


一、用到的库

face_recognition:实现在图片中检测人脸。
cv2:显示图片,并且可以在图像中展示检测结果。
get_package_share_directory:获取图片的真是路径

二、使用步骤

1.引入库

import face_recognition
import cv2
from ament_index_python.packages import get_package_share_directory

2.获取图片真实路径

从这里开始的代码全部写入主函数。

default_image_path = get_package_share_directory('demo_python_service') + '/resource/default.jpg'
print(f"图片的真实路径:{default_image_path}")
image = cv2.imread(default_image_path)

这里的defauly_image_path储存的是需要检测图片的真实路径,因为你的这个程序以后会储存到其他地址,所以这里不能写死。cv2.imread可以将路径中的图片以特定的参数储存到image中。从这里我们也可以发现要将需要检测人脸的图片放到哪,也就是demo_python_service下的resource文件夹里。

3.检测人脸

face_locations = face_recognition.face_locations(image,number_of_times_to_upsample = 1,model = 'hog')
print(f"人脸;位置:{face_locations}")

face_recognition.face_locations可以检测图片中的人脸,其检测结果以位置的数组储存到face_locations中(后面展示结果时我会展示face_locations的数据是怎么样的)。函数中有三个必填的参数:第一个是需要进行检测的图片(image),第二个是检测次数(1),第三个是模式(‘hog’)。

4.绘制人脸

for top,right,bottom,left in face_locations:cv2.rectangle(image,(left,top),(right,bottom),(255,0,0),4)

由上面可知我们检测人脸的结果是人脸在图片中的位置,但是这个位置只是数组,不能很直观的可视,所以我们需要调用cv2中的cv2.rectangle函数在有人脸的位置画上矩形框。

5.显示结果

cv2.imshow('Face Dectect Result',image)
cv2.waitKey(0)

最后我们将结果显示出来。

6.更改setup.py

entry_points={'console_scripts': ['learn_face_detect=demo_python_service.learn_face_detect:main',

7.完整代码

import face_recognition
import cv2
from ament_index_python.packages import get_package_share_directorydef main():#获取图片的真实路径default_image_path = get_package_share_directory('demo_python_service') + '/resource/default.jpg'print(f"图片的真实路径:{default_image_path}")image = cv2.imread(default_image_path)#检测人脸face_locations = face_recognition.face_locations(image,number_of_times_to_upsample = 1,model = 'hog')print(f"人脸;位置:{face_locations}")#绘制人脸框for top,right,bottom,left in face_locations:cv2.rectangle(image,(left,top),(right,bottom),(255,0,0),4)#结果显示cv2.imshow('Face Dectect Result',image)cv2.waitKey(0)

三、结果展示

在这里插入图片描述
在编译后,运行程序可以看到face_locations中储存的人脸位置是一个数组(代表图片中只有一张人脸)数组中的四个数字是矩形框的四个角的位置。
在这里插入图片描述
紧接着检测人脸的结果图片也显示出来。


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

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

相关文章

中国农村统计年鉴-Excel版(1985-2024年)

《中国农村统计年鉴》系统收录了全国和各省农村社会经济统计数据,以及近年全国农村主要统计数据,是一部全面反映我国农村社会经济情况的资料性年刊。年鉴内容覆盖农村人口结构、农业产值、主要农产品产量、市场物价、进出口贸易以及收入消费水平等社会经…

golang pprof性能调试工具

简介 pprof是性能调试工具,可以生成类似火焰图、堆栈图,内存分析图等。 整个分析的过程分为两步:1. 导出数据,2. 分析数据。

PPIO × 302.AI:三分钟搭建可共享的聊天机器人

最近,各主流模型厂商频频发布新模型,有一如既往强大的DeepSeek-R1-0528,擅长长输入推理的MiniMax-M1-80k…… 好用的AI大模型这么多,如何才能集成在一个应用自由使用呢?302.AI作为企业级AI应用平台支持各主流模型调用&…

怎么样在自己的网站/独立站中添加视频?

文章目录 **前言** 一、视频在网站/独立站的好处二、视频嵌入网站的原理三、如何简易地把视频嵌入到独立站中? 前言 在信息传播形式日益多元化的当下,静态文字与图片早已无法满足用户对沉浸式浏览体验的需求。视频以其动态画面、声音及文字相结合的特性…

【图像处理基石】什么是摄影的数码味?

“数码味”是一个摄影术语,通常指照片看起来不自然,有过度处理的痕迹,比如色彩过于鲜艳、对比度偏高、高光过曝、阴影死黑,或者有明显的锐化痕迹和噪点。这种现象在手机摄影中尤为常见,因为手机相机的自动算法往往会为…

报表控件stimulsoft教程:在报表、仪表板和 PDF 表单自动生成缩略图

了解缩略图的工作原理在使用Stimulsoft Demo、Stimulsoft Server和Stimulsoft Cloud时非常有用。例如,您可以在此处查看缩略图的实际效果 - 当侧边栏折叠时,将显示缩略图而不是资源列表。在本文中,我们将探讨 Stimulsoft 产品中报表、仪表板和…

变分自编码器(VAE)

1. 从自编码器(AE)到变分自编码器(VAE) 自编码器(AutoEncoder, AE) 基本结构: 自编码器是一种无监督学习模型,通常由两个部分组成: 编码器(Encoder)&…

ChatboxAI 搭载 GPT 与 DeepSeek,引领科研与知识库管理变革

文章摘要:本文深入探讨 ChatboxAI 在科研领域的应用优势。ChatboxAI 集成多模型,支持全平台,能高效管理科研知识,助力文献检索、实验设计与论文撰写,提升科研效率与质量,同时保障数据安全。其知识库功能可整…

【无刷电机FOC进阶基础准备】【04 clark变换、park变换、等幅值变换】

目录 clark变换park变换等幅值变换 其实我不太记得住什么是clark变换、park变换,我每次要用到这个名词的时候都会上网查一下,因为这就是两个名词而已,但是我能记住的是他们背后的含义。 经过【从零开始实现stm32无刷电机FOC】系列后应该对cla…

Sentinel的流控策略

在 Sentinel 中,流控策略(Flow Control Strategy)用于定义如何处理请求的流量,并决定在流量达到某个阈值时采取的行动。流控策略是实现系统稳定性和高可用性的核心机制,尤其在高并发环境中,确保服务不会因过…

Ubuntu Extension Manager 插件卸载

Ubuntu 上使用Extension Manager 安装插件,但目前无法在Extension Manager 中卸载。 卸载方式可以通过 gnome-extensions 命令进行卸载: Usage:gnome-extensions COMMAND [ARGS…]Commands:help Print helpversion Print versionenable Enabl…

深度学习中Embedding原理讲解

我们用最直白的方式来理解深度学习中 Embedding(嵌入) 的概念。 核心思想一句话: Embedding 就是把一些复杂、离散的东西(比如文字、类别、ID)转换成计算机更容易理解和计算的“数字密码”,这些“数字密码…

(3)Java+Playwright自动化测试-启动浏览器

1.简介 前边两章文章已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动两大浏览器。 接下来我们在Windows系统中启动浏览器即可,其他平台系统的浏览器类似的启动方法,照猫画虎就可以了。 但是在实践过程中&am…

使用OpenWebUI与DeepSeek交互

Open WebUI 是针对 LLM 用户友好的 WebUI,支持的 LLM 运行程序包括阿里百炼、 Ollama、OpenAI 兼容的 API。这里主要讲在Docker环境下安装与本地Ollame和百炼API Key配置 一、安装Docker 1. CentOS # 设置为阿里云的源 sudo yum install -y yum-utils sudo yum-config-mana…

Github 2025-06-25 C开源项目日报 Top9

根据Github Trendings的统计,今日(2025-06-25统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目9C++项目1raylib: 用于视频游戏编程的简单易用图形库 创建周期:3821 天开发语言:C协议类型:zlib LicenseStar数量:18556 个Fork数量:1…

【数据标注师】2D标注

目录 一、 **2D标注知识体系框架**二、 **五阶能力培养体系**▶ **阶段1:基础规则内化(1-2周)**▶ **阶段2:复杂场景处理技能**▶ **阶段3:专业工具 mastery**▶ **阶段4:领域深度专精▶ **阶段5&#xff1…

深入浅出Node.js后端开发

让我们来理解Node.js的核心——事件循环和异步编程模型。在Node.js中,所有的I/O操作都是非阻塞的,这意味着当一个请求开始等待I/O操作完成时(如读取文件或数据库操作),Node.js不会阻塞后续操作,而是继续执行…

C++11的内容

1.支持花括号初始化 void test1() {vector<string> v1 { "asd","asd","add" };vector<string> v2{ "asd","asd","add" };map<string, int> m1{ {"asd",1},{"asd",2},{&q…

AI代码助手实践指南

概述与发展趋势 核心理念 发展方向&#xff1a;从代码补全 → 代码生成 → 整个工程服务价值转换&#xff1a;从单纯写代码 → 需求驱动的代码生成功能扩展&#xff1a;超越编写层面&#xff0c;涵盖测试环境搭建等 核心价值点 低价值动作识别&#xff1a;debug、代码评审、…

.net反编译工具

.NET 反编译工具大揭秘 在.NET 开发的世界里&#xff0c;有时候我们需要对已编译的.NET 程序集进行反编译&#xff0c;将 DLL 或 EXE 文件还原为可读的源代码形式&#xff0c;这在学习、调试、代码分析等方面都有着重要的作用。今天&#xff0c;就让我们一起深入了解一些流行的…