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 相关文章推荐
js 页面刷新location.reload和location.replace的区别小结
Dec 24 Javascript
为JavaScript添加重载函数的辅助方法
Jul 04 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
Dec 27 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
Sep 13 Javascript
JS阻止冒泡事件以及默认事件发生的简单方法
Jan 17 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 Javascript
Bootstrap图片轮播组件使用实例解析
Jun 30 Javascript
vue router的基本使用和配置教程
Nov 05 Javascript
浅谈vue.use()方法从源码到使用
May 12 Javascript
Vue computed 计算属性代码实例
Apr 22 Javascript
Vue实现boradcast和dispatch的示例
Nov 13 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面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
详解Python中的静态方法与类成员方法
2017/02/28 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
医德医风自我评价2015
2015/03/03 职场文书
作息时间调整通知
2015/04/22 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python