使用 YOLOv8 实现人体姿态检测

引言

在计算机视觉的各种应用中,人体姿态检测是一项极具挑战性的任务,它能够帮助我们理解人体各部位的空间位置。本文将详细介绍如何使用 YOLOv8 和 Python 实现一个人体姿态检测系统,涵盖模型加载、图像预处理、姿态预测到结果可视化的全流程实现。本文只做了行走,站立,跳三种姿态判断,需要其他姿态可自行添加。

开发环境

  • Python 3.8+
  • PyTorch 1.7+
  • OpenCV 4.5+
  • ultralytics YOLOv8

1. 模型加载与初始化

首先,我们需要一个 YOLOv8 的预训练模型,该模型可以从 Ultralytics 官方网站下载。加载模型的主要目的是将其调整到评估模式,确保在推断时模型的表现为最优。

import torchclass YOLOv8Pose:def __init__(self, model_path, device='cpu', conf=0.25, iou=0.7):self.model = self.load_model(model_path, device)# 其他初始化设置def load_model(self, model_path, device):ckpt = torch.load(model_path, map_location=device)model = ckpt['model'].to(device).eval()return model

2. 图像预处理

图像预处理是检测流程中不可或缺的一部分,我们需要调整图像的大小以适应模型的输入要求,同时进行归一化处理。

import cv2 as cv
from ultralytics.data.augment import LetterBoxdef preprocess(self, img_path):im = cv.imread(img_path)im = self.letterbox(im)im = im[..., ::-1].transpose((0, 3, 1, 2))  # BGR to RGBim = np.ascontiguousarray(im)im = torch.from_numpy(im).to(self.device).float() / 255.0return im

3. 推断与后处理

使用加载的模型进行前向推断,并对输出的检测结果进行处理。

def infer(self, img):preds = self.model(img)# 使用非极大抑制处理预测结果return predsdef postprocess(self, prediction):# 调整预测框,解析关键点return results

4. 结果可视化

对检测到的姿态进行可视化,包括绘制边框、关键点和骨骼连接。

def draw_results(self, image, results):# 使用 OpenCV 绘制结果return image

5. 整合与测试

将上述所有步骤整合到一个流程中,对指定的图片进行处理并展示结果。

if __name__ == "__main__":yolov8 = YOLOv8Pose(model_path='yolov8s-pose.pt')img_path = 'path_to_image.png'img = yolov8.preprocess(img_path)prediction = yolov8.infer(img)results = yolov8.postprocess(prediction)final_image = yolov8.draw_results(img, results)cv.imshow('Detection Results', final_image)cv.waitKey(0)

效果

在这里插入图片描述

源码已上传到github,需要源码请私信或着评论区留下邮箱。


希望这篇博客能够帮助你理解并实践 YOLOv8 在人体姿态检测上的应用!

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

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

相关文章

《基于 Kafka + Flink + ES 实现危急值处理措施推荐和范围校准》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,欢迎多多交流。&am…

爬虫-豆瓣读书排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析: 导入requests库调用了requests库中的…

2024年文化研究与数字媒体国际会议 (CRDM 2024)

2024年文化研究与数字媒体国际会议 (CRDM 2024) 2024 International Conference on Cultural Research and Digital Media 【重要信息】 大会地点:珠海 大会官网:http://www.iccrdm.com 投稿邮箱:iccrdmsub-conf.com 【注意:稿将…

程序员必知的 89 个操作系统核心概念

1. 操作系统(Operating System,OS):是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系…

开放式耳机的哪些品牌比较好?开放式耳机爆款2024机型强烈推荐

现在耳机越来越难挑,一是市场上的品牌越来越多,网红品牌,专业的品牌可选择性太多了,但是质量什么的就没有办法保证了,所以作为耳机测评师,为了让大家能够挑选到适合自己的那一款开放式耳机,我写…

Java-SpringBoot启动报端口被占用,如何找到占用端口的进程并杀掉

背景 当我们本地启动多个项目,可能会出现端口被占用的情况,当然有时候可能idea窗口关闭,但是进程并没有kill掉,导致再次启动项目时也会报端口被占用的错误。 通常的做法是打开任务管理器,然后kill掉对应的进程。 首先…

位置编码的具体计算方式(公式解释)

