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
英文地址,請注明出處:http://en.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;讀取某…