基于 MediaPipe + Three.js 的實時姿態可視化前端

這是一套前端實時姿態捕獲與 3D 可視化的 DEMO,特點是啟動快、UI 現代、渲染穩定,同時對設備性能與網絡情況做了多處優化。

預覽地址

技術棧與核心依賴

  • 框架與工程:Vite + React + TypeScript
  • 實時姿態識別:MediaPipe Tasks Vision(PoseLandmarker)
  • 三維渲染:Three.js(OrbitControls 動態導入)
  • UI/樣式:現代玻璃擬態風格 + 自定義 Loading

功能總覽

  • 實時相機捕獲與姿態識別(身體骨架)
  • 三維骨架可視化(顏色分區、發光、光照增強)
  • 角度信息面板(可自動隱藏,僅在有數據時顯示)
  • 全局加載遮罩(等待 MediaPipe + Three.js 完成)
  • 手動啟動/停止相機控制(支持自動啟動模式)

關鍵模塊與結構

  • src/components/CameraCapture/CameraCapture.tsx
    • 負責相機權限、視頻流、MediaPipe 推理、數據結構轉換
    • 提供 onPoseDetection, onReady, onStarted, onStopped
    • 支持按鈕控制“啟動相機/停止相機”
  • src/components/PoseVisualizer/PoseVisualizer.tsx
    • Three.js 場景、光照與骨架渲染
    • 動態導入 OrbitControls,限制旋轉角度,不卡交互
    • angle-display 面板:僅在有數據時顯示,避免遮擋
  • src/App.tsx
    • 負責兩個模塊組合 + 全局加載遮罩

MediaPipe 接入要點

  • 預加載
    • 啟動時預創建 PoseLandmarker,后續組件共享,減少首次推理延遲
  • 推理節流
    • 使用 requestAnimationFrame,同時用 33ms 限制至 ~30FPS,減輕負載
  • 結果轉換
    • results.landmarks 轉為統一 PoseData,包含 landmarksconnections

示例(推理節流核心邏輯片段):

const now = performance.now();
const elapsed = now - lastDetectTimeRef.current;
if (elapsed >= 33) {lastDetectTimeRef.current = now;const poseResults = poseLandmarkerRef.current.detectForVideo(videoEl, now);// 轉換數據后 onPoseDetection(poseData)
}

Three.js 可視化策略

  • 場景與光照
    • AmbientLight + DirectionalLight + PointLight 增強立體感
    • 關閉陰影、降低 pixelRatio,保性能穩定
  • 骨架渲染
    • 關節點使用不同尺寸與顏色分區,提升可視效果
    • 線條色彩柔和(透明度 0.8),避免視覺噪聲
  • 交互限制
    • OrbitControls 限制旋轉范圍,支持小幅觀察,不允許拖拽離場景

UI/交互設計

  • 全局 Loading 遮罩
    • 等 MediaPipe + Three.js 均完成后自動消失
  • 手動相機控制
    • 頂部按鈕:啟動/停止
    • 卸載時清理流與動畫幀,避免內存泄漏
  • 角度信息條 angle-display
    • 僅在有角度數據時展示;否則隱藏,不遮擋畫面
    • 背景為淺色玻璃風格,支持移動端可讀性

性能優化清單

  • MediaPipe
    • 預加載模型,避免首幀等待
    • 推理節流至 ~30FPS
  • Three.js
    • 關閉陰影、降低抗鋸齒與像素密度上限
    • 節省幾何細分(SphereGeometry 16/16)
  • 網絡與構建
    • Vite 插件移除第三方 sourcemap 注釋,避免控制臺噪音
    • 手動切換為本地模型與本地 wasm(可選,弱網/內網環境)

常見問題與排查

  • 模型/wasm 拉取失敗
    • 檢查 CDN 可訪問性,或改為本地:將模型放到 public/models/pose_landmarker_lite.task
    • wasm 路徑:默認 CDN。如需離線,將 @mediapipe/tasks-vision/wasm 同名文件復制至 public/mediapipe/wasm/,并修改 FilesetResolver.forVisionTasks('/mediapipe/wasm')
  • 擴展攔截 fetch
    • 使用無痕窗口或禁用攔截擴展
    • DevTools Network 查看失敗 URL

