OpenCV的人脸检测模型FaceDetectorYN

OpenCV的人脸检测模型FaceDetectorYN

  • 1. 官网地址
  • 2. 如何使用
    • 2.1.到opencv_zoo下载模型文件和代码
    • 2.2. 下载文件展示
    • 2.3. 修改了demo支持读取视频文件,默认是图片和摄像头
    • ## 2.4 效果展示

1. 官网地址

https://docs.opencv.org/4.x/df/d20/classcv_1_1FaceDetectorYN.html
FaceDetectorYNopencv内置的一个人脸检测方法,使用的是yunet

这是一个DNN-based face detector.模型的下载地址:
https://github.com/opencv/opencv_zoo/tree/master/models/face_detection_yunet
在这里插入图片描述

2. 如何使用

2.1.到opencv_zoo下载模型文件和代码

在这里插入图片描述

2.2. 下载文件展示

在这里插入图片描述

2.3. 修改了demo支持读取视频文件,默认是图片和摄像头

# This file is part of OpenCV Zoo project.
# It is subject to the license terms in the LICENSE file found in the same directory.
#
# Copyright (C) 2021, Shenzhen Institute of Artificial Intelligence and Robotics for Society, all rights reserved.
# Third party copyrights are property of their respective owners.import argparseimport numpy as np
import cv2 as cv# Check OpenCV version
opencv_python_version = lambda str_version: tuple(map(int, (str_version.split("."))))
assert opencv_python_version(cv.__version__) >= opencv_python_version("4.10.0"), \"Please install latest opencv-python for benchmark: python3 -m pip install --upgrade opencv-python"from yunet import YuNet# Valid combinations of backends and targets
backend_target_pairs = [[cv.dnn.DNN_BACKEND_OPENCV, cv.dnn.DNN_TARGET_CPU],[cv.dnn.DNN_BACKEND_CUDA, cv.dnn.DNN_TARGET_CUDA],[cv.dnn.DNN_BACKEND_CUDA, cv.dnn.DNN_TARGET_CUDA_FP16],[cv.dnn.DNN_BACKEND_TIMVX, cv.dnn.DNN_TARGET_NPU],[cv.dnn.DNN_BACKEND_CANN, cv.dnn.DNN_TARGET_NPU]
]parser = argparse.ArgumentParser(description='YuNet: A Fast and Accurate CNN-based Face Detector (https://github.com/ShiqiYu/libfacedetection).')
parser.add_argument('--input', '-i', type=str,help='Usage: Set input to a certain image, omit if using camera.')
parser.add_argument('--model', '-m', type=str, default='face_detection_yunet_2023mar.onnx',help="Usage: Set model type, defaults to 'face_detection_yunet_2023mar.onnx'.")
parser.add_argument('--backend_target', '-bt', type=int, default=0,help='''Choose one of the backend-target pair to run this demo:{:d}: (default) OpenCV implementation + CPU,{:d}: CUDA + GPU (CUDA),{:d}: CUDA + GPU (CUDA FP16),{:d}: TIM-VX + NPU,{:d}: CANN + NPU'''.format(*[x for x in range(len(backend_target_pairs))]))
parser.add_argument('--conf_threshold', type=float, default=0.7,help='Usage: Set the minimum needed confidence for the model to identify a face, defauts to 0.9. Smaller values may result in faster detection, but will limit accuracy. Filter out faces of confidence < conf_threshold.')
parser.add_argument('--nms_threshold', type=float, default=0.3,help='Usage: Suppress bounding boxes of iou >= nms_threshold. Default = 0.3.')
parser.add_argument('--top_k', type=int, default=5000,help='Usage: Keep top_k bounding boxes before NMS.')
parser.add_argument('--save', '-s', action='store_true',help='Usage: Specify to save file with results (i.e. bounding box, confidence level). Invalid in case of camera input.')
parser.add_argument('--vis', '-v', action='store_true',help='Usage: Specify to open a new window to show results. Invalid in case of camera input.')
parser.add_argument('--camera_or_video', '-c', default='123.mov',help='Usage: Specify to open camera or video')
args = parser.parse_args()def visualize(image, results, box_color=(0, 255, 0), text_color=(0, 255, 255), fps=None):output = image.copy()landmark_color = [(0, 0, 255),  # right eye(0, 0, 255),  # left eye(0, 255, 0),  # nose tip(255, 0, 255),  # right mouth corner(0, 255, 255)  # left mouth corner]if fps is not None:cv.putText(output, 'FPS: {:.2f}'.format(fps), (50, 50), cv.FONT_HERSHEY_SIMPLEX, 1.5, text_color)for det in results:bbox = det[0:4].astype(np.int32)cv.rectangle(output, (bbox[0], bbox[1]), (bbox[0] + bbox[2], bbox[1] + bbox[3]), box_color, 2)conf = det[-1]cv.putText(output, '{:.4f}'.format(conf), (bbox[0], bbox[1] + bbox[3] // 2), cv.FONT_HERSHEY_DUPLEX, 1.5, text_color)landmarks = det[4:14].astype(np.int32).reshape((5, 2))for idx, landmark in enumerate(landmarks):cv.circle(output, landmark, 4, landmark_color[idx], 10)return outputif __name__ == '__main__':backend_id = backend_target_pairs[args.backend_target][0]target_id = backend_target_pairs[args.backend_target][1]# Instantiate YuNetmodel = YuNet(modelPath=args.model,inputSize=[320, 320],confThreshold=args.conf_threshold,nmsThreshold=args.nms_threshold,topK=args.top_k,backendId=backend_id,targetId=target_id)# If input is an imageif args.input is not None:image = cv.imread(args.input)h, w, _ = image.shape# Inferencemodel.setInputSize([w, h])results = model.infer(image)# Print resultsprint('{} faces detected.'.format(results.shape[0]))for idx, det in enumerate(results):print('{}: {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f} {:.0f}'.format(idx, *det[:-1]))# Draw results on the input imageimage = visualize(image, results)# Save results if save is trueif args.save:print('Resutls saved to result.jpg\n')cv.imwrite('result.jpg', image)# Visualize results in a new windowif args.vis:cv.namedWindow(args.input, cv.WINDOW_AUTOSIZE)cv.imshow(args.input, image)cv.waitKey(0)else:  # Omit input to call default cameradeviceId = args.camera_or_videocap = cv.VideoCapture(int(deviceId) if deviceId.isdigit() else deviceId)w = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))h = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))model.setInputSize([w, h])fps = int(cap.get(cv.CAP_PROP_FPS))# 定义视频编码器和创建VideoWriter对象fourcc = cv.VideoWriter_fourcc(*'mp4v')  # 或者使用 'XVID'out = cv.VideoWriter('output.mp4', fourcc, fps, (w, h))tm = cv.TickMeter()while cv.waitKey(1) < 0:# Inferencetm.start()hasFrame, frame = cap.read()if not hasFrame:print('No frames grabbed!')breakresults = model.infer(frame)  # results is a tupletm.stop()# Draw results on the input imageframe = visualize(frame, results, fps=tm.getFPS())# Visualize results in a new Windowcv.imshow('YuNet face detection', frame)# tm.reset()# 写入视频文件out.write(frame)out.release()cap.release()cv.destroyAllWindows()

## 2.4 效果展示

吕一_faces_detection

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

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

相关文章

DeepSeek-VL2

《DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding》是 DeepSeek-AI 团队发布的关于视觉语言模型 DeepSeek-VL2 的论文&#xff0c;以下是对该论文的详细介绍&#xff1a; 研究背景与动机 多模态理解的重要性&#xff1a;在当…

电子应用设计方案82:智能 AI 椅子系统设计

智能 AI 椅子系统设计 一、引言 智能 AI 椅子旨在为用户提供更加舒适、个性化和智能化的坐乘体验&#xff0c;结合了先进的技术和人体工程学原理。 二、系统概述 1. 系统目标 - 自动适应用户的体型和坐姿&#xff0c;提供最佳的支撑和舒适度。 - 实时监测用户的健康数据&…

Ps:创建数据驱动的图像

在设计实践中&#xff0c;常常需要处理大量内容变化但设计格式统一的任务&#xff0c;例如批量生成名片、工作证、学生证、胸牌、奖状或证书甚至图册。这些工作如果逐一手动制作&#xff0c;不仅耗时费力&#xff0c;还容易出错。 为解决这一问题&#xff0c;Photoshop 提供了强…

彻底解决 Selenium ChromeDriver 不匹配问题:Selenium ChromeDriver 最新版本下载安装教程

在 Python 的 Selenium 自动化测试中&#xff0c;ChromeDriver 是不可或缺的工具。它作为代码与 Chrome 浏览器的桥梁&#xff0c;但如果版本不匹配&#xff0c;就会导致各种报错&#xff0c;尤其是以下常见问题&#xff1a; selenium.common.exceptions.SessionNotCreatedExc…

天猫推荐数据集实践

参考自 https://github.com/xufengtt/recom_teach_code&#xff0c;学习记录。 环境配置&#xff08;maxcomputedataworks&#xff09; 下载天猫推荐数据集&#xff1b;开启 aliyun 的 maxcompute&#xff0c;dataworks&#xff0c;pai&#xff1b;使用 odpscmd 上传本地数据…

人脑处理信息的速度与效率:超越计算机的直观判断能力

人脑处理信息的速度与效率&#xff1a;超越计算机的直观判断能力 关键词&#xff1a; #人脑信息处理 Human Brain Information Processing #并行处理 Parallel Processing #视觉信息分析 Visual Information Analysis #决策速度 Decision Speed #计算机与人脑比较 Computer v…

checked 溢出问题

{try{int i int.MaxValue;int j;checked{j i 1;}}catch (OverflowException er){Console.WriteLine($"加Checked——>{er.Message}");}}{try{int i int.MaxValue;int j;j i 1;}catch (OverflowException er){Console.WriteLine($"没有加Checked——&g…

LabVIEW 使用 Resample Waveforms VI 实现降采样

在数据采集与信号处理过程中&#xff0c;降采样是一种重要的技术&#xff0c;用于在减少数据点的同时保留信号的关键特性&#xff0c;从而降低存储和计算需求。本文通过 LabVIEW 的 Resample Waveforms (continuous).vi 示例&#xff0c;详细介绍如何使用该功能实现波形数据的降…

数字化供应链创新解决方案在零售行业的应用研究——以开源AI智能名片S2B2C商城小程序为例

摘要&#xff1a; 在数字化转型的浪潮中&#xff0c;零售行业正经历着前所未有的变革。特别是在供应链管理方面&#xff0c;线上线下融合、数据孤岛、消费者需求多样化等问题日益凸显&#xff0c;对零售企业的运营效率与市场竞争力构成了严峻挑战。本文深入探讨了零售行业供应…

《计算机网络》(B)复习

目录 一、问答题测试 1.论述具有五层协议的网络体系结构的要点&#xff0c;包括各层的主要功能。 2.物理层的接口有哪几个方面的特性&#xff1f;各包含些什么内容&#xff1f; 3.小明想要访问淘宝&#xff0c;当他打开浏览器输入www.taobao.com浏览淘宝的 过程是什么&#…

用Tkinter制作一个用于合并PDF文件的小程序

需要安装PyPDF2库&#xff0c;具体原代码如下&#xff1a; # -*- coding: utf-8 -*- """ Created on Sun Dec 29 14:44:20 2024author: YBK """import PyPDF2 import os import tkinter as tk import windndpdf_files [] def dragged_files(f…

“大数据+职业本科”:VR虚拟仿真实训室的发展前景

在新时代背景下&#xff0c;随着科技的飞速进步和产业结构的不断升级&#xff0c;职业教育正迎来前所未有的变革。“大数据职业本科”的新型教育模式&#xff0c;结合VR&#xff08;虚拟现实&#xff09;技术的广泛应用&#xff0c;为实训教学开辟了崭新的道路&#xff0c;尤其…

【异常解决】生产环境 net :: ERR_INCOMPLETE_CHUNKED_ENCODING的问题修复

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

矩阵运算提速——玩转opencv::Mat

介绍:用Eigen或opencv::Mat进行矩阵的运算&#xff0c;比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因&#xff1a; 优化的底层实现…

mac m2 安装 docker

文章目录 安装1.下载安装包2.在downloads中打开3.在启动台打开打开终端验证 修改国内镜像地址小结 安装 1.下载安装包 到官网下载适配的安装包&#xff1a;https://www.docker.com/products/docker-desktop/ 2.在downloads中打开 拖过去 3.在启动台打开 选择推荐设置 …

redis的集群模式与ELK基础

一、redis的集群模式 1.主从复制 &#xff08;1&#xff09;概述 主从模式&#xff1a;这是redis高可用的基础&#xff0c;哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的&#xff0c;主负责写入&#xff0c;然后把写入的数据同步到从服务器&#xff…

建立一个Macos载入image的实例含界面

前言 为了方便ios程序的开发&#xff0c;有时候需要先用的Macos平台进行一些功能性的程序开发。 作为对比和参考。 1、创建一个MacOS的App 2、主界面控件的增加 添加的控件方法与ios相同&#xff0c;也是再用commandshiftL&#xff08;CtrlShiftL&#xff09;,就会弹出控件…

《机器学习》从入门到实战——逻辑回归

目录 一、简介 二、逻辑回归的原理 1、线性回归部分 2、逻辑函数&#xff08;Sigmoid函数&#xff09; 3、分类决策 4、转换为概率的形式使用似然函数求解 5、对数似然函数 ​编辑 6、转换为梯度下降任务 三、逻辑回归拓展知识 1、数据标准化 &#xff08;1&#xf…

实践:事件循环

实践&#xff1a;事件循环 代码示例 console.log(1); setTimeout(() > console.log(2), 0); Promise.resolve(3).then(res > console.log(res)); console.log(4);上述的代码的输出结果是什么 1和4肯定优先输出&#xff0c;因为他们会立即方式堆栈的执行上下文中执行&am…

【机器学习】工业 4.0 下机器学习如何驱动智能制造升级

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 随着科技的飞速发展&#xff0c;工业 4.0 浪潮正席卷全球制造业&#xff0c;而机器学习作为这一变革中的关键技术&#xff0c;正以前…