抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

谷歌 TensorFlow 团队和 MediaPipe 联合推出两款软件包,可对面部和手部特征进行跟踪

2020 年 3 月 31 日

谷歌TensorFlow团队和MediaPipe联合推出两款软件包,可对面部和手部特征进行跟踪

TensorFlow 最近在博客发文表示发布了两款新的软件包:facemesh 和 handpose,分别用于跟踪面部和手部的关键特征点。这两个软件包是由 MediaPipe 和谷歌研究部门的 TensorFlow.js 团队合作完成的。在不久的将来,研发团队将增加对多手跟踪的支持。以下 TensorFlow 博客完整内容。


我们也一直致力于加速我们的模型,特别是在移动设备上的那些模型。在过去几个月的开发中,我们看到 facemesh 和 handpose 的性能有了显著的提高,我们相信这一趋势将继续下去。



Facemesh 软件包



Handpose 软件包


在浏览器中尝试在线演示程序

Facemesh 软件包可以在图像中找出面部边界和特征点,而 handpose 可以找到手部边界和特征点。这些软件包体积小、速度快,并且完全在浏览器中运行,因此,数据不会离开用户的设备,从而保护了用户的隐私。你现在就可以通过下面的链接试一下:



这些包也可以作为 MediaPipe 的一部分使用,这是一个用于构建多模态感知管道的库:



我们希望实时的面部和手部跟踪能够带来新的交互模式。例如,人脸的几何位置是对表情进行分类的基础,手势跟踪是手势识别的第一步。我们很高兴可以看看具有这些功能的应用程序将如何在 Web 上拓展交互性和可访问性。


Facemesh


Facemesh 包从一个图像或视频流中推断出近似的 3D 面部表面几何形状,只需要一个摄像头输入,而不需要深度传感器。这种几何结构定位诸如眼睛、鼻子和嘴唇这样的脸部特征,包括细节,如嘴唇轮廓和面部轮廓。这些信息可用于下游任务,如表情分类(但不用于识别)。请参考我们的模型卡,了解模型在不同数据集上的执行情况。这个包也可以通过MediaPipe获得。


性能特征

Facemesh 是一个轻量级包,只有大约 3MB 的权重值,因此非常适合在各种移动设备上进行实时推断。在测试时,请注意,TensorFlow.js 也提供了几个不同的后端可供选择,包括 WebGL 和带有 XNNPACK 的 WebAssembly(WASM),后者用于使用低端 GPU 的设备。下表显示了这个包在几种不同的设备和 TensorFlow.js 后端上的执行情况:



安装

安装 facemesh 软件包有以下两种方式:


1.通过 NPM:


import * as facemesh from '@tensorflow-models/facemesh;
复制代码


2.通过 script 标签:


<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-core"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-converter"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/facemesh"></script>
复制代码


使用

包安装完成以后,你只需要加载模型权重值,并传入一个图像来开始检测面部特征点:


// 加载MediaPipe facemesh模型资产。const model = await facemesh.load(); // 向模型传入视频流,从MediaPipe图中获取检测到的一组人脸。const video = document.querySelector("video");const faces = await model.estimateFaces(video); // 每个face对象包含一个`scaledMesh`属性,// 这是一个包含468个特征点的数组。faces.forEach(face => console.log(face.scaledMesh));
复制代码


estimateFaces 的输入可以是视频、静态图像,甚至是在 node.js 管道中使用的 ImageData 接口。然后,facemesh 返回输入中人脸的预测对象数组,其中包括关于每个人脸的信息(例如,一个置信度评分,以及人脸内 468 个特征点的位置)。下面是一个预测对象样本:


