Handtrack.js库实现实时监测手部运动(推荐)


Posted in Javascript onFebruary 08, 2021

【导语】: Handtrack.js 是一个可以直接在浏览器中实现实时手部动作跟踪和检测的原型库,它是经过 Tensorflow 训练产生的开源模型,不需要用户自己训练。有了它,你只需要通过几行代码就能检测图片中手部的动作。

GitHub 主页

https://github.com/victordibia/handtrack.js

Handtrack.js库实现实时监测手部运动(推荐)

1、简介

Handtrack.js ,是基于 TensorFlow 对象检测 API 训练模型搭建的,能够实现通过摄像头实时监测手部运动,它的特点主要包含:

handtrack.js

Handtrack.js库实现实时监测手部运动(推荐)

2、应用场景

如果你对基于手势的交互式体验感兴趣, Handtrack.js 会很有用。用户不需要使用任何额外的传感器或硬件,就可以立即获得基于手势的交互体验。

Handtrack.js库实现实时监测手部运动(推荐)

一些相关的应用场景:

  • 将鼠标移动映射到手部移动,达到控制的目的;
  • 当手和其他物体重叠时可以表示某些有意义的交互信号(例如触碰物体或选择物体);
  • 人的手部运动可以作为某些活动识别的代理的场景(例如,自动跟踪视频或图像中下棋者的动作), 或者简单地计算图像或视频帧中有多少个人;
  • 创建演示,任何人都可以通过最少的设置轻松运行或体验这些东西。

Handtrack.js库实现实时监测手部运动(推荐)

Handtrack.js库实现实时监测手部运动(推荐)

3、使用方法

你可以直接在 script 标签中包含这个库的 URL 地址,或者使用构建工具从 npm 中导入它。

3.1 使用script标签

Handtrack.js 的最小化 js 文件目前托管在 jsdelivr 上,jsdelivr 是一个免费的开源 CDN,让你可以在 Web 应用程序中包含任何的 npm包。



Handtrack.js库实现实时监测手部运动(推荐) 

将上面的 script 标签添加到 html 页面后,就可以使用 handTrack 变量引用 handtrack.js ,如下所示:

上面的代码段将打印出通过 img 标签传入的图像的预测边框,如果换了视频或通过摄像头提交图像帧,那么就可以“跟踪”在每一帧中出现的手。

3.2 使用 NPM

你可以使用以下命令将 handtrack.js 作为 npm 包来安装:

npm install --save handtrackjs

然后,你就可以在web应用程序中导入和使用它的示例:

import * as handTrack from 'handtrackjs';

const img = document.getElementById('img');

// Load the model.
handTrack.load().then(model => {
 // detect objects in the image.
 console.log("model loaded")
 model.detect(img).then(predictions => {
 console.log('Predictions: ', predictions); 
 });
});

3.3 Handtrack.js 的 API

Handtrack.js 提供了2个主要的方法, load() 方法和 detect() 方法,分别用于加载手部检测模型和获取预测结果。

load() 方法:接收一个可选的模型参数,返回一个模型对象,通过该可选模型参数来允许用户控制模型的性能:

const modelParams = {
 flipHorizontal: true, // flip e.g for video 
 imageScaleFactor: 0.7, // reduce input image size for gains in speed.
 maxNumBoxes: 20,  // maximum number of boxes to detect
 iouThreshold: 0.5,  // ioU threshold for non-max suppression
 scoreThreshold: 0.79, // confidence threshold for predictions.
}

handTrack.load(modelParams).then(model => {

});

detect() 方法 :接收一个输入源参数(可以是img、video或canvas对象),返回图像中手部位置的边框预测结果:

一个带有类名和置信度的边框数组。

model.detect(img).then(predictions => { 
  
});

预测结果格式如下:

[{
 bbox: [x, y, width, height],
 class: "hand",
 score: 0.8380282521247864
}, {
 bbox: [x, y, width, height],
 class: "hand",
 score: 0.74644153267145157
}]

Handtrack.js 还提供了其他的方法:

  •  model.getFPS() : 获取FPS,即每秒检测次数;
  • model.renderPredictions(predictions, canvas, context, mediasource) : 在指定的画布上绘制边框(和源图像)。其中 predictionsdetect() 方法的结果数组。 canvas 是对渲染 predictionshtml canvas 对象的引用, context 是canvas 2D上下文对象, mediasource 是对 predictions 中使用的输入帧(img、视频、canvas等)的引用(首先渲染它,并在其上绘制边框)。
  • model.getModelParameters() : 返回模型参数;
  • model.setModelParameters(modelParams) : 更新模型参数;
  • dispose() : 删除模型实例;
  • startVideo(video) : 在给定的视频元素上启动摄像头视频流。返回一个 promise ,可用于验证用户是否提供了视频权限的;
  • stopVideo(video) : 停止视频流;

4、下一步 计算消耗大,这主要是因为在预测边界框时需要进行神经网络操作,这是后续需要改进和优化的一个点; 跨帧跟踪ID:实现在每个对象进入一帧时为其分配 ID 并持续跟踪; 添加一些离散的姿势:例如,不只是手,而是检测张开的手、拳)。

5、参考资料

Handtrack.js库的源代码: https://github.com/victordibia/handtrack.js

线上Demo: https://victordibia.github.io/handtrack.js

Egohands数据集: http://vision.soic.indiana.edu/projects/egohands

到此这篇关于Handtrack.js库实现实时监测手部运动(推荐)的文章就介绍到这了,更多相关监测手部运动的 JS 库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
语义化 H1 标签
Jan 14 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
Apr 17 Javascript
js修改地址栏URL参数解决url参数问题
Dec 15 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
Jan 17 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
Mar 16 Javascript
js实现带按钮的上下滚动效果
May 12 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
Jul 24 Javascript
vue element-ui table表格滚动加载方法
Mar 02 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
Apr 26 Javascript
js 执行上下文和作用域的相关总结
Feb 08 #Javascript
微信小程序tab左右滑动切换功能的实现代码
Feb 08 #Javascript
用Javascript实现发送短信验证码间隔功能
Feb 08 #Javascript
原生js 实现表单验证功能
Feb 08 #Javascript
js面向对象封装级联下拉菜单列表的实现步骤
Feb 08 #Javascript
JavaScript实现点击出现子菜单效果
Feb 08 #Javascript
深入理解javascript中的this
Feb 08 #Javascript
You might like
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
用jscript实现新建word文档
2007/06/15 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
python写的ARP攻击代码实例
2014/06/04 Python
Python实现的爬虫功能代码
2017/06/24 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
静态变量和实例变量的区别
2015/07/07 面试题
学校七一活动方案
2014/01/19 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
公益活动邀请函
2014/02/05 职场文书
董事长助理工作职责范本
2014/07/01 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
浅谈哪个Python库才最适合做数据可视化
2021/06/28 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL