YOLOv8-pose+streamlit 实现人体关键点检测/姿态估计系统(后续可用于健身时的姿态估计,训练纠正等....)

人体关键点检测系统

  • 一、安装与配置
    • 1.1 安装 Streamlit
    • 1.2 配置文件
    • 1.3 运行Streamlit应用
    • 1.4 找模板
  • 二、人体关键点检测算法
    • 2.1 关键点序号
    • 2.2 YOLOv8-pose图像推理
  • 三、将YOLOv8-pose算法内置到streamlit中
    • 3.1 整体结构
    • 3.2 常见问题
      • - RGB通道颠倒
      • - Numpy与OpenCV之间的转换
  • 四、效果展示
  • 五、源码获取

一、安装与配置

1.1 安装 Streamlit

在命令行直接输入下方指令即可:

pip install streamlit

1.2 配置文件

在本地的C:\Users\Administrator.streamlit这个位置新建==.streamlit==文件,复制下面的代码段即可

[server]
port = 8501
enableCORS = false[browser]
serverAddress = "localhost"
gatherUsageStats = false[runner]
magicEnabled = false

1.3 运行Streamlit应用

运行streamlit演示项目:

streamlit hello

看到如下图web文件代表安装成功。在这里插入图片描述

1.4 找模板

可以上https://streamlit.io/官网,查找一下适合自己的模板,下载到本地后,运行如下指令,进行部署查看

streamlit run streamli/bg_remove.py

我们使用的模板样式如下图所示:
在这里插入图片描述

二、人体关键点检测算法

2.1 关键点序号

以YOLOv8-pose人体姿态估计为例,在COCO数据集上身体的每一个关节具有一个序号,共17个点:

COCO_keypoint_indexes = {0: 'nose',1: 'left_eye',2: 'right_eye',3: 'left_ear',4: 'right_ear',5: 'left_shoulder',6: 'right_shoulder',7: 'left_elbow',8: 'right_elbow',9: 'left_wrist',10: 'right_wrist',11: 'left_hip',12: 'right_hip',13: 'left_knee',14: 'right_knee',15: 'left_ankle',16: 'right_ankle'
}

如下图所示:
在这里插入图片描述

2.2 YOLOv8-pose图像推理

为了方便,将训练好的模型直接用YOLOv8的内置方法进行推理:model.predict
使用result.plot直接将推理出的目标及关键点画到原图像上去,得到keypoint_image文件。(这里对该方法进行了封装,以便后续调用使用)

def predctImg(source):# Load a modelmodel = YOLO(r'weights/yolov8x-pose-p6.pt', task='pose')# Perform predictionresults = model.predict(source=source, save=False, show=False)for result in results:keypoint_image = result.plot()  # This method will create an image with keypoints drawnreturn keypoint_image

三、将YOLOv8-pose算法内置到streamlit中

3.1 整体结构

核心其实是围绕以下这个引用展开的,涉及了st中几个简单的API,具体内容还是在官网中都有。

import streamlit as st
import cv2
import streamlit as st
from PIL import Image
from io import BytesIOst.set_page_config(layout="wide", page_title="Image Background Remover")st.write("## :dog: Human Critical Point Detection :grin:")
st.sidebar.write("## Upload and download :gear:")from ultralytics import YOLO
def predctImg(source):# Load a modelmodel = YOLO(r'weights/yolov8x-pose-p6.pt', task='pose')# Perform predictionresults = model.predict(source=source, save=False, show=False)for result in results:keypoint_image = result.plot()  # This method will create an image with keypoints drawnreturn keypoint_imageimport numpy as np
def convert_image(img):buf = BytesIO()# 将Numpy矩阵转换成OpenCV图像img = Image.fromarray(np.uint8(img))img.save(buf, format="PNG")byte_im = buf.getvalue()return byte_imdef fix_image(upload):image = Image.open(upload)col1.write("Original Image :camera:")col1.image(image)fixed = predctImg(image)fixed = cv2.cvtColor(fixed,cv2.COLOR_BGR2RGB)col2.write("Fixed Image :wrench:")col2.image(fixed)st.sidebar.markdown("\n")st.sidebar.download_button("Download fixed image", convert_image(fixed), "fixed.png", "image/png")col1, col2 = st.columns(2)
my_upload = st.sidebar.file_uploader("Upload an image", type=["png", "jpg", "jpeg"])if my_upload is not None:fix_image(upload=my_upload)
else:fix_image("D:\pythonCode\\two_wheel_vehicle_det\\ultralytics-main\\ultralytics-main\images\img.png")

