Handpose是手掌检测器和手部手指追踪器

2021-01-03 19:16:20

注意:此模型最多只能检测输入中的一只手-将来的版本中将提供多手检测。

MediaPipe Handpose是一个轻量级的ML管道,由两个模型组成:手掌检测器和手部骨骼手指跟踪模型。它预测每个检测到的手有21个3D手关键点。有关更多详细信息,请阅读我们的Google AI博客文章。

给定输入,模型将预测它是否包含手。如果是这样,则模型将返回围绕手的边界框的坐标,以及手中的21个关键点,概述每个手指关节和手掌的位置。

可以在以下位置找到有关该模型及其在不同数据集上的性能特征的更多背景信息:https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view

观看我们的演示,该演示使用该模型检测实时视频流中的手形标志。

该模型还可以作为MediaPipe的一部分使用,MediaPipe是用于构建多模式应用ML管道的框架。

MediaPipe Handpose的重量约为12MB,非常适合在各种设备上进行实时推理(2018 MacBook Pro上为40 FPS,iPhone11上为35 FPS,Pixel3上为6 FPS)。

<!-要求handpose的同级依赖。 -> <脚本src =" https://unpkg.com/@tensorflow/[email protected]/dist/tf-core.js" > < /脚本> <脚本src =" https://unpkg.com/@tensorflow/[email protected]/dist/tf-converter.js" > < /脚本> <!-如果不使用tfs联合捆绑包,则必须明确要求TF.js后端。 -> <脚本src =" https://unpkg.com/@tensorflow/[email protected]/dist/tf-backend-webgl.js" > < /脚本> <!-或者,您也可以使用WASM后端:< script src =" https://unpkg.com/@tensorflow/[email protected]/dist/tf-backend-wasm .js"< / script> -> <脚本src =" https://unpkg.com/@tensorflow-models/[email protected]/dist/handpose.js" > < /脚本>

const handpose = require(' @ tensorflow-models / handpose');要求(' @ tensorflow / tfjs-backend-webgl'); // handpose本身不需要后端,因此您必须显式安装一个后端。 //如果使用的是WASM后端:// require(' @ tensorflow / tfjs-backend-wasm');

异步函数main(){//加载MediaPipe手势模型。 const model =等待姿势。负载(); //传入视频流(或图像,画布或3D张量)以从MediaPipe图形获得//手预测。常量预测=等待模型。 EstimateHands(document。querySelector(&#34; video&#34;)); if(预测。长度&gt; 0){/ *`predictions`是描述每个检测到的手的对象的数组,例如:[{handInViewConfidence:1,//出现手的概率。 boundingBox:{//手的包围框。 topLeft:[162.91,-17.42],bottomRight:[548.56,368.23],},界标:[//每个手界标的3D坐标。 [472.52,298.59,0.00],[412.80,315.64,-6.18],...],注释:{//“地标”坐标的语义分组。 thumb:[[412.80,315.64,-6.18] [350.02,298.38,-7.14],...],...}}] * / for(令i = 0; i <预测。长度; i ++ ){常量要点=预测[i]。地标; //记录手关键点。 for(令i = 0; i <关键点。长度; i ++){const [x,y,z] =关键点[i];安慰 。 log(`Keypoint $ {i}:[$ {x},$ {y},$ {z}]`); }}}} main();

maxContinuousChecks-在不运行边界框检测器的情况下可以移动多少帧。默认为无穷大。如果想要安全网,请设置为较低的值,以防网格检测器始终产生错误的预测。

iouThreshold-一个浮点数,代表用于确定非最大抑制中框是否重叠太多的阈值。必须介于[0,1]之间。默认值为0.3。

scoreThreshold-一个阈值,用于根据非最大抑制中的得分来决定何时删除框。默认值为0.75。

输入-要分类的图像。可以是张量,DOM元素图像,视频或画布。

flipHorizontal-是否水平翻转/镜像面部关键点。 对于默认情况下翻转的视频(例如,网络摄像头)应为true。