體驗與易用性

  • 打開即用(默認自動啟動相機);也支持手動控制
  • 視覺現代化:玻璃面板、漸變、光效與動效
  • 移動端自適應:容器尺寸與文本字號優化

可繼續演進的方向

  • 角度計算實現(肩/肘/膝等)并在面板展示歷史曲線
  • 錄制模式:保存姿態數據或渲染視頻
  • 更多皮膚主題(暗/亮主題切換)
  • 多模型支持(如 Holistic / Hands / Face)可開關切換
  • 性能自適應(根據設備性能自動降低幾何細分與像素比)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94566.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94566.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94566.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【分布式技術】Kafka 數據積壓全面解析:原因、診斷與解決方案

Kafka 數據積壓全面解析:原因、診斷與解決方案Kafka 數據積壓深度解析與解決方案全景指南一、數據積壓核心原因矩陣二、生產者側問題深度解析1. 突發流量洪峰2. 大消息阻塞管道三、消費者側問題深度解析1. 消費能力不足2. 消費邏輯阻塞四、Broker集群問題深度解析1.…

企業云辦公安全指南:如何構建高效無憂的云辦公環境?

2025年,全球化協作與混合辦公已成為企業運營的常態。越來越多的企業將業務遷移至云端,云辦公在提升靈活性與效率的同時,也帶來了新的安全挑戰——數據泄露、內部威脅、網絡攻擊等風險無處不在,每一個環節都可能成為企業核心資產的…

Thingsboard 租戶管理員權限,增加租戶普通用戶權限

在 ThingsBoard CE(社區版)中,租戶管理員擁有對規則鏈、客戶、資產、設備、儀表板等資源的全面管理權限。如果你想為租戶創建一個普通用戶,并限制其不能操作規則鏈、高級功能、安全設置等,可以通過以下步驟實現&#x…

【筆記】大模型業務場景流程綜述

前言 大模型是指具有大規模參數和復雜計算結構的深度學習模型,這些模型通常由眾多神經網絡構建而成,擁有數十億甚至數千億個參數。本章將圍繞大模型概念及特點展開,介紹模型算法的分類、典型大模型及應用、大模型訓練流程和大模型業務流程。 目標 學完本課程后,您將能夠…

【兩數相互求余等于輸入兩數】2022-10-20

緣由關于#c#的問題:這個應該按照怎么個思路來寫:想老半天莫得思路想法-編程語言-CSDN問答 void 兩數相互求余等于輸入兩數() {//緣由https://ask.csdn.net/questions/7813625int a 0, b 0, x 0, y 0;cin >> a >> b;if (a > b)x a, y…

Linux系統調優

目錄 1.CPU 負載查看 1.1.使用 uptime 查看系統負載 1.2.使用 top 按 CPU 使用率排序 1.3.使用 ps 查看 CPU 使用最多的進程 1.4.使用 mpstat 查看 CPU 詳細狀態 1.5.查看 /proc/meminfo 獲取詳細內存信息 2查看內存運行狀態 2.1.使用 free 查看內存使用 1.CPU 負載查看…

AtCoder Beginner Contest 420

比賽鏈接如下: AtCoder Beginner Contest 420 - AtCoder A - What month is it? Problem Statement You are given integers X and Y between 1 and 12, inclusive. Find what month it will be Y months after month X (for example, month 1 is January). Cons…

Python算法-貪心算法(Greedy Algorithm)

Python算法:貪心算法(Greedy Algorithm)深度解析 引言 貪心算法(Greedy Algorithm)是計算機科學中最基礎的算法設計思想之一,其核心在于通過局部最優選擇逐步構建全局最優解。盡管它并不總能保證得到絕對最…

告別臃腫與廣告:精選9款安卓電視桌面Launcher,還你清爽高效體驗 (2025版)

[實測] 9款優秀安卓電視桌面Launcher推薦:告別原生臃腫,重塑清爽TV體驗 引言:當前智能電視桌面的痛點 目前市面上許多智能電視或電視盒子的原生桌面(Launcher)系統,為了商業推廣和內容聚合,往…

