如何利用OpenCV和yolo实现人脸检测

news2024/10/17 17:07:54

在之前的blog里面,我们有介绍OpenCV和yolo的区别,本文就人脸检测为例,分别介绍下OpenCV和yolo的实现方式。

OpenCV实现人脸检测

一、安装 OpenCV

首先确保你已经安装了 OpenCV 库。可以通过以下方式安装:

使用包管理工具安装:

  • 在 Python 环境中,可以使用 pip 安装:pip install opencv-python

二、加载预训练的人脸检测模型

OpenCV 提供了基于 Haar 特征和级联分类器的人脸检测方法,已经预先训练好了一些模型,可以直接加载使用。

import cv2

# 加载人脸检测模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

三、读取图像或视频帧并进行人脸检测

对于图像:

   # 读取图像
   img = cv2.imread('image.jpg')
   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

   # 进行人脸检测
   faces = face_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), (0, 255, 0), 2)

   # 显示结果图像
   cv2.imshow('Face Detection', img)
   cv2.waitKey(0)
   cv2.destroyAllWindows()

对于视频:

   # 打开视频文件或摄像头
   video_capture = cv2.VideoCapture(0)  # 0 表示使用默认摄像头,如果是视频文件路径则传入文件路径

   while True:
       # 读取视频帧
       ret, frame = video_capture.read()
       if not ret:
           break

       gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

       # 进行人脸检测
       faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

       # 在视频帧上绘制人脸矩形框
       for (x, y, w, h) in faces:
           cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

       # 显示视频帧
       cv2.imshow('Face Detection', frame)

       # 按下 'q' 键退出循环
       if cv2.waitKey(1) & 0xFF == ord('q'):
           break

   # 释放视频捕获对象和关闭窗口
   video_capture.release()
   cv2.destroyAllWindows()

在上述代码中,detectMultiScale 函数用于检测人脸,参数 scaleFactor 表示在每个图像尺度上图像大小减小的比例因子,minNeighbors 表示每个候选矩形应该保留的邻居数量,minSize 表示最小可能的人脸大小。

通过以上步骤,就可以使用 OpenCV 实现人脸检测功能,可以在图像或视频中检测出人脸并绘制矩形框标记出来。

yolo实现人脸检测

一、安装所需库

  1. 安装 PyTorch:YOLO 通常使用 PyTorch 框架实现。请根据你的系统和需求,按照 PyTorch 官方文档安装 PyTorch。
  2. 安装 OpenCV:用于图像和视频处理。可以使用 pip install opencv-python 安装。

二、下载预训练模型

可以从官方的 YOLO 仓库或其他可靠来源下载预训练的人脸检测模型权重文件。例如,可以使用 Ultralytics 提供的 YOLOv5 模型,它有针对人脸检测的预训练版本。

三、加载模型

以下是使用 Python 和 PyTorch 加载 YOLOv5 人脸检测模型的示例代码:

import torch
import cv2

# 加载模型
model = torch.hub.load('ultralytics/yolov5', 'custom', path='path_to_your_model_weights.pt')

四、进行人脸检测

对于图像:

   # 读取图像
   img = cv2.imread('image.jpg')

   # 进行人脸检测
   results = model(img)

   # 绘制检测框
   for detection in results.xyxy[0]:
       if detection[5] == 0:  # 假设类别 0 表示人脸
           x1, y1, x2, y2, conf, cls = detection
           cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)

   # 显示结果图像
   cv2.imshow('Face Detection', img)
   cv2.waitKey(0)
   cv2.destroyAllWindows()

对于视频:

   # 打开视频文件或摄像头
   video_capture = cv2.VideoCapture(0)  # 0 表示使用默认摄像头,如果是视频文件路径则传入文件路径

   while True:
       # 读取视频帧
       ret, frame = video_capture.read()
       if not ret:
           break

       # 进行人脸检测
       results = model(frame)

       # 绘制检测框
       for detection in results.xyxy[0]:
           if detection[5] == 0:  # 假设类别 0 表示人脸
               x1, y1, x2, y2, conf, cls = detection
               cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)

       # 显示视频帧
       cv2.imshow('Face Detection', frame)

       # 按下 'q' 键退出循环
       if cv2.waitKey(1) & 0xFF == ord('q'):
           break

   # 释放视频捕获对象和关闭窗口
   video_capture.release()
   cv2.destroyAllWindows()

在上述代码中,通过调用模型对图像或视频帧进行检测,然后根据检测结果绘制人脸矩形框。需要注意的是,这里假设类别 0 表示人脸,实际应用中可能需要根据你的模型的类别定义进行调整。

使用 YOLO 进行人脸检测可以实现较高的准确率和较快的检测速度,但需要注意选择合适的模型和调整参数以适应不同的场景和需求。

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

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

相关文章

nRF54L15—蓝牙低功耗双核系统级芯片(SoC)

nRF54L15 是 nRF54L 系列的首款系统级芯片 (SoC)。它是一款超低功耗蓝牙 5.4 SoC,具有同类最佳的新型多协议无线电和先进的安全功能。nRF54L 系列以更紧凑的封装将广受欢迎的 nRF52 系列提升到新的水平,具有出色的处理能力和效率、扩展的内存和新型外设。…

开发 - develop-codescan-zwcz53

开发 - develop-codescan-zwcz53 1. 开发 - CodeScan2. 前言3. CodeScan3.1. 工具概述3.2. 编译3.3. 功能3.4. 使用3.5. 高级用法3.5.1. 高扩展性3.5.2. 扫描位置3.5.3. 过滤字符串(只写了JSP PHP)3.5.4. 静态分析依赖情况 3.6. TODO3.7. 支持项目3.8. 详细使用文章(内附案例)…

运维怎么转行网络安全?

