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

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

在之前的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:breakgray = 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 = detectioncv2.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 = detectioncv2.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 进行人脸检测可以实现较高的准确率和较快的检测速度,但需要注意选择合适的模型和调整参数以适应不同的场景和需求。

相关文章:

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

在之前的blog里面,我们有介绍OpenCV和yolo的区别,本文就人脸检测为例,分别介绍下OpenCV和yolo的实现方式。 OpenCV实现人脸检测 一、安装 OpenCV 首先确保你已经安装了 OpenCV 库。可以通过以下方式安装: 使用包管理工具安装&…...

015集——c# 实现CAD excel交互(CAD—C#二次开发入门)

第一步:添加引用 程序集—>扩展 namespace WindowsFormsApp2 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}private void 获取当前excel_Click(object sender, EventArgs e…...

【计网笔记】以太网

经典以太网 总线拓扑 物理层 Manchester编码 数据链路层 MAC子层 MAC帧 DIX格式与IEEE802.3格式 IEEE802.3格式兼容DIX格式 前导码(帧开始定界符SOF) 8字节 前7字节均为0xAA第8字节为0xAB前7字节的Manchester编码将产生稳定方波,用于…...

Java 入门基础篇14 - java面向对象思想以及特性

学习目标: 一、目标 面向对象思想类和对象对象的创建和使用属性和方法封装 开始学习: 二、编程思想 2.1 什么是编程思想 做人有做人的原则,编程也有编程的原则。这些编程的原则,就叫做编程思想。 2.2 面向过程和面向对象 二…...

第15篇:网络架构优化与综合案例分析

目录 引言 15.1 网络性能优化的方法与工具 15.1.1 带宽管理与流量控制 15.1.2 负载均衡 15.1.3 缓存优化 15.2 网络故障的排查与解决 15.2.1 常用的网络故障排查工具 15.2.2 网络故障排查案例 15.3 网络安全架构的综合设计案例 15.3.1 企业网络安全架构的要求 15.3.…...

UI自动化测试实战

补充:Selenium主要用于Web页面的自动化测试,它可以模拟用户的各种操作,如点击、输入、滚动等,来测试网页的功能。而Appium是一个开源的移动端自动化测试工具。 一、自动化测试实战章节 自动化测试流程测试用例编写项目自动化测试…...

东方智者颜廷利:以哲学思想促进世界和谐与无私奉献

【本社讯】在全球化的今天,东方智慧与哲学思想正逐渐成为促进世界和谐与理解的重要力量。近日,祖籍齐鲁大地山东济南的东方智者颜廷利以其深邃的哲学思想和对人类社会的深刻洞察,引起了国际社会的广泛关注。 颜廷利,一位致力于哲学研究与实践的智者,他的思想跨越古今,融合了东…...

基于 springboot vue停车场管理系统 设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…...

如何验证ssl私钥和证书是否匹配?

从证书(CRT)文件提取公钥 openssl x509 -in server.crt -pubkey -noout | openssl sha256从证书签名请求(CSR)文件提取公钥 openssl req -in server.csr -pubkey -noout | openssl sha256从私钥(KEY)文件…...

MongoDB的基本操作

🌷数据库准备 🎈Mongoshell 1.在指定目录下创建mongodb文件夹、其子文件log和data以及mongodb.log cd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log 执行mongodb命令启动mongdb服务 mongod --dbpath /h…...

spring mvc后端实现过程

文章目录 一、Spring mvc1、controller1.1、LoginController011.2、LoginController 2、service2.1、LoginService2.1、LoginInimplements 3、dao3.1、LoginMapper3.1、LoginMapper.xml 4、实体类 一、Spring mvc 1、controller 控制器层、处理用户的请求和响应, …...

102005

import os os.environ["CUDA_VISIBLE_DEVICES"] "0" # 设定使用的 GPUimport tensorflow as tf from dataset import generate_data import numpy as np from model import enhancednet# 检查 TensorFlow 是否可以识别 GPU gpus tf.config.list_physica…...

Cisco ACI环境给Leaf配置OOB带外管理IP方法

可以通过GUI 或CLI进行配置 通过CLI更简单,和配置传统交换机差不多, ACI中共有3大组件 APIC 控制器 SPINE 核心 LEAF 接入 下面我们将3种角色的带外IP配置方法都列出来 1 APIC配置带外IP This example shows how to configure out-of-band managemen…...

免费送源码:Java+B/S+MySQL springboot电影推荐系统 计算机毕业设计原创定制

摘 要 随着互联网与移动互联网迅速普及,网络上的电影娱乐信息数量相当庞大,人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的电影推荐系统成为一个热门。然而电影信息的表示相当复杂,己有的相似度计算方法与推荐算法都各有优势&#…...

数据清洗(脚本)

使用脚本清洗数据时,可以根据具体的数据问题选择编程语言,如Shell、Python、SQL等。这里我以 Python(Pandas库) 和 SQL 为例,演示如何通过脚本进行数据清洗。 1. 使用 Python(Pandas库) 进行数…...

jmeter中发送post请求遇到的问题

用jmeter发送post请求,把请求参数放在Body Data处,参数都写得正确,但没想到结果每次都报错,直接响应结果乱七八糟,改成用Parameters,反而不乱报错了。 上图 请求里如下 另外一些请求也是这样 这个响应结果也是错误的…...

Java中使用protobuf

一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol B…...

2020款Macbook Pro A2251无法充电无法开机定位及修复

问题背景 up主有一台2020年的Macbook Pro,带Touch Bar,16G512G,四核I5,型号A2251 应该是一周没充电了,之前还用的好好的,后来有一天出差想带上 打开没电,手头上有个小米的66W快充头&#xff0c…...

Spring Cloud --- 引入Gateway网关

引入Gateway网关 介绍 Spring Cloud Gateway 组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway 是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点 IP 端口信息,从…...

ESP32-C3实现定时器的启停(Arduino IDE)

1概述 ESP32-C3微控制器有多个定时器,这些定时器可用于各种用途,包括计时、生成PWM信号、测量输入信号的频率等。以下是ESP32-C3上可用的定时器资源: 两个硬件定时器: 定时器0:这是一个通用定时器,通常用于…...

centos升级g++使其支持c++17

centos升级g使其支持c17 升级g的原因现象原因 升级g方法更新镜像源yum升级g版本 总结 升级g的原因 现象 编译最新版本的jsoncpp报一下错误 jsontest.h:87:37: error: ‘hexfloat’ is not a member of ‘std’oss << std::setprecision(16) << std::hexfloat &l…...

Pytest日志收集器配置

前言 在pytest框架中&#xff0c;日志记录&#xff08;logging&#xff09;是一个强大的功能&#xff0c;它允许我们在测试期间记录信息、警告、错误等&#xff0c;从而帮助调试和监控测试进度。 pytest与Python标准库中的logging模块完美集成&#xff0c;因此你可以很容易地在…...

Morris算法(大数据作业)

我只能说&#xff0c;概率证明真的好难啊&#xff01;(&#xff1b;′⌒) 这也证明我的概率论真的学的很差劲&#xff0c;有时间一定要补补/(ㄒoㄒ)/~~ 算法不难证明难&#xff01; 当一个数足够大时&#xff0c;能不能用更少的空间来近似表示这个整数n&#xff0c;于是&…...

TCP/IP协议 【三次握手】过程简要描述

当建立TCP连接时&#xff0c;三次握手的作用简要描述如下&#xff1a; 第一次握手&#xff08;客户端向服务器发送SYN包&#xff09;&#xff1a;客户端发送SYN包给服务器&#xff0c;确认服务器是否在线并等待响应。 第二次握手&#xff08;服务器向客户端发送SYNACK包&…...

docker 数据管理,数据持久化详解 二 数据卷容器

数据卷和数据卷容器核心区别 持久性对比 数据卷&#xff1a;当您直接在启动容器时指定了一个数据卷&#xff08;例如&#xff0c;使用docker run -v /data&#xff09;&#xff0c;这个数据卷会自动创建&#xff0c;并且其内容会在容器停止或删除后继续存在。您可以随时通过Do…...

Logrotate:Linux系统日志轮转和管理的实用指南

Logrotate是Linux系统中用于自动化管理日志文件的强大工具&#xff0c;它能够高效、安全地轮转、压缩和清理日志文件&#xff0c;从而有效控制日志文件大小&#xff0c;节省磁盘空间&#xff0c;并显著提升系统可维护性和安全性。本文档将提供Logrotate的实用指南&#xff0c;涵…...

八股面试3(自用)

基本数据类型和引用数据类型区别 java中数据类型分为基本数据类型和引用数据类型 8大基本数据类型 1.整数&#xff1a;int&#xff0c;long&#xff0c;short&#xff0c;byte 2.浮点类型&#xff1a;float&#xff0c;double 3.字符类型&#xff1a;char 4.布尔类型&…...

【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步

目录 一、前言 二、常用的数据同步解决方案 2.1 为什么需要数据同步 2.2 常用的数据同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介绍 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…...

【Android】浅析OkHttp(1)

【Android】浅析OkHttp&#xff08;1&#xff09; OkHttp 是一个高效、轻量级的 HTTP 客户端库&#xff0c;主要用于 Android 和 Java 应用开发。它不仅支持同步和异步的 HTTP 请求&#xff0c;还支持许多高级功能&#xff0c;如连接池、透明的 GZIP 压缩、响应缓存、WebSocke…...

Generate-on-Graph

目录 摘要1 引言2 相关工作4 不完整知识图谱问答&#xff08;IKGQA&#xff09;4.1 任务介绍4.2 数据集构建 5 Generate-on-Graph (GoG) 摘要 为了解决大型语言模型&#xff08;LLMs&#xff09;在知识不足和幻觉问题上的困扰&#xff0c;众多研究探索了将LLMs与知识图谱&…...