0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TensorFlow.js制作了一个仅用 200 余行代码的项目

lviY_AI_shequ 来源:机器之心 2020-05-11 18:08 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

只需网页端,秒速消失不留痕。

Jason Mayes 是一名在谷歌工作的资深网页工程师,他长期致力于运用新兴技术提供物联网解决方案。近日,充满奇思妙想的 Mayes 又使用 TensorFlow.js 制作了一个仅用 200 余行代码的项目,名为 Real-Time-Person-Removal。它能够实时将复杂背景中的人像消除,而且仅基于网页端。 现在,Mayes 在 GitHub 上开源了他的代码,并在 Codepen.io 上提供了演示 Demo。从视频中看到,你现在只需要一台能上网的电脑和一个网络摄像头就能体验它。

项目地址:https://github.com/jasonmayes/Real-Time-Person-Removal

Demo 地址:https://codepen.io/jasonmayes/pen/GRJqgma

目前,该项目异常火热,在 Github 上已经获得了 3.4k 的 Star 量。 实时隐身不留痕项目作者:Jason Mayes 我们先来看一下运行的效果。下图中,上半部分是原始视频,下半部分是使用 TensorFlow.js 对人像进行消除后的视频。可以看到,除了偶尔会在边缘处留有残影之外,整体效果还是很不错的。 为了展现这个程序在复杂背景下消除人像并重建背景的能力,Mayes 特意在床上放了一台正在播放视频的笔记本电脑。当他的身体遮挡住笔记本电脑时,可以看到消除算法暂停在电脑被遮挡前的播放画面,并能在人移开时迅速地重建出当前画面。

此外,Mayes 还在 Codepen.io 上提供了能够直接运行的示例。只需要点击 Enable Webcam,离开摄像头一段距离确保算法能够较全面的收集到背景图像,之后当你再出现在摄像头前时就能从下方的预览窗口看到「隐形」后的画面了。

网友表示有了这个程序,像之前 BBC 直播中孩子闯进门来那样的大型翻车现场就有救了。 项目运行机制 Mayes 开发的这个人像消除程序背后的运行机制十分简单,他使用了 TensorFlow.js 中提供的一个预训练的 MobileNet,用于人像分割。

constbodyPixProperties={ architecture:'MobileNetV1', outputStride:16, multiplier:0.75, quantBytes:4 };

TensorFlow.js 提供的部分计算机视觉预训练模型。 MobileNet 是谷歌在 2017 年针对移动端和嵌入式设备提出的网络,针对图像分割。其核心思想是使用深度可分离卷积构建快速轻量化的网络架构。Mayes 选择使用它的原因也是出于其轻量化的原因,假如使用 YOLO 或者 Fast-RCNN 这类物体检测算法的话,在移动端就很难做到实时性。 通过 MobileNet 的输出获得检测到人物像素的边界框。

