当前位置: 首页 > article >正文

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 model
    model = YOLO(r'weights/yolov8x-pose-p6.pt', task='pose')
    # Perform prediction
    results = model.predict(source=source, save=False, show=False)
    for result in results:
        keypoint_image = result.plot()  # This method will create an image with keypoints drawn
    return 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 BytesIO


st.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 model
    model = YOLO(r'weights/yolov8x-pose-p6.pt', task='pose')

    # Perform prediction
    results = model.predict(source=source, save=False, show=False)
    for result in results:
        keypoint_image = result.plot()  # This method will create an image with keypoints drawn
    return keypoint_image

import 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_im


def 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.kler.cn/a/320765.html

相关文章:

  • 【3D Slicer】的小白入门使用指南九
  • 鸿蒙中如何实现图片拉伸效果
  • java 读取 有时需要sc.nextLine();读取换行符 有时不需要sc.nextLine();读取换行符 详解
  • ubuntu 安装kafka-eagle
  • 《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配
  • Kafka新节点加入集群操作指南
  • 智算中心动环监控:构建高效、安全的数字基础设施@卓振思众
  • 从Unity到Godot
  • Ubuntu22.04安装paddle
  • 超越sora,最新文生视频CogVideoX-5b模型分享
  • 4.SPI外设—LCD小案例
  • 拓数派荣获上海数据交易所“数据治理服务商”认证
  • 无线领夹麦克风哪个牌子好,2024年新款领夹麦克风推荐
  • 回归预测 | Matlab基于SO-SVR蛇群算法优化支持向量机的数据多输入单输出回归预测
  • 【监控体系搭建一】Docker安装与使用
  • 万界星空科技铜拉丝行业MES系统,实现智能化转型
  • Prometheus使用Pushgateway推送数据
  • 【数据结构】栈和队列(Stack Queue)
  • 统信服务器操作系统ade版【iostat】命令详解
  • LeetCode 136. 只出现一次的数字
  • 三,MyBatis-Plus 的各种查询的“超详细说明”,比如(等值查询,范围查询,模糊查询...)
  • Kafka集群扩容(新增一台kafka节点)
  • Could not load library libcudnn_cnn_train.so.8 问题及(非常简单)解决方案
  • 线阵相机的参数选型计算
  • vue.config.js devServer中changeOrigin的作用
  • VS Code实现flutter多语言(官方推荐Intl)