3.2 常见问题

- RGB通道颠倒

看到图像颜色变得很奇怪时(RGB三通道颠倒),可以尝试改变一下三色通道

fixed = cv2.cvtColor(fixed,cv2.COLOR_BGR2RGB)

- Numpy与OpenCV之间的转换

Numpy转OpenCV图像

# 将Numpy矩阵转换成OpenCV图像img = Image.fromarray(np.uint8(img))

Numpy的优点:

  • 高效:Numpy内部使用C语言编写,执行速度快。
  • 功能丰富:提供了大量的数学函数和数组操作。
  • 易于集成:可以与Python的其他科学计算库无缝集成。

四、效果展示

左侧选择上传图片,上传后自动传输给后端YOLO文件进行目标检测和关键点检测推理,处理好图像之后将结果返回并在右侧进行展示,还可进行保存操作。
在这里插入图片描述
在这里插入图片描述
推理图像前后端版本:

视频推理:

五、源码获取

q 1831255794

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

个人信息安全,从这一课(CISAW-PIS)开始!

近年来,我国个人信息保护力度不断加大,个人信息的合法处理、跨境流动和安全保护变得更加复杂和严格。企业和管理者面临着如何执行个人信息保护相关法律、标准规范的挑战,员工则需要有效学习和应用个人信息保护策略,以确保个人信息…

8.11 矢量图层线要素单一符号使用一(简单线)

8.11 矢量图层线要素单一符号使用一(简单线)_qgis标记如何添加简单线-CSDN博客 目录 前言 简单线(Simple line)符号的使用 QGis中的使用 二次开发代码实现 总结 前言 本章介绍矢量图层线要素单一符号中简单线(Simple line)…

【Python报错已解决】TypeError: can only concatenate str (not “int“) to str

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Linux-df命令使用方法

Linux-df(disk filesystem)命令 df 命令是 Unix 和 Linux 系统中用于报告文件系统磁盘空间使用情况的工具。 df [OPTION]... [FILE]...OPTION 常用选项(博主一般df -h用的较多,可读性较好) -h:以人类可读的…

离散化 ---( 求区间和)

什么是离散化? 离散化是将连续的数值范围映射到有限的、离散的数值集合的过程。在许多情况下,数据可能会存在多个重复值或范围较大的连续值。为了简化处理,尤其是处理区间查询和增量问题时,我们可以将这些值转换为一组有限的、唯一…

如何进行光伏项目卫星踏勘?

一、卫星地图选址 1. 数据获取 卫星踏勘的第一步是获取高分辨率的卫星图像。利用卫星遥感技术,可以获取项目候选区域的地形地貌、植被覆盖等详细信息。这些数据通过专业的遥感图像处理软件进行分析和解译,提取出对光伏电站建设有重要影响的关键因素&am…

如何同时使用多个Craigslist账户而不被封禁?

Craigslist作为美国最受欢迎的在线分类广告网站之一,无论是商务广告、招聘还是资讯都可以在上面进行。每月吸引约250万次访问,是扩大在线影响力的绝佳选择。尽管Craigslist允许创建多个账户,但在发布广告时存在一些限制。例如,你不…

使用shardingsphere实现mysql数据库分片

在大数据时代,随着业务数据量的不断增长,单一的数据库往往难以承载大规模的数据处理需求。数据库分片(Sharding)是一种有效的数据库扩展技术,通过将数据分布到多个数据库实例上,提高系统的性能和可扩展性。…

【JavaEE】数据链路层协议和DNS

