近日,谷歌正式推出BodyPix 2.0,这是一款使用TensorFlow.js的人体图像分割工具,它对该工具进行了重大升级,增加了多人支持,提高了准确性。
我们先来看一个动态图:
BodyPix可以将图像分割为人体和非人体像素,人体部分可以进一步划分为24个人体部分之一。
BodyPix可以直接在浏览器中运行,开发人员可以使用几行代码来处理计算机或手机摄像头。
使用默认设置,BodyPix可以在15英寸MacBook Pro上以25 fps的速度进行估计,并呈现人和身体部位的分段。在iPhone X上,BodyPix可以估计为每秒21帧。
这次2.0版本的主要更新包括支持多人图像、添加基于ResNet-50的模型、新的api、权重和对不同图像大小的支持。
作出预测
给定具有一个或多个人的图像,人员分割可预测所有人员的分割。它返回对应于图像中人物分割的PersonSegmentation对象。它不会在不同的个人之间消除歧义。如果您需要单独细分个人,请使用segmentMultiPerson(此方法比较慢)。
给定一个或多个人的图像,BodyPix的segmentPersonParts方法可以预测所有人的24个身体部位分割。PartSegmentation对于所有合并的人,它为每个像素返回与身体部位相对应的对象。如果您需要将个人细分,使用segmentMultiPersonParts。
该PartSegmentation对象包含一个宽度,高度Pose和一个Int32Array,该像素的ID为0-24,表示对应的身体部位的一部分,否则为-1。
输出结果到图像上
BodyPix包含实用程序功能,可帮助使用输出进行绘制和合成。这些API方法是实验性的,随时可能更改。
bodyPix.toMask
给定人员分割(或多人分割)的输出,生成每个像素的可视化效果,该可视化由输出中像素处的相应二进制分割值确定。换句话说,有人的像素将由前景色着色,而没有人的像素将由背景色着色。可以用作合成时遮盖人物或背景的遮罩。
具有personSegmentation宽度和高度相同的ImageData,每个像素的颜色和不透明度由来自输出的像素处的相应二进制分段值确定:
bodyPix.toColoredPartMask
给定人体部位分割(或多人人体部位分割)的输出以及由部件ID索引的颜色数组,将生成一个图像,该图像在每个像素处具有与每个部位对应的颜色,而在白色像素中则没有部位。
由于BodyPix可以区分人体和背景,因此可以利用它实现实时背景模糊。调用的API方法是bodyPix.drawBokehEffect。
使用bodypix识别身体的不同部分,可以调用bodypix.blurbodypart来模糊脸部:
还有很多非常有趣的API就不一一举例了。
如何安装
嵌入html运行
或者NPM
npm install @tensorflow-models/body-pix
然后导入ES6模块
看看怎么加速
BodyPix配有不同尺寸的型号,具有不同的性能。通过设置模型的大小和输出步长,可以权衡速度和精度。
默认情况下,BodyPix加载0.75倍MobileNetV1架构,适用于低端GPU计算机,并为移动设备导入0.50倍模型。
const net = await bodyPix.load({ architecture: 'MobileNetV1', outputStride: 16, multiplier: 0.75, quantBytes: 2});
放大倍数越大,神经网络的层次越大,推理的精度越高,推理速度越慢。不同放大模型的性能比较如下图:
对于具有更强大gpu的计算机,官方建议使用ResNet架构,这也是版本2.0中添加的新功能。
GitHub地址:
https://github.com/tensorflow/tfjs-models/tree/master/body-pix
联系客服