一种开源的机器学习模型,可在浏览器中使用TensorFlow.js对人物及身体部位进行分割.doc
《一种开源的机器学习模型,可在浏览器中使用TensorFlow.js对人物及身体部位进行分割.doc》由会员分享,可在线阅读,更多相关《一种开源的机器学习模型,可在浏览器中使用TensorFlow.js对人物及身体部位进行分割.doc(9页珍藏版)》请在三一文库上搜索。
1、一种开源的机器学习模型,可在浏览器中使用TensorFlow.js对人物及身体部位进行分割我们很高兴宣布推出BodyPix,这是一种开源的机器学习模型,可在浏览器中使用TensorFlow.js对人物及身体部位进行分割。默认设置下,该模型可在 2018 版 15 英寸 MacBook Pro 以及 iPhone X 上分别以 25 fps 和 21 fps 的帧率,估测及呈现人物及身体部位的分割。人物分割究竟是什么?在计算机视觉中,图像分割是指将图像中的像素分成几组特定语义区域以确定对象和边界的技术。研究期间,我们训练 BodyPix 模型对人物及 24 个身体部位(如左手、右前小腿或后背等部
2、位)执行此项操作。换言之,BodyPix 可将图像的像素分为以下两类:1) 表示人物的像素和 2) 表示背景的像素。它还可将表示人物的像素进一步分类为 24 个身体部位中的任一个部位。若您在此处尝试实时演示,这一切可能会更加明了。注:此处 链接https:/storage.googleapis/tfjs-models/demos/body-pix/indexl人物分割有何用途?这项技术可广泛应用于多个多领域,包括增强现实、摄影编辑以及图像或视频的艺术效果等。具体应用由您决定!去年,当我们推出PoseNet(首个能够在浏览器中使用简易网络摄像头估测身体部位(Kinect 的功能)的模型)时,人们
3、便对此项技术设想出各类用例。我们希望 BodyPix 也能用于开展同样的创意实验。为何要在浏览器中执行此操作?与 PoseNet 的情况类似,您过去只能借助专用硬件,或对系统要求严苛且安装难度较高的软件,才能进行实时人物分割。相比之下,您无需执行安装步骤,而仅凭几行代码即可使用 BodyPix 和 PoseNet。使用这些模型时无需任何专用镜头,因为它们能与任何基本的网络摄像头或手机相机配合使用。最后,用户只需打开网址即可访问这些应用。由于所有计算均在设备上完成,因此数据可以保持私密性。鉴于以上所有原因,我们认为,对于艺术家、创意程序员和编程新手而言,BodyPix 是一个可轻松上手的工具。在
4、深入介绍 BodyPix 之前,我们要感谢 Google Research 团队的Tyler Zhu(此模型的幕后研究员,专攻人体姿势估测)1,2、Google Brain 团队工程师Nikhil Thorat与Daniel Smilkov(TensorFlow.js库的幕后研究员),以及Daniel Shiffman,同时还要感谢Google Faculty Research Award为 Dan Oved 的研究工作提供资助。注:1 链接https:/arxiv/abs/1701.017792 链接https:/arxiv/abs/1803.08225BodyPix 入门指南让我们深入了解
5、使用此模型时的技术细节。BodyPix 可用于将图像分割为人物像素和非人物像素。人物像素又可进一步分类为24 个身体部位中的任一部位。重要的是,此模型仅适用于单个人物,因此请确保您的输入数据不包含多个人。第 1 部分:导入 TensorFlow.js 和 BodyPix 库让我们回顾一下有关如何建立 BodyPix 项目的基础知识。您可通过 npm install tensorflow-models/body-pix 安装此库,然后使用 es6 模块将其导入:import * as bodyPix from tensorflow-models/body-pix; async function
6、loadAndUseBodyPix() const net = await bodyPix.load(); / BodyPix model loaded您也可通过网页中的软件包将其导入,而无需执行任何安装步骤: bodypix.load().then(function(net) / BodyPix model loaded ); 第 2a 部分:人物分割应用于图像的人物分割算法示例。图像来源:“Microsoft Coco:Common Objects in Context Dataset”,http:/cocodataset在基础层面,人物分割将图像分割为人物像素和非人物像素。但实际过程并非
7、如此简单,图像在输入模型后会转化为二维图像,其中每个像素处的浮点值均介于 0 到 1 之间,表示该像素中存在人物的概率。我们需设定一个名为“分割阈值”的值,其表示像素分值必须达到此最小值后,方可视作人物的一部分。通过使用分割阈值,这些介于 0 到 1 之间的浮点值会成为二进制数值 0 或 1(即表示,若阈值为 0.5 ,则任何高于 0.5 的值均会变为 1,而低于 0.5 的值则变为 0)。我们调用 API 方法estimatePersonSegmentation对图像或视频执行人物分割操作;下方简短的代码块展示了如何使用此方法:const imageElement = document.ge
8、tElementById(image);/ load the BodyPix model from a checkpointconst net = await bodyPix.load();/ arguments for estimating person segmentation.const outputStride = 16;const segmentationThreshold = 0.5;const personSegmentation = await net.estimatePersonSegmentation(imageElement, outputStride, segmenta
9、tionThreshold);人物分割输出示例如下所示: width: 640, height: 480, data: Uint8Array(307200) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
10、 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, / the data array contains 307200 values, one for each pixel of the 640x480 image that was passed to the function.如需了解此方法及其参数的完整说明,请参阅GitHub readme。注:GitHub readme 链接https:/github/tensorflow/tfjs-models/tree/master/body-pix#p
11、erson-segmentation绘制人物分割输出结果BodyPix 在浏览器中的另一优势是,其允许我们访问Canvas 合成等网络 API。通过这些 API,我们可以使用 BodyPix 的输出结果遮盖或替换部分图像内容。为帮助您入门,我们提供了包含此功能的实用函数,具体如下:toMaskImageData会提取经估测的人物分割的输出结果,并生成透明图像,该图像会在人物或背景所处位置显示模糊图像,具体视 maskBackground 而定。然后,可使用drawMask方法在原始图像上将其绘制为掩膜:const imageElement = document.getElementById(i
12、mage);const net = await bodyPix.load();const segmentation = await net.estimatePersonSegmentation(imageElement);const maskBackground = true;/ Convert the personSegmentation into a mask to darken the background.const backgroundDarkeningMask = bodyPix.toMaskImageData(personSegmentation, maskBackground)
13、;const opacity = 0.7;const canvas = document.getElementById(canvas);/ draw the mask onto the image on a canvas. With opacity set to 0.7 this will darken the background.bodyPix.drawMask( canvas, imageElement, backgroundDarkeningMask, opacity);drawMask会在画布上绘制图像,同时会绘制包含掩膜的 ImageData,使其带有特定的模糊度。借助对上方第一张
14、图像执行estimatePersonSegmentation后的输出结果,toMaskImageData将生成ImageData。若将 maskBackground 设为 true(默认设置),则 ImageData 便会如上方第二张图像所示;若将 maskBackground 设为 false,则其会与第三张图像类似然后,可使用drawMask在图像上绘制此掩膜第 2b 部分:身体部位分割应用于图像的身体部位分割算法示例。图像来源:“Microsoft Coco:Common Objects in Context Dataset”,https:/cocodataset.hb除了简单的人物/非
15、人物分类,BodyPix 还能将图像分割为表示24 个身体部位中任一个部位的像素。图像在输入模型后会转化为二维图像,其中每个像素处的整数值均介于 0 到 23 之间,表示该像素在 24 个身体部位中的所属部位。对于非身体部位的像素,此值为 -1。我们调用 API 方法estimatePartSegmentation对图像或视频执行身体部位分割操作;下方简短的代码块展示了如何使用此方法:const imageElement = document.getElementById(image);/ load the BodyPix model from a checkpointconst net =
16、await bodyPix.load();/ arguments for estimating body part segmentation.const outputStride = 16;const segmentationThreshold = 0.5;/ load the person segmentation model from a checkpointconst net = await bodyPix.load();const partSegmentation = await net.estimatePartSegmentation(imageElement, outputStri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一种 机器 学习 模型 浏览器 使用 TensorFlow js 人物 身体 部位 进行 分割
链接地址:https://www.31doc.com/p-3364017.html