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

http://www.lryc.cn/news/464780.html

相关文章:

  • 015集——c# 实现CAD excel交互(CAD—C#二次开发入门)
  • 【计网笔记】以太网
  • Java 入门基础篇14 - java面向对象思想以及特性
  • 第15篇:网络架构优化与综合案例分析
  • UI自动化测试实战
  • 东方智者颜廷利:以哲学思想促进世界和谐与无私奉献
  • 基于 springboot vue停车场管理系统 设计与实现
  • 如何验证ssl私钥和证书是否匹配?
  • MongoDB的基本操作
  • spring mvc后端实现过程
  • 102005
  • Cisco ACI环境给Leaf配置OOB带外管理IP方法
  • 免费送源码:Java+B/S+MySQL springboot电影推荐系统 计算机毕业设计原创定制
  • 数据清洗(脚本)
  • jmeter中发送post请求遇到的问题
  • Java中使用protobuf
  • 2020款Macbook Pro A2251无法充电无法开机定位及修复
  • Spring Cloud --- 引入Gateway网关
  • ESP32-C3实现定时器的启停(Arduino IDE)
  • centos升级g++使其支持c++17
  • Pytest日志收集器配置
  • Morris算法(大数据作业)
  • TCP/IP协议 【三次握手】过程简要描述
  • docker 数据管理,数据持久化详解 二 数据卷容器
  • Logrotate:Linux系统日志轮转和管理的实用指南
  • 八股面试3(自用)
  • 【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步
  • 【Android】浅析OkHttp(1)
  • Generate-on-Graph
  • 学习笔记——交换——STP(生成树)简介