使用python-opencv检测图片中的人像

最简单的方法进行图片中的人像检测

使用python-opencv配合yolov3模型进行图片中的人像检测

1、安装python-opencv、numpy

pip install opencv-python
pip install numpy 

2、下载yolo模型文件和配置文件:

下载地址:

 https://download.csdn.net/download/mldxs/88396654yicon-default.png?t=N7T8https://download.csdn.net/download/mldxs/88396654

yolo官网:

YOLO: Real-Time Object DetectionYou only look once (YOLO) is a state-of-the-art, real-time object detection system.icon-default.png?t=N7T8https://pjreddie.com/darknet/yolo/3、搬砖:代码比较简单并且带注释,不过多介绍

import cv2
import numpy as np# 读取输入图像
image = cv2.imread('input.jpeg')# 加载YOLOv3模型和类别标签
net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')
classes = []
with open('coco.data', 'r') as f:classes = f.read().strip().split('\n')# 获取YOLO模型的输出层名称
layer_names = net.getLayerNames()
output_layers = []
unconnected_layers = net.getUnconnectedOutLayers()# 根据输出层索引获取输出层名称
for i in unconnected_layers:output_layers.append(layer_names[i - 1])# 为每个类别生成随机颜色
colors = np.random.uniform(0, 255, size=(len(classes), 3))# 获取图像的尺寸
height, width, channels = image.shape# 创建YOLO模型的输入blob
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)# 将blob设置为模型的输入
net.setInput(blob)
outs = net.forward(output_layers)class_ids = []
confidences = []
boxes = []# 处理YOLO模型的输出
for out in outs:for detection in out:scores = detection[5:]class_id = np.argmax(scores)confidence = scores[class_id]# 如果置信度大于0.5并且类别是"person"(0对应COCO数据集中的"person"类)if confidence > 0.5 and class_id == 0:center_x = int(detection[0] * width)center_y = int(detection[1] * height)w = int(detection[2] * width)h = int(detection[3] * height)x = int(center_x - w / 2)y = int(center_y - h / 2)boxes.append([x, y, w, h])confidences.append(float(confidence))class_ids.append(class_id)# 使用非极大值抑制获取最终的检测结果
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
margin = 30  # 定义边框扩展的边距大小# 绘制边框和类别标签
for i in range(len(boxes)):if i in indexes:x, y, w, h = boxes[i]label = str(classes[class_ids[i]])color = colors[i]# 扩展边框的坐标x_new = max(0, x - margin)y_new = max(0, y - margin)w_new = min(image.shape[1], w + 2 * margin)h_new = min(image.shape[0], h + 2 * margin)# 绘制扩展后的边框cv2.rectangle(image, (x_new, y_new), (x_new + w_new, y_new + h_new), color, 2)cv2.putText(image, label, (x_new, y_new - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)# 显示带有边框的图像
cv2.imshow('Detected Bodies', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

最终效果:

yolo有很多检测类别,上述代码只对人像进行检测,就是检测类别里的第一项(person)

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

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

相关文章

参与现场问题解决总结(Kafka、Hbase)

一. 背景 Kafka和Hbase在现场应用广泛,现场问题也较多,本季度通过对现场问题就行跟踪和总结,同时结合一些调研,尝试提高难点问题的解决效率,从而提高客户和现场满意度。非难点问题(历史遇到过问题&#xf…

三模块七电平级联H桥整流器电压平衡控制策略Simulink仿真

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

[ubuntu]ubuntu设置虚拟内存

首先查看自己是否加过虚拟内存或者查看虚拟内存当前状态可以命令: free -mh 创建交换分区: sudo mkdir /swap cd /swap sudo dd if/dev/zero ofswapfile bs1024 count12582912 其中count是自己分配内存大小,上面为12GB,你可…

travel总结:

目录 1、前期准备: 2、项目期间: (1)注册功能的实现: 1、前端: 1、表单数据的校验:(js) 2、使用ajax完成表单提交 3、注册成功跳转页面 2、web: 1、获取表单数据、封装数据 2、调…

【Java8】线程问题排查分析

文章目录 thread dump简介JDK 工具jstackjattachjvisualvm Java程序CPU消耗较高,怎么快速看出是那个线程导致的呢?我们可以使用命令 jstack/jattach来快速定位问题 thread dump简介 thread dump 是 Java 进程的所有线程状态的快照。每个线程的状态都通过…

练[MRCTF2020]套娃

[MRCTF2020]套娃 文章目录 [MRCTF2020]套娃掌握知识解题思路代码分析1代码分析2 关键paylaod 掌握知识 ​ 参数的_符号的替换,正则和强等于联合绕过,jsfuck编码,bp请求方式的转变,本地ip的请求头,代码审计&#xff0c…

操作系统的五种IO模型

高级IO 阻塞IO 在内核将数据准备好之前,系统调用会一直等待,所有的套接字默认都是阻塞方式。 非阻塞IO 如果内核还未将数据准备好,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。 非阻塞IO往往需要程序员循环的方式反复尝试…

TCP四次挥手

四次挥手发生在断开连接的时候,在程序中当调用了close()会使用TCP协议进行四次挥手。 客户端和服务器端都可以主动发起断开连接,谁先调用close()谁就是发起。 因为在TCP连接的时候,采用三次握手建立的的连接是双向的,在断开的时候…

电脑被删除的文件怎么恢复?2023年数据恢复方法分享

大多数人在使用电脑时都可能会遇到误删文件的情况。一不小心,重要的文件或数据就消失了,情急之下,大多会感到慌乱和无助。但其实,文件误删除并非不可挽回的灾难。本文将为大家介绍几种有效的文件恢复方法,以帮助大家在…

【力扣】42. 接雨水

这道题我卡了差不多1个小时,不是不会做,是不知道怎么能用栈来实现,后面看了一个博主的视频,豁然开朗,我主要的纠结点在于当指针指到7的时候,我计算出4到7的水块是2,但实际上是0,因为…

SpringBoot 可以同时处理多少请求

目录 一、前言 二、相关配置 1、配置信息 2、配置说明 3、案例说明 三、代码验证 1、测试代码 2、测试步骤 四、总结 一、前言 首先,在Spring Boot应用中,我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这…

Vue中如何进行拖拽与排序功能实现

在Vue中实现拖拽与排序功能 在Web应用程序中,实现拖拽和排序功能是非常常见的需求,特别是在管理界面、任务列表和图形用户界面等方面。Vue.js作为一个流行的JavaScript框架,提供了许多工具和库来简化拖拽和排序功能的实现。本文将介绍如何使…

抖捧自动直播市场火热,实体行业如何实现高效开播?

在AI数字人热度之后,最近抖捧场景自动直播开始火遍全网,因为操作简单成本极低,只需要一部手机放在店里,就可以高效开播,深受广大实体行业老板的认可,那么抖捧实景自动直播的方式,具体是怎么实现…

P1014 [NOIP1999 普及组] Cantor 表

#include <bits/stdc.h> using namespace std; int main() {int n,k1;cin>>n;while (n>k) {nn-k;k;}if(k%20) cout<<n<<"/"<<(k1-n);else cout<<k1-n<<"/"<<n;return 0; }

IDEA添加Vue文件模板

代码模板&#xff1a; <!-- *${COMPONENT_NAME} *author niemengshi *date ${DATE} ${TIME} --> <template> #[[$END$]]# </template> <script> export default { name: "${COMPONENT_NAME}", props: { }, components: {}, mounted: {}, d…

数据压缩与管理:掌握Linux VDO和LVM的力量

1.逻辑卷(LVM&#xff0c;Logical Volume Management) 动态的为服务器磁盘添加空间&#xff0c;而不会影响原磁盘的数据&#xff0c;也不需要对原始磁盘重新分区。 1.1 LVM介绍 以下是LVM的示意图&#xff1a; 我们拿到一块硬盘后首先对齐进行划分分区&#xff0c;也就得到…

CocosCreator3.8研究笔记(二十三)CocosCreator 动画系统-动画编辑器相关功能面板说明

国庆假期&#xff0c;闲着没事&#xff0c;在家研究技术~ 上一篇&#xff0c;我们介绍了动画剪辑、动画组件以及基本的使用流程&#xff0c;感兴趣的朋友可以前往阅读&#xff1a; CocosCreator 动画系统-动画剪辑和动画组件介绍。 今天&#xff0c;主要介绍动画编辑器相关功能…

FastThreadLocal 快在哪里 ?

FastThreadLocal 快在哪里 &#xff1f; 引言FastThreadLocalset如何获取当前线程私有的InternalThreadLocalMap &#xff1f;如何知道当前线程使用到了哪些FastThreadLocal实例 ? get垃圾回收 小结 引言 FastThreadLocal 是 Netty 中造的一个轮子&#xff0c;那么为什么放着…

一篇理解网络分层原理

一、网络分层的必要性。 如图是一个数据的传输过程&#xff0c;在这个途中会有很多的原因导致数据丢失&#xff0c;网络分层就要可以很大程度的避免这个现象。 网络分层的必要性体现在以下几个方面&#xff1a; 抽象复杂度&#xff1a;网络分层将网络功能按照不同的层次进行分…