难点~~~~

在一个帧中有多个人比较难处理。。。

数据集制作,简化一下放过自己:找只有一个人的视频!

模型训练:只有一组骨架(也就是17个关键点的坐标)的时间序列(序列长度的话   暂定100帧一个label    后面再调整吧)   +label (判断是否跌倒)

预测:这个不能简化了  预测肯定要考虑多个人的情况  同时开多个lstm模型进行预测,当画面中有人时,每个人占用这个lstm模型  ,人物消失或不再需要跟踪时,将该 LSTM 模型释放并标记为可用 ,我提前准备100个lstm模型。。。        但是我感觉100个会跑不动,CPU GPU会shao啊。。。。。。。。。

先贴一个数据集制作的代码(有点小bug还没改。。。先存一下。。)

import cv2
from ultralytics import YOLO
import os

# 加载模型
model = YOLO(model=r"D:\desktop\fall detection\ultralytics-main\mymodel\yolov8n-pose.pt")

# 视频文件路径
video_path = r"D:\desktop\fall detection\SVID_20230912_194419_1.mp4"

# 打开视频文件
cap = cv2.VideoCapture(video_path)

# 获取视频帧的宽度和高度
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))

# 创建显示窗口
cv2.namedWindow("YOLOV8", cv2.WINDOW_NORMAL)

# 创建保存数据集的文件夹
output_folder = "lstm_dataset"
os.makedirs(output_folder, exist_ok=True)

cnt_zhen = 1  # 帧计数
frame_buffer = []  # 存储每100帧的关键点信息

while cap.isOpened():
    # 获取帧
    res, frame = cap.read()
    # 如果读取成功
    if res:
        # 正向推理
        results = model(frame)

        for result in results:
            keypoints = result.keypoints
            frame_keypoints = []  # 存储当前帧的关键点信息

            for i, keypoint in enumerate(keypoints):
                num_keypoints = keypoint.xyn.numel() / 2  # x y 坐标分开了
                coordinates = keypoint.xyn[0].tolist()  # 将关键点坐标转换为列表
                print(f"当前帧第 {i + 1} 组关键点,共有 {num_keypoints} 个关键点坐标:", coordinates)
                frame_keypoints.append(coordinates)

            frame_buffer.append(frame_keypoints)

            # 在每100帧后等待用户输入标签
            if cnt_zhen % 100 == 0:
                label = input("请输入标签 (0 或 1): ")

                # 创建数据文件
                file_name = os.path.join(output_folder, f"data_{cnt_zhen // 100}.txt")
                with open(file_name, "w") as output_file:
                    # 写入用户输入的标签
                    output_file.write(label + "\n")

                    # 写入100帧的关键点信息
                    for keypoints_data in frame_buffer:
                        for keypoint in keypoints_data:
                            output_file.write(f"{keypoint[0]}, {keypoint[1]}\n")

                # 清空关键点缓冲区
                frame_buffer = []

            # 绘制结果
            annotated_frame = results[0].plot()

            # 调整帧的大小以适应窗口
            annotated_frame = cv2.resize(annotated_frame, (frame_width, frame_height))

            # 显示图像
            cv2.imshow("YOLOV8", annotated_frame)

            # 按ESC退出
            if cv2.waitKey(1) == 27:
                break

        cnt_zhen += 1
    else:
        break

# 释放视频文件
cap.release()
cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值