🔥个人主页: 中草药 🔥专栏:【Java】登神长阶 史诗般的Java成神之路 👜一.以太网 以太网(Ethernet)是一种局域网技术,它定义了开放系统互连(OSI)模型中的物理…

基于AWR1642 讲解TI毫米波雷达开发环境搭建

文章内容同步发布在公众号(雷达原理与系统),欢迎关注交流~ 这是第三篇文章,上一篇文章介绍了“TI官方资源介绍和使用”,感兴趣的可以去参考一下。本篇内容打算介绍基于AWR1642讲解TI毫米波雷达开发环境搭建,包括常用的…

会员业务出口网关的设计与实现

01# 背景介绍 1.1 出口网关是什么 出口网关(Egress Gateway)是一种部署在云或企业网络中的网络组件,它控制着从内部网络(如企业内网、内部微服务网络)流出到外部网络(如公共互联网或其他外部服务&#xf…

宠物浮毛难清理,希喂、小米、美的宠物空气净化器该选哪款?

养猫养出病来说的就是我了。 养猫之前幻想的一人一猫幸福生活还没一个月,我就进了医院。我自认为是很爱干净的人,养猫后打扫得更勤快了,早晚都给猫咪梳毛。平时卫生也没少搞,家里也是很干净的,实在不明白为什么会过敏…

点赞10万+,1分钟教会你,用AI生成的宠物带娃视频

今天刷到了这样的宠物带娃视频,最近这种视频爆火,出现了很多爆款,今天就拆解一下,教大家学会这种视频用AI如何生成。 我们先看一下这类视频的数据,很多账号都在做,对于不了解AI的人来说,会觉得…

1小时极限速通MC局域网联机:PCL2 + Zerotier局域网联机方案

目录 前言 你需要在开始之前做什么? 你需要什么 你需要下载什么 谁,需要做什么? STEP I:创建/加入一个子网 创建一个子网(子网的维护者做) 加入一个子网(其他人做) 现在... …

论文笔记:基于共注意网络的多模态假新闻检测

整理了AAAI2023 Multimodal Fusion with Co-Attention Networks for Fake News Detection)论文的阅读笔记 背景模型MCAN框架特征提取特征融合 实验主实验消融实验可视化 背景 具有文字和视觉内容的假新闻具有更好的讲故事能力,人们很容易被这样的假新闻欺…

python 图片加文字 文字自动上下左右居中 自动换行居中对齐

一.实现效果展示 二.代码 # -*- coding: utf-8 -*- # Time : 2024/9/26 17:22 # Author : Cocktail_pyfrom PIL import Image, ImageFont, ImageDrawdef split_string(s, num_parts):length len(s)chunk_size length // num_partsremainder length % num_partsparts […

新能源背景下,电瓶车充电现状的分析及管理方案

【摘要】:在新能源日益普及的背景下,社会安全问题显得尤为突出。以电瓶车为例,其户外停放难、充电难的问题愈发凸显,成为社会各界关注的焦点。尤其是“飞线充电”和“楼道充电”等不规范行为,更是屡见不鲜,…

脚手架是什么?详细版+通俗易懂版!!!!!!

脚手架(Scaffolding)在软件开发领域,特别是在前端开发和全栈开发环境中,是一个术语,用来描述一个辅助工具或框架,它旨在帮助开发者快速搭建项目的基础结构和开发环境。这些基础结构可能包括项目的目录结构、…

Halcon基础系列1-基础算子

1 窗口介绍 打开Halcon 的主界面主要有图形窗口、算子窗口、变量窗口和程序窗口,可拖动调整位置,关闭后可在窗口下拉选项中找到。 2 显示操作 关闭-dev_close_window() 打开-dev_open_window (0, 0, 712, 512, black, WindowHandle) 显示-dev_display(…

图片转字符画

在Github上看到的一个有趣的开源项目,实现将图片转换为字符画,这样,不能贴图片的场景下可以用字符画替代。 Github演示地址: https://505e06b2.github.io/Image-to-Braille/ Github源码下载地址: https://github.c…