【工程師隱身術】200 行 TensorFlow.js 程式碼,讓你從視訊會議的畫面中「消失」

【為什麼我們要挑選這篇文章】新冠肺炎疫情席捲全球,不少企業改成遠端上班與視訊會議,但有 Google 工程師想開個玩笑,於是用 TensorFlow.js 寫了一個外掛,讓人在視訊的時候,直接從畫面「消失」。

這個程式碼只有短短 200 多行,有興趣的朋友可以試試。TensorFlow.js 是機器學習的重要工具,可藉由這簡單的小玩笑,練習一下 coding 技術。(責任編輯:郭家宏)

疫情期間,許多公司都開啟了遠距辦公,試想一下,在視訊會議時,如果你的同事突然從鏡頭中消失,大家會有什麼樣的反應?

Google 網站工程師 Jason Mayes 就做了這麼一個項目,成功嚇到了自己的朋友。透過 TensorFlow.js 製作了一個外掛,可以讓系統分離人物和背景,然後從場景中即時刪除任何人,也就是說,可以從影片中讓人「消失」。

從處理影片的效果來看,隱身的效果還不錯。

當然,除了文章開頭提到的「隱身」惡作劇,Jason 也想到了不少有趣的應用場景。比如幫一個 BBC 在線連線的 NG 影片做消除處理:從這兩個小孩「囂張」地走進來到被「無情」地拎走,都被 Jason 的小外掛處理的一乾二淨。

推特上的粉絲也表示,這確實很有趣,也很神奇。

GitHub 程式碼 傳送門

透過 TensorFlow.js,讓你從視訊會議的畫面中消失

除了在 GitHub 放出項目,作者也在 codepen.io 網站上放出了所有的程式碼,其 JS 程式碼只有短短 200 多行。

文摘菌(本文作者)也仔細學習了一下,值得注意的是,這個項目本身沒有訓練新的模型,用的是 TensorFlow.js 現成的模型,然後透過演算法對影片進行了處理,體現的是巧妙的工程思維。

首先,作者利用 TensorFlow.js 提供的身體分割模型識別出的人體,並定義一個人體區域。

同時,為了應對可能出現的假陰性,定義一個 1.3 的比例參數。

這個參數很重要,如果大了,背景的更新區域就會變小,影片的即時性也將受到影響;如果定義小了,那麼在人物快速移動時,會出現身體邊緣閃現的情況,這是一個工程上的取捨問題,感興趣的同學可以動手修改試一下。

而後,對除人體區域之外的區域(即背景部分)進行即時更新,當在定義的人體區域外檢測到人體(即人體出現了移動)時,即可對新的背景部分進行更新。

完整程式碼連結 在這裡 ,有興趣的同學可以試試看。

TensorFlow.js 是機器學習神器,功能絕對不只有「讓人消失」

作者整個項目的核心是 TensorFlow.js 提供的身體分割模型,TensorFlow.js 可以說是網站工程師使用機器學習模型的一個神器!

TensorFlow.js 是一個使用 JavaScript 進行機器學習開發的庫,允許使用 JavaScript 進行機器學習模型的開發,並可以直接在瀏覽器或 Node.js 中使用機器學習模型。

而作者要讓鏡頭中人物「消失」,首先就要找到人體的位置區域,這裡使用的就是 TensorFlow.js 已經訓練好的身體分割模型。

比如上面這個項目所用的身體分割模型 MobileNet,操作十分簡單:

當然,除了 MobileNet 這種小而快但是準確率不是特別高的模型,也可以選擇 ResNet 這種大而慢但是準確率相對較高的模型。

並且除了身體分割模型,TensorFlow.js 還提供圖像分類、對象檢測、身體分割、句子編碼等多種現成的機器學習模型。當然,如果有需要,用戶也可以進行重新訓練自己的模型。

再或者,如果你想做一些有趣的事情放鬆一下,TensorFlow.js 也絶對不會讓你失望。

知乎網友 Henry,同時也是一位阿里的高級技術專家,就用 TensorFlow.js 做了一個完全獨立運行於瀏覽器環境下的 AI 程式,成功打爆了隱藏在 Chrome 中的彩蛋遊戲「小恐龍」(T-Rex Runner)。

第一次,AI 在嘗試 3 次後逐漸學會了如何控制暴龍避讓障礙物。

第二次,在引入遺傳算法後,僅嘗試 2 次後 AI 即可學會躲避障礙物。

該作品的作者的 Jason Mayes 在 GitHub 上自我介紹,說自己是一位 15 年開發年齡的工程師,除了在 GitHub 留下足跡,他還給自己做了一個特別有意思的個人網站。

目前,Jason Mayes 就職於 Google Creative Innovation 團隊,專門幫助 Google 的客戶開發定製的 Web 解決方案,所以 Jason 對 HTML、CSS 和 JavaScript 十分熟練,因此在 GitHub 上的其他項目也都是用這幾種語言來實現。

比如他還寫過一個小程式,用來在網站上無縫排列自己的「貓片」,看著他為每一張照片配的旁白,資深貓奴無疑了。

在網站裡面,Jason 形容自己是 Web 開發人員、工程師、技術顧問和分析師的混合型開發者,51% 偏向技術,49% 偏向創造。

的確,要成為一名合格的開發者,除了技術過硬,對這個世界的好奇心也是做出好專案的重要源泉。

(本文經合作夥伴 大數據文摘 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈视频会议玩消失?借助神器 TensorFlow.js,200 行代码教你“隐身”,GitHub 标星 3k+〉。首圖來源: 大數據文摘

更多寫程式的技巧

用這 6 種方式優化程式碼,讓你的 Python 速度提升 30%!
「不一定要會寫程式」比爾蓋茲:未來企業需要這 3 種背景知識的人才
數據科學家技能趨勢解析:PyTorch 職缺大漲 108%,SQL 將成為需求第二大的程式語言


科技報橘 LinkedIn 上線!

最新科技產業動態、技術新突破、專業職能技巧提升 ....... 鎖定 TO  LinkedIn 專業品牌,提升職能與產業 Know-how,躋身產業菁英之列 https://www.linkedin.com/showcase/techorange

點關鍵字看更多相關文章: