0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow.js制作了一個(gè)僅用 200 余行代碼的項(xiàng)目

lviY_AI_shequ ? 來源:機(jī)器之心 ? 2020-05-11 18:08 ? 次閱讀

只需網(wǎng)頁端,秒速消失不留痕。

Jason Mayes 是一名在谷歌工作的資深網(wǎng)頁工程師,他長(zhǎng)期致力于運(yùn)用新興技術(shù)提供物聯(lián)網(wǎng)解決方案。近日,充滿奇思妙想的 Mayes 又使用 TensorFlow.js 制作了一個(gè)僅用 200 余行代碼的項(xiàng)目,名為 Real-Time-Person-Removal。它能夠?qū)崟r(shí)將復(fù)雜背景中的人像消除,而且僅基于網(wǎng)頁端。 現(xiàn)在,Mayes 在 GitHub 上開源了他的代碼,并在 Codepen.io 上提供了演示 Demo。從視頻中看到,你現(xiàn)在只需要一臺(tái)能上網(wǎng)的電腦和一個(gè)網(wǎng)絡(luò)攝像頭就能體驗(yàn)它。

項(xiàng)目地址:https://github.com/jasonmayes/Real-Time-Person-Removal

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

目前,該項(xiàng)目異?;馃幔?Github 上已經(jīng)獲得了 3.4k 的 Star 量。 實(shí)時(shí)隱身不留痕項(xiàng)目作者:Jason Mayes 我們先來看一下運(yùn)行的效果。下圖中,上半部分是原始視頻,下半部分是使用 TensorFlow.js 對(duì)人像進(jìn)行消除后的視頻。可以看到,除了偶爾會(huì)在邊緣處留有殘影之外,整體效果還是很不錯(cuò)的。 為了展現(xiàn)這個(gè)程序在復(fù)雜背景下消除人像并重建背景的能力,Mayes 特意在床上放了一臺(tái)正在播放視頻的筆記本電腦。當(dāng)他的身體遮擋住筆記本電腦時(shí),可以看到消除算法暫停在電腦被遮擋前的播放畫面,并能在人移開時(shí)迅速地重建出當(dāng)前畫面。

此外,Mayes 還在 Codepen.io 上提供了能夠直接運(yùn)行的示例。只需要點(diǎn)擊 Enable Webcam,離開攝像頭一段距離確保算法能夠較全面的收集到背景圖像,之后當(dāng)你再出現(xiàn)在攝像頭前時(shí)就能從下方的預(yù)覽窗口看到「隱形」后的畫面了。

網(wǎng)友表示有了這個(gè)程序,像之前 BBC 直播中孩子闖進(jìn)門來那樣的大型翻車現(xiàn)場(chǎng)就有救了。 項(xiàng)目運(yùn)行機(jī)制 Mayes 開發(fā)的這個(gè)人像消除程序背后的運(yùn)行機(jī)制十分簡(jiǎn)單,他使用了 TensorFlow.js 中提供的一個(gè)預(yù)訓(xùn)練的 MobileNet,用于人像分割。

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

TensorFlow.js 提供的部分計(jì)算機(jī)視覺預(yù)訓(xùn)練模型。 MobileNet 是谷歌在 2017 年針對(duì)移動(dòng)端和嵌入式設(shè)備提出的網(wǎng)絡(luò),針對(duì)圖像分割。其核心思想是使用深度可分離卷積構(gòu)建快速輕量化的網(wǎng)絡(luò)架構(gòu)。Mayes 選擇使用它的原因也是出于其輕量化的原因,假如使用 YOLO 或者 Fast-RCNN 這類物體檢測(cè)算法的話,在移動(dòng)端就很難做到實(shí)時(shí)性。 通過 MobileNet 的輸出獲得檢測(cè)到人物像素的邊界框。

//Gothroughpixelsandfigureoutboundingboxofbodypixels. for(letx=0;xmaxX){ maxX=x; } if(y>maxY){ maxY=y; } foundBody=true; } } } 為避免人物沒有被檢測(cè)完全的現(xiàn)象,這里使用變量額 scale 對(duì)檢測(cè)區(qū)域進(jìn)行適當(dāng)放縮。這個(gè) 1.3 的參數(shù)是測(cè)試出來的,感興趣的讀者可以調(diào)整試試看。 //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; 之后對(duì)人物 bounding box 之外的區(qū)域進(jìn)行更新,并且當(dāng)檢測(cè)到人物移動(dòng)時(shí),更新背景區(qū)域。 //Nowloopthroughupdatebackgoundunderstandingwithnewdata //ifnotinsideaboundingbox. for(letx=0;xnewXMin+newWidth)||(ynewYMin+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(); } } 至此為算法的核心部分,用了這個(gè)程序,你也可以像滅霸一樣彈一個(gè)響指(單擊一下鼠標(biāo))讓人憑空消失。 熱門的「視頻隱身術(shù)」 其實(shí),這并非機(jī)器之心報(bào)道的第一個(gè)消除視頻中人像的項(xiàng)目。 2019 年,我們也曾報(bào)道過「video-object-removal」項(xiàng)目。在此項(xiàng)目中,只要畫個(gè)邊界框,模型就能自動(dòng)追蹤邊界框內(nèi)的物體,并在視頻中隱藏它。 項(xiàng)目地址:https://github.com/zllrunning/video-object-removal

但從項(xiàng)目效果來看,也會(huì)有一些瑕疵,例如去掉了行人后,背景內(nèi)的車道線對(duì)不齊等。 與 Mayes 的這個(gè)項(xiàng)目類似,video-object-removal 主要借鑒了 SiamMask 與 Deep Video Inpainting,它們都來自 CVPR 2019 的研究。通過 SiamMask 追蹤視頻中的目標(biāo),并將 Mask 傳遞給 Deep Video Inpainting,然后模型就能重建圖像,完成最終的修復(fù)了。 對(duì)此類技術(shù)感興趣的讀者可自行運(yùn)行下這兩個(gè)項(xiàng)目,做下對(duì)比。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2928

    文章

    46024

    瀏覽量

    389409
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    330

    瀏覽量

    61068