//Gothroughpixelsandfigureoutboundingboxofbodypixels. for(letx=0;x< canvas.width; x++) {     for (let y = 0; y < canvas.height; y++) {       let n = y * canvas.width + x;       // Human pixel found. Update bounds.       if (segmentation.data[n] !== 0) {         if(x < minX) {           minX = x;         }         if(y < minY) {           minY = y;         }         if(x >maxX){ maxX=x; } if(y>maxY){ maxY=y; } foundBody=true; } } } 为避免人物没有被检测完全的现象,这里使用变量额 scale 对检测区域进行适当放缩。这个 1.3 的参数是测试出来的,感兴趣的读者可以调整试试看。 //Calculatedimensionsofboundingbox. varwidth=maxX-minX; varheight=maxY-minY; //Definescalefactortousetoallowforfalsenegativesaroundthisregion. varscale=1.3; //Definescaleddimensions. varnewWidth=width*scale; varnewHeight=height*scale; //Caculatetheoffsettoplacenewboundingboxsoscaledfromcenterofcurrentboundingbox. varoffsetX=(newWidth-width)/2; varoffsetY=(newHeight-height)/2; varnewXMin=minX-offsetX; varnewYMin=minY-offsetY; 之后对人物 bounding box 之外的区域进行更新,并且当检测到人物移动时,更新背景区域。 //Nowloopthroughupdatebackgoundunderstandingwithnewdata //ifnotinsideaboundingbox. for(letx=0;x< canvas.width; x++) {     for (let y = 0; y < canvas.height; y++) {       // If outside bounding box and we found a body, update background.       if (foundBody && (x < newXMin || x >newXMin+newWidth)||(y< newYMin || y >newYMin+newHeight)){ //Convertxyco-ordstoarrayoffset. letn=y*canvas.width+x; data[n*4]=dataL[n*4]; data[n*4+1]=dataL[n*4+1]; data[n*4+2]=dataL[n*4+2]; data[n*4+3]=255; }elseif(!foundBody){ //Nobodyfoundatall,updateallpixels. letn=y*canvas.width+x; data[n*4]=dataL[n*4]; data[n*4+1]=dataL[n*4+1]; data[n*4+2]=dataL[n*4+2]; data[n*4+3]=255; } } } ctx.putImageData(imageData,0,0); if(DEBUG){ ctx.strokeStyle="#00FF00" ctx.beginPath(); ctx.rect(newXMin,newYMin,newWidth,newHeight); ctx.stroke(); } } 至此为算法的核心部分,用了这个程序,你也可以像灭霸一样弹一个响指(单击一下鼠标)让人凭空消失。 热门的「视频隐身术」 其实,这并非机器之心报道的第一个消除视频中人像的项目。 2019 年,我们也曾报道过「video-object-removal」项目。在此项目中,只要画个边界框,模型就能自动追踪边界框内的物体,并在视频中隐藏它。 项目地址:https://github.com/zllrunning/video-object-removal

但从项目效果来看,也会有一些瑕疵,例如去掉了行人后,背景内的车道线对不齐等。 与 Mayes 的这个项目类似,video-object-removal 主要借鉴了 SiamMask 与 Deep Video Inpainting,它们都来自 CVPR 2019 的研究。通过 SiamMask 追踪视频中的目标,并将 Mask 传递给 Deep Video Inpainting,然后模型就能重建图像,完成最终的修复了。 对此类技术感兴趣的读者可自行运行下这两个项目,做下对比。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2950

    文章

    48132

    浏览量

    418564
  • tensorflow
    +关注

    关注

    13

    文章

    336

    浏览量

    62380