公式 (10.6.2) 描述了位置编码的具体计算方式,这种位置编码基于正弦和余弦函数,用于在自注意力机制中引入位置信息。下面我们详细解释公式和代码。 公式 (10.6.2) 公式 (10.6.2) 的目的是为输入序列中的每个词元添加一个位置编码,以保留序列…

MOE技术简要记录

MOE GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding 模型设计: 特点: (1) 专家容量 expert capacity 强制规定了每一个expert所负责处理的token数量有一个最大值,这个最大值就叫专家容量;(…

RK3588 linux RGA初探

概述 RGA (Raster Graphic Acceleration Unit)是一个独立的2D硬件加速器,可用于加速点/线绘制,执行图像缩放、旋转、bitBlt、alpha混合等常见的2D图形操作。 本文基于以下版本编写: commit fb5f019ea0191ec1c34f49ac8be447ac8921aadd (HEAD -> main,…

服务器数据恢复—raid5阵列硬盘出现大量坏道的数据恢复案例

服务器存储数据恢复环境&故障: 一台DELL EqualLogic PS 4000存储中有一组由12块磁盘组建的raid5阵列,存储空间划分3个同等大小的卷,采用的VMFS文件系统。 两块硬盘指示灯亮黄色,raid5阵列崩溃,存储变得不可用。 服…

C语言学习记录Day2

for循环 for(表达式1;表达式2;表达式3) 循环语句; 注:表达式1:初始化部分.表达式2:条件判断部分 表达式3:调整部分 不可再for循环体内修改循环变量,防止f…

厂拉拉获清科文创天使轮投资

最新信息:源头工厂测品平台厂拉拉APP已正式获得北京清科文创千万级的天使轮投资。 本轮资金将主要用于测品师、品鉴官队伍的引流,及APP3.0数字供应链和用户购物行为算法技术、算力模型的建设。 厂拉拉APP的营运主体为广州智邦远见科技有限公司&#xf…

Java基础概念

1.注释和关键字 (1)注释 什么是注释?注释就是对代码进行解释说明的文字 注释的分类?单行注释,多行注释,文档注释 注释的使用细节? 注释的内容不会参与编译和运行,仅仅是对代码的…

【Linux】touch

我们在介绍ls这个命令时,提到每个文件在Linux下面都会记录许多的时间参数,其实是有三个主要的变动时间,那么三个时间的意义是什么? 修改时间(modification time,mtime):当该文件的【内容数据】…

十二、数组

1. 一维数组的创建和初始化 数组是一组相同类型元素的集合。 变长数组是不能初始化的。 数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。 例如上图 char ch3[ ]"abc";里面方的就是 a b c \0 char ch3[ …

EDA 2023 年世界国家suicide rate排名

文章目录 前言:关于数据集列 导入模块导入数据数据预处理探索性数据分析按性别划分的自杀率 [箱线图]相关矩阵热图自杀率最高的 15 个国家变化百分比最高的 15 个国家/地区2023 年世界地图上自杀率的国家 结尾: 前言: 随着社会的不断发展和变迁,人们对于各种社会问…

揭秘:源代码防泄密的终极秘籍

在当今信息科技高度发达的时代,源代码作为企业最核心的资产之一,其安全性不言而喻。源代码的泄露可能导致企业技术机密被竞争对手获取,进而威胁到企业的市场竞争力和长远发展。因此,源代码防泄密成为了企业信息安全工作的重中之重…

前端JS特效第24波:jQuery轻量级响应式幻灯片插件EasyFader

jQuery轻量级响应式幻灯片插件EasyFader&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"utf-8"> <title>jQuery轻量级响应式幻灯片插件E…

C-10 凸包

凸包 数学定义 平面的一个子集S被称为是凸的&#xff0c;当且仅当对于任意两点A&#xff0c;B属于S&#xff0c;线段PS都完全属于S过于基础就不详细介绍了 凸包的计算 github上找到了别人的代码&#xff0c;用4种方式实现了凸包的计算&#xff0c;把他放在这里链接地址htt…

redis运维:sentinel模式如何查看所有从节点

1. 连接到sentinel redis-cli -h sentinel_host -p sentinel_port如&#xff1a; redis-cli -h {域名} -p 200182. 发现Redis主服务器 连接到哨兵后&#xff0c;我们可以使用SENTINEL get-master-addr-by-name命令来获取当前的Redis主服务器的地址。 SENTINEL get-master-a…