原文標(biāo)題:Github 3.4k星,200余行代碼,讓你實(shí)時(shí)從視頻中隱身

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    開源項(xiàng)目!手把手教你制作個(gè)互動(dòng)式LED墻壁時(shí)鐘!

    在這篇教程中,將教你使用Arduino創(chuàng)建個(gè)互動(dòng)式LED墻壁時(shí)鐘。這個(gè)項(xiàng)目結(jié)合了創(chuàng)意和技術(shù),設(shè)計(jì)出個(gè)功能性強(qiáng)且視覺效果驚人的時(shí)鐘,它配
    發(fā)表于 02-08 17:47

    TPA3123制作了個(gè)音頻功放,無法工作怎么解決?

    我按照TPA3123的用戶指南上的原理圖,制作了個(gè)音頻功放,但是無論左右輸入都接地的時(shí)候,或者有信號(hào)輸入,在Lout和Rout都有這樣的波形,無法工作。希望得到大家的幫助。
    發(fā)表于 11-04 06:06

    使用LM3886制作了個(gè)最基礎(chǔ)的反相放大器,出現(xiàn)交越失真如何解決?

    使用LM3886制作了個(gè)最基礎(chǔ)的反相放大器,增益為20,輸入三角波信號(hào),出現(xiàn)交越失真。信號(hào)頻率在幾百Hz到十幾kHz變化,現(xiàn)象相同。請(qǐng)問這是什么原因,如果解決?
    發(fā)表于 09-29 07:00

    用opa2228制作了個(gè)同向加法器,可輸出出現(xiàn)了震蕩怎么解決?

    請(qǐng)問下,我用opa2228制作了個(gè)同向加法器,可輸出出現(xiàn)了震蕩(其中正向輸入的兩個(gè)信號(hào)分別是峰峰值為1.36V頻率4kHZ的正弦波,和
    發(fā)表于 09-20 06:58

    制作了個(gè)0.6HZ低通濾波器,濾波后的噪聲峰峰值達(dá)到了20mv,為什么?

    制作了個(gè)0.6HZ低通濾波器(用來將濾除交流信號(hào)分量中的直流分量)。但是濾波后的噪聲峰峰值達(dá)到了20mv。
    發(fā)表于 09-19 07:35

    推薦個(gè)支持js的嵌入式設(shè)備開發(fā)平臺(tái)

    控制gpio,pwm,藍(lán)牙,nfc,二維碼識(shí)別,人臉識(shí)別,網(wǎng)絡(luò),mqtt,tcp,看門狗,ui等等,支持多線程 也支持多種設(shè)備。 以下是個(gè)代碼示例和效果圖示例 import log from
    發(fā)表于 09-04 14:04

    用OPA549T制作了個(gè)改進(jìn)型的Howland恒流源,Howland恒流源帶寬可以有多大?

    最近用OPA549T制作了個(gè)改進(jìn)型的Howland恒流源,電流峰峰值可達(dá)6A。但是恒流帶寬有限(接近2KHz)低頻時(shí)(大概在10Hz以內(nèi))電流大小也會(huì)衰減。有什么辦法可以提高恒流帶寬嗎?
    發(fā)表于 08-15 08:32

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google開發(fā)的個(gè)開源深度學(xué)習(xí)框架,它允許開發(fā)者方便地構(gòu)建、訓(xùn)練和部署各種復(fù)雜的機(jī)器學(xué)習(xí)模型。TensorFlow憑借其高效的計(jì)算性能、靈活的架構(gòu)以及豐富的
    的頭像 發(fā)表于 07-12 16:38 ?1239次閱讀

    使用TensorFlow進(jìn)行神經(jīng)網(wǎng)絡(luò)模型更新

    使用TensorFlow進(jìn)行神經(jīng)網(wǎng)絡(luò)模型的更新是個(gè)涉及多個(gè)步驟的過程,包括模型定義、訓(xùn)練、評(píng)估以及根據(jù)新數(shù)據(jù)或需求進(jìn)行模型微調(diào)(Fine-tuning)或重新訓(xùn)練。下面我將詳細(xì)闡述這個(gè)過程,并附上相應(yīng)的
    的頭像 發(fā)表于 07-12 11:51 ?809次閱讀

    tensorflow和pytorch哪個(gè)更簡(jiǎn)單?

    PyTorch更簡(jiǎn)單。選擇TensorFlow還是PyTorch取決于您的具體需求和偏好。如果您需要個(gè)易于使用、靈活且具有強(qiáng)大社區(qū)支持的框架,PyTorch可能是
    的頭像 發(fā)表于 07-05 09:45 ?1387次閱讀

    tensorflow和pytorch哪個(gè)好

    tensorflow和pytorch都是非常不錯(cuò)的強(qiáng)大的框架,TensorFlow還是PyTorch哪個(gè)更好取決于您的具體需求,以下是關(guān)于這兩個(gè)框架的些關(guān)鍵點(diǎn):
    的頭像 發(fā)表于 07-05 09:42 ?1146次閱讀

    tensorflow簡(jiǎn)單的模型訓(xùn)練

    在本文中,我們將詳細(xì)介紹如何使用TensorFlow進(jìn)行簡(jiǎn)單的模型訓(xùn)練。TensorFlow個(gè)開源的機(jī)器學(xué)習(xí)庫(kù),廣泛用于各種機(jī)器學(xué)習(xí)任務(wù),包括圖像識(shí)別、自然語言處理等。我們將從安裝
    的頭像 發(fā)表于 07-05 09:38 ?1247次閱讀

    keras模型轉(zhuǎn)tensorflow session

    在這篇文章中,我們將討論如何將Keras模型轉(zhuǎn)換為TensorFlow session。 Keras和TensorFlow簡(jiǎn)介 Keras是個(gè)高級(jí)神經(jīng)網(wǎng)絡(luò)API,它提供了
    的頭像 發(fā)表于 07-05 09:36 ?820次閱讀

    TensorFlow的定義和使用方法

    TensorFlow個(gè)由谷歌人工智能團(tuán)隊(duì)谷歌大腦(Google Brain)開發(fā)和維護(hù)的開源機(jī)器學(xué)習(xí)庫(kù)。它基于數(shù)據(jù)流編程(dataflow programming)的概念,將復(fù)雜的數(shù)學(xué)運(yùn)算表示為
    的頭像 發(fā)表于 07-02 14:14 ?1378次閱讀

    用STM32CubeIDE為電路板制作了軟ap,將項(xiàng)目導(dǎo)入Keil,代碼在cy_wcm_init時(shí)停止了如何解決?

    我用 STM32CubeIDE 為我的電路板制作了軟 ap,但我要將我的項(xiàng)目導(dǎo)入 Keil。 但我的代碼在 cy_wcm_init 時(shí)停止了。 如何解決?
    發(fā)表于 07-02 08:19

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品