st-Gcn训练跳绳识别模型一:数据标注工具和标注流程

目录

工具展示和使用说明

工具标注后文件展示说明

json转换成单个npy文件

数据获取补充


工具展示和使用说明

文件名labelV.py集于PySide6实现:

 

通过选择视频来选择你要标注的视频,然后选择保存路径:

然后视频两个类别。当你看见视频中的人跳绳开始时,按键盘1或者点击来标记开始帧号,按键盘左右键调转上下帧,按e结束标记(这里我每一百帧标记一次)。

工具标注后文件展示说明

{"segments": [[36,140,1],[141,243,1],[255,360,1],[370,476,1],[477,590,1],[591,693,1],[706,776,1]]
}

保存后会得到这样一个json文件,这里每一个列表中的内容分别代表开始事件帧数,结束事件帧数,事件类别。

json转换成单个npy文件

代码名jsonNpy.py,我这里用的时yolov8-pose模型,

def process_segment(video_path, start, end, label, output_name):cap = cv2.VideoCapture(video_path)T = end - start + 1skeleton = np.zeros((2, T, 17, 1), dtype=np.float32)valid = Truefor i, frame_idx in enumerate(range(start, end + 1)):cap.set(cv2.CAP_PROP_POS_FRAMES, frame_idx)ret, frame = cap.read()if not ret:print(f"[!] 无法读取帧 {frame_idx} in {video_path}")valid = Falsebreakkeypoints = extract_keypoints(frame)if keypoints is None or keypoints.shape != (17, 2):print(f"[!] 关键点提取失败 at frame {frame_idx}")valid = Falsebreakfor v in range(17):skeleton[0, i, v, 0] = keypoints[v][0]skeleton[1, i, v, 0] = keypoints[v][1]cap.release()if valid:out_path = os.path.join(OUTPUT_DIR, output_name)np.save(out_path, skeleton)label_list.append({"sample_name": output_name,"label": label})else:print(f"[✘] 放弃片段: {start}-{end} in {video_path}")

通过opencv读取视频帧再根据标注文件json中的信息完成保存成npy文件,数组形状[2, T, 17, 1],2代表存储的关键点的x和y坐标,T代表帧数,这里我选择的是100,17代表关键点数量是17(这里根据你选择的模型来,比如openpose的话这里就是18)。1代表一个人。同时保存一个总的json文件,来记录每一个npy的类别:

{"sample_name": "nojump_output_0189.npy","label": 0},{"sample_name": "nojump_output_0190.npy","label": 0},{"sample_name": "nojump_output_0191.npy","label": 0},

数据获取补充

鉴于自己标准视频实在是费时费力,本文提供了一个脚本autoLabel.py,

def main():# 加载现有 label.json(如果存在)label_list = []if os.path.exists(LABEL_JSON):with open(LABEL_JSON, "r") as f:label_list = json.load(f)# 处理 label1 文件夹(跳绳,类别 1)for video_file in os.listdir(LABEL1_DIR):if video_file.endswith((".mp4", ".avi", ".mov")):video_path = os.path.join(LABEL1_DIR, video_file)sample_prefix = f"jump_{Path(video_file).stem}"new_samples = extract_skeleton_from_video(video_path, label=1, output_dir=OUTPUT_DIR,sample_prefix=sample_prefix)label_list.extend(new_samples)# 处理 label0 文件夹(非跳绳,类别 0)for video_file in os.listdir(LABEL0_DIR):if video_file.endswith((".mp4", ".avi", ".mov")):video_path = os.path.join(LABEL0_DIR, video_file)sample_prefix = f"nojump_{Path(video_file).stem}"new_samples = extract_skeleton_from_video(video_path, label=0, output_dir=OUTPUT_DIR,sample_prefix=sample_prefix)label_list.extend(new_samples)# 保存 label.jsonwith open(LABEL_JSON, "w") as f:json.dump(label_list, f, indent=4)print(f"[✔] 骨架数据提取完成,保存到 {OUTPUT_DIR},标签更新到 {LABEL_JSON}")print(f"总样本数: {len(label_list)}")