Docker Desktop緊急修復CVSS9.3高危容器逃逸漏洞

Docker公司修復了Windows和macOS版Docker Desktop應用程序中的一個高危漏洞(CVE-2025-9074,CVSS評分9.3),攻擊者可能利用該漏洞突破容器隔離限制。漏洞技術細節根據Docker官方文檔披露,惡意容器能夠訪問Docker引擎并在…

攜程旅游的 AI 網關落地實踐

原創 董藝荃 Higress 2025年08月21日 16:32 陜西本文整理自攜程旅游研發總監董藝荃在2025中國可信云大會上的分享,董藝荃 GitHub ID CH3CHO,同時也是 Higress 的 Maintainer。分享內容分為以下4部分。01 大規模應用 AI 技術過程中遇到了哪些問題02 網關…

CloudBase云開發MCP + CodeBuddy IDE:打造智能化全棧理財助手的完整實踐

CloudBase云開發MCP CodeBuddy IDE:打造智能化全棧理財助手的完整實踐 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵&#x…

ESP8266學習

一,連接Wifi1.Esp8266連接手機熱點ATATRST ATCWMODE1 ATCWJAP"ESP8266","123456789"手機查看連接信息2.Esp8266連接手機熱點進入透傳模式ATATRST ATCWMODE1 ATCWJAP"ESP8266","123456789"ATCIPMUX0 ATCIPSTART"TCP&qu…

Mac安裝mitmproxy及操作對監控的請求

在 macOS 上安裝和配置 mitmproxy 是一個相對簡單的過程,可以使用常見的包管理工具如 Homebrew 或直接通過 Python 的包管理工具 pip。以下是詳細的安裝步驟: 方法一:使用 Homebrew 安裝 Homebrew 是 macOS 上流行的包管理工具。它可以快速安…

c++ 數據結構-堆、優先隊列 小總結

之前學習了一些堆、優先隊列的知識點,在此做一個小總結。堆(Heap)堆(Heap)是一種特殊的完全二叉樹數據結構,具有以下重要特性:結構特性堆是一棵完全二叉樹,即除了最后一層外&#xf…

編寫Linux下usb設備驅動方法:probe函數中要進行的工作

一. 簡介 前一篇文章簡單學習了 Linux下usb設備驅動實現流程,文章如下: 編寫Linux下usb設備驅動方法:usb設備驅動實現流程-CSDN博客 本文來學習一下 usb設備驅動的 probe函數要完成的任務。 當usb主控制器檢測到設備與 驅動相匹配時&…

動態規劃:為什么暴力算法會有重復子問題

第一步:先明確 “子問題” 和 “重復子問題” 的定義 在算法中,“子問題” 不是泛指 “小一點的問題”,而是具有明確 “狀態參數” 的、可獨立求解的問題單元。 狀態參數:描述子問題核心信息的變量(比如 01 背包中的 “…

【網絡】添加路由時,via和dev參數作用、直連路由

文章目錄概述1、帶via1.1 添加路由前的初始狀態1.2. 執行添加路由的命令1.3. 添加路由后的狀態2、不帶 via (使用設備接口),直連3、帶via還是不帶via ?4、dev xx的作用4.1 命令中帶via時,建議不帶 dev eth0 (讓系統自動判斷)4.2 命令中帶via&#xff0c…

云原生---企業級Kubernetes

一、Kubernetes介紹 1.簡介 kubernetes的本質是一組服務器集群,它可以在集群的每個節點上運行特定的程序,來對節點中的容器進行管理。目的是實現資源管理的自動化,主要提供了如下的主要功能: 自我修復:一旦某一個容器…

無人機三維路徑規劃首選算法:RRT_

無人機三維路徑規劃首選算法:RRT* 要判斷哪種算法更適合無人機三維路徑規劃,需先明確無人機三維路徑規劃的核心需求,再結合各算法的底層邏輯與特性進行匹配。以下先梳理核心需求,再逐一分析算法特性,最終通過對比得出結…