原文标题:Github 3.4k星,200余行代码,让你实时从视频中隐身

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    重磅!华为发布全新代896线激光雷达!鸿蒙智累计交付128万辆

    电子发烧友网报道(文/李弯弯)3月4日,华为举办鸿蒙智技术焕新发布会。会上,华为常务董事产品投资评审委员会主任终端BG董事长承东介绍,鸿蒙智目前五界齐聚,仅用43
    的头像 发表于 03-05 09:10 6765次阅读
    重磅!华为发布全新<b class='flag-5'>一</b>代896线激光雷达!鸿蒙智<b class='flag-5'>行</b>累计交付128万辆

    STM32N6 在 PSRAM 上运行代码的调试

    1. 引言STM32N6 项目中,用户代码可能会比较大,此时仅用内部 SRAM 并不能满足用代码运行需求。那么,将代码放置到 PSRAM 上
    发表于 04-15 16:02 0次下载

    深入解析Microchip HCS200 KEELOQ® 代码跳变编码器

    ® 代码跳变编码器,它在远程无钥匙进入(RKE)系统等应用中发挥着关键作用。 文件下载: HCS200T-I/SN.pdf 、HCS200概述 HCS
    的头像 发表于 04-07 10:40 117次阅读

    全球布局--寻迹智海外标杆项目案例分享

    寻迹智的海外版图,正以一个个落地标杆项目为基石持续拓展。从日韩精密制造、俄罗斯的零售到东南亚电子产业,我们以定制化的智能物流解决方案,为全球不同行业的制造企业破解物流效率难题、实现降本增效升级。
    的头像 发表于 03-24 16:07 230次阅读

    LAT1621_STM32N6 在 PSRAM 上运行代码的调试

    STM32N6 项目中,用户代码可能会比较大,此时仅用内部 SRAM 并不能满足用代码运行需求。那么,将代码放置到 PSRAM 上运行也是
    发表于 03-11 10:44 0次下载

    华为承东一行到访东风汽车开展深度交流

    近日,华为常务董事、产品投资评审委员会主任、终端BG董事长承东一行到访东风汽车,围绕鸿蒙生态、AI等前沿技术、汽车产业智能化发展及企业数字化升级等话题,与东风汽车董事长、党委书记杨青,党委常委、副总经理黄勇等开展深度交流。
    的头像 发表于 01-15 16:09 342次阅读

    20代码开发平台多维度对比:解锁企业应用开发新动能

    、行业痛点剖析 1.1 开发周期冗长 在传统应用开发模式下,完整的项目从需求分析阶段开始,便需要投入大量时间。开发团队要与业务部门反复沟通,梳理出详尽的需求文档,这个过程往往会因
    的头像 发表于 11-05 17:04 810次阅读

    【上海晶珩睿莓1开发板试用体验】将TensorFlow-Lite物体归类(classify)的输出图片移植到LVGL9.3界面中

    既然调通了TensorFlow-Lite物体归类(classify)和LVGL9.3代码,那么把这两东西结合起来也是没问题的,需要注意的是,TensorFlow-Lite是C++
    发表于 09-21 00:39

    【上海晶珩睿莓1开发板试用体验】TensorFlow-Lite物体归类(classify)

    使用TensorFlow-Lite库之前,必须先编译OpenCV库,生成头文件和库文件: 这里需要注意下,TensorFlow-Lite代码所使用的GLIBC库为2.34,
    发表于 09-12 22:43

    【汇思博SEEK100开发板试用体验】3/第次使用OpenHarmony

    :​​eTS​​(或JS) Device Type:勾选目标设备(如Phone) 。 ​​二、编写第一个功能:修改欢迎语​​ ​​定位入口文件​​ eTS项目:entry/src/main/ets
    发表于 08-20 22:21

    开放原子开源基金会发布150开源项目应用案例

    。案例覆盖电力、通信、医疗、教育、金融、交通等10关系国计民生的关键行业,彰显了开源技术在促进产业升级、行业创新方面的强大动力,标志着开源技术实现从代码研发到千百业规模化应用的重
    的头像 发表于 07-28 17:10 1291次阅读

    Ansible代码上线项目实战案例

    在DevOps浪潮中,自动化部署已经成为每个运维工程师的必备技能。今天我将分享完整的Ansible代码上线项目实战案例,让你的部署效率提升10倍!
    的头像 发表于 07-24 14:03 760次阅读

    小鹏汽车一行到访中汽中心

    近日,广州小鹏汽车科技集团有限公司(以下简称“小鹏汽车”)技术中心总经理一行到访中汽中心,与中汽中心党委委员、副总经理周华进行了座谈交流。
    的头像 发表于 05-20 16:20 979次阅读

    使用CYUSB3065制作了定制电路板,并且想要配置我的定制传感器,遇到的几个疑问求解

    我已经使用 CYUSB3065 制作了定制电路板,并且想要配置我的定制传感器,但有几个问题。 1.I2C 时钟 如果我想用 2 通道设置配置 AR0144 传感器,这种情况下串行时钟介于
    发表于 05-15 08:14

    使用CY3014USB芯片组制作了台相机,视频显示延迟怎么解决?

    我使用 CY3014USB 芯片组制作了台相机,视频从相机流向计算机,显示屏上显示出精美的图像。 我注意到摄像机前发生的事情和信息在屏幕上更新/流动之间存在延迟。 延迟时间几乎持续 1 秒。 这
    发表于 05-06 09:11