经常有人问我:干网工、干运维多年遇瓶颈,想学点新技术给自己涨涨“身价”,应该怎么选择? 聪明人早已经用脚投票:近年来,越来越多运维的朋友寻找新的职业发展机会,将目光聚焦到了网络安全产业。…

大数据-174 Elasticsearch Query DSL - 全文检索 full-text query 匹配、短语、多字段 详细操作

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Python 3.13 中的 7 个新类型特性

刚刚发布的 Python 3.13 继续挑战了效率和优雅的极限。 除了在 Python 社区讨论已久的令人兴奋的自由线程模式 和 Just-In-Time 编译器之外,吸引我的还有类型系统的新改进。 在早期版本引入的强大类型系统基础上,Python 3.13 将引入七个新的类型特性&a…

数学考研高分突破:解题思维与速度的双重修炼

随着考研季的临近,众多考生为了在数学这一科目中取得高分,纷纷投入到紧张的复习中,如何在有限的时间内,既提高解题思维,又提升解题速度,成为了许多考生心中的难题,本文将围绕这一主题&#xff0…

如何批量下载采集淘宝图片?3个方法可以帮助你

如何批量下载采集淘宝图片?在现代电子商务的背景下,淘宝作为中国最大的在线购物平台之一,承载了数以亿计的商品和信息。对于从事电商运营、市场推广或网络营销的人员而言,采集淘宝图片已经成为日常工作中的重要任务。这不仅是为了…

网页前端开发之HTML入门

HTML入门 HTML全称HyperText Markup Language,中文译为:超文本标记语言。 它有一个同胞兄弟叫:XML,全称Extensible Markup Language,中文译为:可扩展标记语言。 简单来讲,它们都是标记语言。 …

Excel重新踩坑2:Excel数据类型;自定义格式(设置显示格式);分列操作;其他常用操作;一些重要操作

0、Excel数据类型:文本、数字、逻辑值、错误值 文本数据类型:输入什么显示什么;常见错误值 VALUE:文本与数字运算; DIV/0:分母为0; NAME:公式名称错误; N/A:…

最新Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版图文教程

CleanMyMac X mac版下载是一款功能更加强大的系统优化清理工具,软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。CleanMyMac X for mac相比于 CleanMyMac3来说,功能增加了不少,比如新增…

【数据分析】影响系数 =(今日量-昨日量)/(今日总量-昨日总量)

1. 影响系数 影响系数是一个用来衡量两个相关变量之间变化关系的指标。在给定的公式中: 今日量:指的是当前时间点的某个特定变量的值,比如今天某个商品的销售数量。昨日量:指的是前一个时间点(通常是前一天&#xff…

实操部署amis-admin

当需要做一个web服务的时候,前端的实现很令我头疼。搜了一圈前端低代码框架后,注意到百度贡献的amis,通过json来写前端,很酷啊。不得不说,一个好的demo项目,真的能让人迅速进入状态,比直接看文档…

uniapp 省、市、区、乡镇 数据层级选择插件 Ba-DataPicker

Ba-DataPicker 是一款uniapp数据层级选择弹窗插件。支持省市区乡四级;支持自定义数据。 支持省、市、区、乡镇四级支持自定义数据支持字母检索 截图展示 支持定制、本地包、源码等,有建议和需要,请点击文章结尾“Uniapp插件开发”联系我&am…

高级prompt工程技巧:如何引导模型生成更精确的输出

在人工智能领域,提示词工程(Prompt Engineering)是提升模型输出质量的关键技术之一。通过精心设计的提示词,我们可以引导模型生成更符合预期的结果。本文将深入探讨几种高级提示词工程技巧,并提供实际操作的示例&#…

SpringBoot中集成海康威视SDK实现布防报警数据上传/交通违章图片上传并在linux上部署(附示例代码资源)

场景 需对接海康威视交通产品中的交通违章检测功能,实现车辆闯红灯时获取抓拍数据(车牌号)并获取上传的抓拍图片。 根据其官方资料设备网络SDK使用手册中说明,此流程需要可以通过报警布防方式进行。 访问官方下载SDK文档等资料 海康威视-引领智能物联…

华三服务器R4900 G5在图形界面使用PMC阵列卡(P460-B4)创建RAID,并安装系统(中文教程)

环境以用户需求安装Centos7.9,服务器使用9块900G硬盘,创建RAID1和RAID6,留一块作为热备盘。 使用笔记本通过HDM管理口()登录 使用VGA()线连接显示器和使用usb线连接键盘鼠标,进行窗…

生成 Excel 表列名称

Excel 大家都用过,它的列名是用字母编号的,A 表示第一列,B 表示第二列,AA 表示第27列,AB 表示第28列等等。 现给定一个数字,如何得到列名称呢。比如输入28,输出 AB。 一开始以为就是一个简单的…

C++ 算法学习——1.9 Kruskal算法

Kruskal算法是一种用于解决最小生成树(Minimum Spanning Tree)问题的贪婪算法。 Kruskal算法步骤: 初始化:将图中的所有边按照权值从小到大进行排序。 创建并查集:为每个顶点创建一个集合,用于判断两个顶…

中国灌溉农田空间分布

针对全国灌溉农田空间分布数据缺失的现状,融合MODIS植被指数和统计数据生成MIrAD-GI临时灌溉数据集,再利用约束统计和协同绘图方法将其与中国区域现有灌溉数据进行集成、整合,生成了2000-2019年中国逐年灌溉农田分布数据集(500米空…

5、JavaScript(四)

25.ajax : 前端向后端异步的取数据而无需刷新页面的技术 1 公司中的整体工作流程 1、项目开发的流程 每个职位该做的工作: 产品经理:提需求的 与客户沟通 画出原型图给程序员使用 UI设计师:美化 替换UI框架:antd element-ui e…