{    faceInViewConfidence: 1,    boundingBox: {        topLeft: [232.28, 145.26], // [x, y]        bottomRight: [449.75, 308.36],    },    mesh: [        [92.07, 119.49, -17.54], // [x, y, z]        [91.97, 102.52, -30.54],        ...    ],    scaledMesh: [        [322.32, 297.58, -17.54],        [322.18, 263.95, -30.54]    ],    annotations: {        silhouette: [            [326.19, 124.72, -3.82],            [351.06, 126.30, -3.00],            ...        ],        ...    }}
复制代码


Handpose

Handpose 包检测输入图像或视频流中的手,并返回 21 个三维特征点来定位每只手的特征。这些特征点包括每个手指关节和手掌的位置。2019 年 8 月,我们通过 MediaPipe 发布了该模型——你可以在当时发布的博文中找到更多关于模型架构的信息。请参阅我们的模型卡,了解关于如何在不同的数据集上进行手部姿势识别的详细信息。这个包也可以通过 MediaPipe 获得。


性能特征

Handpose 是一个相对轻量级的包,包含大约 12MB 的权重值,适合于实时推断。下表显示了该包在不同设备上的执行情况:



安装

安装 handpose 软件包有以下两种方式:


1.通过 NPM:


import * as handtrack from '@tensorflow-models/handpose;
复制代码


2.通过 script 标签:


<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-core"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-converter"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/handpose"></script>
复制代码


使用

包安装完成以后,你只需要加载模型权重值,并传入一副图像开始跟踪手部特征点:


// 加载MediaPipe handpose模型资产。const model = await handpose.load(); // 向模型传入视频流,从MediaPipe图中获取预测。const video = document.querySelector("video");const hands = await model.estimateHands(video); // 每个face对象包含一个`landmarks`属性,// 这是一个包含21个3-D特征点的数组。hands.forEach(hand => console.log(hand.landmarks));
复制代码


与 facemesh 一样,estimateHands 的输入可以是视频、静态图像或 ImageData 接口。然后,该包返回一个对象数组,该数组描述输入中的手部信息。下面是一个预测对象样本:


{    handInViewConfidence: 1,    boundingBox: {        topLeft: [162.91, -17.42], // [x, y]        bottomRight: [548.56, 368.23],    },    landmarks: [        [472.52, 298.59, 0.00], // [x, y, z]        [412.80, 315.64, -6.18],        ...    ],    annotations: {        indexFinger: [            [412.80, 315.64, -6.18],            [350.02, 298.38, -7.14],            ...        ],        ...    }}
复制代码


未来展望

MediaPipe 团队正在开发更精简的模型架构,而 TensorFlow.js 团队一直在研究加速推理的方法,比如操作符融合。更快的推理将反过来解锁更大、更精确的模型,以便在实时管道中使用。


原文链接:


https://blog.tensorflow.org/2020/03/face-and-hand-tracking-in-browser-with-mediapipe-and-tensorflowjs.html


2020 年 3 月 31 日 17:422490

评论

发布
暂无评论
发现更多内容

代码 or 指令,浅析ARM架构下的函数的调用过程

华为云开发者社区

函数 任务栈 arm架构

高阶段位机房管理:3D集装箱数据中心,触发科技“火苗”的燃烧

一只数据鲸鱼

数据可视化 3D可视化 机房管理 数据中心可视化 集装箱式数据中心

[高并发]高并发分布式锁架构大解密,不是所有的锁都是分布式锁!!

for

SpringSecurity基础——权限管理

程序员小毕

Java 源码 程序员 安全 springsecurity

【Android Tips】小厂的扫码还能怎么做?

李小四

机器学习 二维码 扫码 微信扫码

Elasticsearch 批量查询 mget

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

【CSS】不规则阴影

学习委员

css3 html/css CSS小技巧 28天写作 纯CSS

智慧平安小区APP,社区管理一体化平台

135深圳3055源中瑞8032

AI、IoT、区块链、自主系统、下一代计算五大技术引领未来供应链发展

京东科技开发者

区块链 AI IoT 供应链

《论雨伞道德》- 不要和自己的良心捉迷藏

石云升

读书笔记 28天写作 雨伞道德

即构SDK新增焦点语音功能,可实现特定用户语音的聚焦

ZEGO即构

MySQL 8.0.23中复制架构从节点自动故障转移

程序员小毕

Java MySQL 架构 高可用 MySQL优化

阿里巴巴正式推出2021年金三银四1000道Java工程师面试题手册(含答案)

Java架构追梦

Java 阿里巴巴 架构师 金三银四 1000道面试题

Volcano 监控设计解读,一看就懂

华为云开发者社区

Kubernetes 云原生 监控 Volcano 计算

漫谈HTTP协议

架构精进之路

HTTP 七日更 28天写作

数据中台:建立在数据网络效应之上的赛道

奇点云

大数据 数据中台 云原生 数据

甲方日常 91

句子

工作 随笔杂谈 日常

HTML5中的拖放功能

魔王哪吒

html html5 程序员 面试 前端

区块链电子票据应用,区块链数字票据平台

135深圳3055源中瑞8032

美国大选期间美股迎来大涨,舆情到底有何魔力?

星环科技

人工智能 人工智能大数据

前端知识总结输出文章目录大全

梁龙先森

JavaScript 前端 编程语言 28天写作

Vue 3自定义指令开发

Geek_Willie

【CSS】波纹效果

学习委员

CSS小技巧 28天写作 纯CSS

区块链落地商品溯源-区块链商品溯源方案

135深圳3055源中瑞8032

IDEA 异常退出 解决方法

任广印

IDEA

不明白线程池?那看看这篇,附10道面试题

田维常

线程池

android开发面试准备!Android高级工程师进阶学习,已开源

欢喜学安卓

android 程序员 面试 移动开发

区块链作用之数字货币的影响

v16629866266

微服务容错时,这些技术你要立刻想到

华为云开发者社区

微服务 线程 服务雪崩 断路器 服务降级

CSS实现数据统计

学习委员

前端 CSS小技巧 28天写作 纯CSS

灵雀云Kube-OVN进入CNCF沙箱,成为CNCF首个容器网络项目

York

灵雀云 Kubernetes Kube-OVN

Study Go: From Zero to Hero

Study Go: From Zero to Hero

谷歌TensorFlow团队和MediaPipe联合推出两款软件包,可对面部和手部特征进行跟踪-InfoQ