你可以将跳绳视频和非跳绳视频分别放到两个文件夹中,配置好相关信息,然后会自动帮你生成npy文件。

后续更新数据汇总和预处理

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

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

相关文章

springboot跨域问题 和 401

springboot跨域问题 和 401 1.跨域import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotatio…

构建直播平台大体的流程

✅ 直播流程完整链路(基于 SRS OBS 前后端)🧍‍♂️ 用户操作流程:✅ 用户登录系统(前端)系统中校验用户身份(JWT 等)后端可能校验权限,比如“是否有开播资格”✅ 用户…

KOSMOS-2: 将多模态大型语言模型与世界对接

温馨提示: 本篇文章已同步至"AI专题精讲" KOSMOS-2: 将多模态大型语言模型与世界对接 摘要 我们介绍了 KOSMOS-2,一种多模态大型语言模型(MLLM),赋予了模型感知物体描述(例如,边界框…

协作机器人操作与编程-PE系统示教编程和脚本讲解(直播回放)

协作机器人操作与编程-PE系统示教编程和脚本讲解本次讲解主要围绕协作机器人PE系统的操作与编程展开,内容涵盖软件安装、虚拟机配置、手动操作、在线编程、变量设置、网络通信及标定方法等方面。以下是主要内容要点提炼: 软件安装与虚拟机配置 需从官网下…

【前后端】Node.js 模块大全

用到的全部总结在这里,不定期更新 链接 node一本通 包括: express path fs/ process/ os/ http/ mysql/mongoose/ express-jwt/jsonwebtoken/ dotenv/ multer/ swagger/ cors/ nodemon (docker篇有)常用模块 内置 fs 文件系统操作(读写、重命…

双8无碳小车“cad【17张】三维图+设计说名书

基于MATLAB的双八无碳小车轨迹仿真及其结构设计 摘 要 本文设计的基于MATLAB的无碳小车来自于全国大学生工程训练能力竞赛,依据绿色环保,设计一种通过重力势能转换成动能来驱动小车行走的装置。通过分析任务要求,本文完成了小车的三维结构设计…

视觉大模型离线部署全流程优化:从微调技术到工程实践

视觉大模型离线部署全流程优化:从微调技术到工程实践 一、视觉大模型离线部署概述 1.1 视觉大模型的应用场景与挑战 视觉大模型在物体检测、图像生成、图像描述等领域展现出强大能力,已成为人工智能领域的研究热点和产业应用焦点(5)。随着技术的发…

Vue中组件的生命周期

组件的生命周期生命周期、生命周期函数、生命周期钩子vue2的生命周期创建(创建前的生命周期函数 beforeCreate ,创建完毕created)挂载(挂载前beforeMount,挂载完毕mounted)//把组件放在页面中更新&#xff…

securecrt连接服务器报错 Key exchange failed 怎么办

新买了一台阿里云机,用securecrt去连接,如下报错这个错误表明你的 SSH 客户端与服务器之间无法就密钥交换方法和主机密钥算法达成一致,导致连接失败。这通常是由于客户端和服务器支持的加密算法集不匹配造成的。 解决方式 编辑服务器的/etc/s…

用协议分层模型实战:从物理层到应用层的STM32协议栈开发

目录 1. 揭开协议栈的神秘面纱:从STM32到分层思维 STM32的硬件优势 本章实战:点亮物理层的第一步 2. 数据链路层:让STM32学会“打包”和“拆包” 以太网帧的那些事儿 实战:解析以太网帧 3. 网络层:让STM32学会“找路” LwIP的快速上手 实战:实现一个简单的Ping …

微服务基础环境搭建-centos7

文章目录1、安装docker1.1、安装步骤1.2、docker常用命令2、安装Nginx3、Docker安装Mysql4、Docker安装Redis5、安装Nacos5.1、Nacos的作用5.2、单体服务安装6、安装RocketMQ服务6.1 MQ的作用6.2 RocketMQ的基础服务架构6.2、安装RocketMQ服务6.3、安装dashboard面板服务6.4、R…

Netty知识点

一、Netty的零拷贝机制 零拷贝的基本理念:避免在用户态和内核态之间拷贝数据,从而降低 CPU 占用和内存带宽的消耗除了系统层面的零拷贝。 1、FileRegion 接口 FileRegion 是 Netty 提供的用于文件传输的接口,它通过调用操作系统的 sendfile 函…

Kafka的基本使用

目录 认识Kafka 消息队列 消息队列的核心概念 核心价值与解决的问题 Kafka ZooKeeper Kafka的基本使用 环境安装 启动zookeeper 启动Kafka 消息主题 创建主题 查询主题 修改主题 发送数据 命令行操作 JavaAPI操作 消费数据 命令行操作 JavaAPI操作 认识Kafka…

Flink2.0学习笔记:Table API SQL

stevensu1/EC0720 表 API 和 SQL# 表 API 和 SQL——用于统一流和批处理 加工。表 API 是适用于 Java、Scala 和 Python 的语言集成查询 API,它 允许组合来自关系运算符的查询,例如 selection、filter 和 join in 一种非常直观的方式。Flink 的 SQL 支…

【 SpringAI核心特性 | Prompt工程 】

1. Prompt 工程 基本概念:Prompt ؜工程又叫提示‏词工程,简单来说,就是输入‌给 AI 的指令。 比如下面‏这段内容,就是提示词: 请问桂林电子科技大学是一个怎么样的学校?1.1 Prompt分类 在 AI ؜对话中…

windows wsl2-06-docker hello world

hello-world 例子 就像其他任何一门语言一样,我们来体验 docker 的 hello world $ docker run hello-world但是报错 :~$ docker run hello-world Unable to find image hello-world:latest locally docker: Error response from daemon: Get "https://registry…

Python知识点4-嵌套循环break和continue使用死循环

一、循环【重点掌握】 1.嵌套循环类似于嵌套if语句 语法&#xff1a; while 表达式1&#xff1a;while 表达式2&#xff1a;语句# 1. # 循环5次&#xff0c;打印0~4 m 0 while m < 5:print(m)m 1 # 循环3次&#xff0c;打印0~2 n 0 while n < 3:print(n)n 1print(&qu…

将HTML+JS+CSS数独游戏包装为安卓App

HTMLJSCSS制作一个数独游戏-CSDN博客 中开发了一个数独游戏&#xff0c;这个数独游戏提供了一次性回退到指定步骤的辅助功能&#xff0c;在解决复杂数独问题时十分有帮助&#xff0c;可作为玩数独游戏的辅助工具&#xff0c;因此&#xff0c;考虑将它改装成安卓App安装在手机上…

编程语言Java入门——核心技术篇(一)封装、继承和多态

同专栏基础知识篇写在这里&#xff0c;有兴趣的可以去看看&#xff1a; 编程语言Java入门——基础知识篇&#xff08;一&#xff09;-CSDN博客 编程语言Java入门——基础知识篇&#xff08;二&#xff09;-CSDN博客 编程语言Java入门——基础知识篇&#xff08;三&#xff0…

【39】MFC入门到精通——C++ /MFC操作文件行(读取,删除,修改指定行)

文章目录1 通过关键词&#xff0c;读取某一行 &#xff08;3种方法&#xff09;2 删除 指定行3 修改 指定行1 通过关键词&#xff0c;读取某一行 &#xff08;3种方法&#xff09; 通过定位关键词&#xff0c;读取某一行信息,返回CString //通过定位关键词&#xff0c;读取某…