如何获取MediaPipe中跨帧跟踪手部的持久ID?
MediaPipe Hand Landmarker 跨帧多手跟踪方案
首先明确:
multi_hand_landmarks的顺序完全不固定,帧与帧之间会因手部移动、新增/消失重新排序,依赖顺序匹配跨帧手部绝对不可靠。MediaPipe Hand Landmarker本身提供了跨帧持久的手部跟踪ID,只是这个ID不在
multi_hand_landmarks列表里,而是在每个手部的独立数据结构中:- 以Python API为例,
HandLandmarkerResult中的hands列表(每个元素对应一只手)包含tracking_id字段,这个ID会在手部持续被跟踪的帧中保持不变,手部消失后再出现则会分配新ID。
- 以Python API为例,
示例代码(Python):
def on_result(result, output_image, timestamp_ms): # 遍历每只手,通过tracking_id关联跨帧数据 for hand in result.hands: hand_id = hand.tracking_id landmarks = hand.landmarks # 这里用hand_id匹配之前帧存储的手部状态 print(f"跟踪ID {hand_id} 的手部关键点: {landmarks}")如果你使用的是其他语言(如Java、C++),逻辑一致:找到每个手部对应的结构体/对象,从中提取
tracking_id字段即可,无需手动实现跟踪逻辑。特殊情况处理:如果手部短暂移出画面后重新进入,MediaPipe可能无法恢复之前的跟踪ID(会分配新ID),这是内置跟踪的正常限制,若需更持久的关联,可结合手动特征匹配(如手部关键点的特征向量)作为补充。
内容的提问来源于stack exchange,提问作者Fabio M.
相关产品推荐
相关产品推荐

