YOLOv8-pose+streamlit 实现人体关键点检测/姿态估计系统

人体关键点检测系统

一、安装与配置

1.1 安装 Streamlit

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

python 复制代码
pip install streamlit

1.2 配置文件

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

python 复制代码
[server]
port = 8501
enableCORS = false
 
[browser]
serverAddress = "localhost"
gatherUsageStats = false
 
[runner]
magicEnabled = false

1.3 运行Streamlit应用

运行streamlit演示项目:

python 复制代码
streamlit hello

看到如下图web文件代表安装成功。

1.4 找模板

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

python 复制代码
streamlit run streamli/bg_remove.py

我们使用的模板样式如下图所示:

二、人体关键点检测算法

2.1 关键点序号

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

python 复制代码
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文件。(这里对该方法进行了封装,以便后续调用使用)

python 复制代码
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,具体内容还是在官网中都有。

python 复制代码
import streamlit as st
python 复制代码
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三通道颠倒),可以尝试改变一下三色通道

python 复制代码
fixed = cv2.cvtColor(fixed,cv2.COLOR_BGR2RGB)

- Numpy与OpenCV之间的转换

Numpy转OpenCV图像

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

Numpy的优点:

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

四、效果展示

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

推理图像前后端版本:

人体关键点检测,视频推理版本

视频推理:

深度学习人体关键点检测(网页部署)

五、源码

复制代码
相关推荐
秃头佛爷24 分钟前
Python学习大纲总结及注意事项
开发语言·python·学习
浮生如梦_1 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover1 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
API快乐传递者2 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
阡之尘埃4 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
孙同学要努力6 小时前
全连接神经网络案例——手写数字识别
人工智能·深度学习·神经网络
Eric.Lee20216 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
其实吧37 小时前
基于Matlab的图像融合研究设计
人工智能·计算机视觉·matlab
丕羽7 小时前
【Pytorch】基本语法
人工智能·pytorch·python
bryant_meng8 小时前
【python】Distribution
开发语言·python·分布函数·常用分布