作者:極鏈科技 曾啟澔
前言
隨著前端生態的發展,Java已經不僅僅局限于作為網頁開發,也越來越活躍于服務器端,移動端小程序等應用開發中。甚至通過Electron等打包工具,甚至能夠開發多系統的桌面應用。其涉足的領域寬泛也使得能夠實現的功能也不再是簡單的UI控件制作和內容的展示,在互動娛樂,小游戲領域也有著極大的發展前景。本文以通過Java開發一個基于瀏覽器攝像頭的實時人物動作捕捉小程序為例,介紹一下前端在這一領域的可行性。
什么是TensorFlow
TensorFlow 最初是由Google大腦小組的研究員和工程師們開發出來,采用數據流圖(Data Flow Graphs)用于機器學習和深度神經網絡方面數值計算的開源軟件庫。其高度的可移植性和多語言性使得它可以通過各種常用編程語言編寫,輕松的運行在多種平臺的設備上。是一個集性能,可靠性,通用性,易用性為一體的強大開源庫。
本文所使用的開源Java模型庫:
l tfjs-models/posenet: 一個機器學習模型,功能為對圖像或者視頻中的人物進行動作捕捉,輸出人體各個部位的keypoints(坐標集)。具有單一人物分析和多人物分析的特點。
l tfjs-models/body-pix: 一個機器學習模型,功能為對圖像或者視頻中人物和背景進行分析,將人物從背景中剝離出來,輸出結果為人體24個部位在畫面中的像素位置。具有將人物與背景分離的功能。
實現原理
本文所介紹的基于瀏覽器和網絡攝像頭的人物實時動作捕捉方法,其實現原理是通過Java調用元素,通過瀏覽器呼叫網絡攝像頭,將網絡攝像頭獲取到的視頻流的每一幀數據通過TensorFlow 的JS模型庫(tfjs-models/posenet或tfjs-models/body-pix)對圖像進行分析,輸出攝像頭所拍攝對象的人體各keypoint數據分析結果的同時,對HTML5的元素進行渲染。開發者可以根據項目需求,對獲得到的人體各keypoint數據進行分析處理,實現程序功能。
*在基本的原理中并不是必須的組成部分,但在下文中會簡單介紹一種通過的圖像繪制功能,提升人物捕捉精度的方法。
通過tfjs-models/posenet模型庫實現人物動作捕捉
l基本配置
· 導入JS

· HTML

· 初始化網絡攝像頭

· 生成posenet對象

參數說明:
architecture:分為MobileNetV1和ResNet50兩個體系,其中ResNet50精度更高但處理速度較慢。
outputStride:輸出結果每個像素占用字節數,數字越小結果越精確,但處理的成本和時間更多。
inputResolution:輸入圖像壓縮后的尺寸,數字越大越精確,但處理的成本和時間更多。
multiplier:僅在MobileNetV1體系中使用,卷積運算的深度(通道數),數字越大層數越多越精確,但處理的成本和時間更多。
l執行實時分析

l結果
· 多人捕捉:多人捕捉時能夠獲得畫面中人物的keypoints,互相之間有一定的干擾但影響并不是特別大。
· 單人捕捉:很容易被背景及身邊人物干擾,導致人體keypoint定位不準確。
l缺點
通過實際的效果可以看到,該模型可以在多人物的時候準確捕捉到各個人物的動作和身體部位的keypoints,雖然存在若干干擾和不穩定但基本能夠接受,實時性效果好,但是無法區分主要人物和次要人物,需要開發者對結果數據進行處理。
其score的生成是根據形狀準確度來計算,沒有場景深度的分析,因此無法判斷人物前后位置關系。
由于以上的問題,該方法在單一人物動作捕捉時被周圍環境干擾的影響極大。在背景存在其他人物時會因無法判斷主次人物關系,極大的降低準確率。對單一人物動作捕效果非常的不理想,需要進行改進。
改進方案
單一人物的動作捕捉被外界干擾的影響太大導致結果并不理想,因此首先要考慮的就是屏蔽掉周圍干擾物體,突出主體人物。由此引入了tfjs-models/body-pix模型庫。
**tfjs-models/body-pix模型庫的主要功能:**實時分析人物結構,將人物從背景中剝離。其作用對象為單一捕捉對象,正好適用于上述單人捕捉結果不理想的情況。
l基本配置
· 導入JS

· 生成bodyPixNet對象

ltfjs-models/body-pix與tfjs-models/posenet的混合使用

l結果
tfjs-models/body-pix與tfjs-models/posenet的混合使用,雖然加大了canvas處理的負擔,加大了描繪和圖像處理的次數,但是由于tfjs-models/body-pix已經先將人物與背景剝離,在tfjs-models/posenet只使用用最高效但低準確度的參數配置下,也能夠產生遠高于使用高精確度但消耗處理性能極大的配置所不能達到的準確度。從而實現了高效,高準確度,流暢的實時單人動作捕捉功能。
結論
通過TensorFlow的開源庫,能夠輕松的在瀏覽器上通過網絡攝像頭實現人物動作的實時捕捉。
由于基于圖像分析,因此表現能力極大的依賴于對canvas的描繪性能,移動端由于瀏覽器canvas描繪能力以及硬件性能限制的原因,表現并不出色,無法做到長時間實時捕捉。甚至部分瀏覽器限制了網絡攝像頭的調用。在移動端的表現并不出色。
在單一人物的動作捕捉時,tfjs-models/body-pix與tfjs-models/posenet的混合使用能夠使精確度大大提升。
由于需要對canvas進行描繪,結合其他canvas的JS庫可以進行交互UI,交互小游戲等不同場合APP的開發。
發布評論請先 登錄
動作捕捉和盲人導航眼鏡的接合與應用,web的開發代碼和調試步驟
從納伏信號到精準數據:多功能炭素材料電阻率測試儀的前端與算法
恒訊科技解析:如何安裝MySQL并創建數據庫
OpenTenBase核心貢獻者分享開源數據庫的破局之路
【上海晶珩睿莓1開發板試用體驗】TensorFlow-Lite物體歸類(classify)
100%開源!行業首個企業級智能體
飛書富文本組件庫RichTextVista開源
基于STM32 HAL庫與標準庫的esp8266接入機智云方案(二)
如何用Brower Use WebUI實現網頁數據智能抓取與分析?
用樹莓派搞深度學習?TensorFlow啟動!
基于TensorFlow的開源JS庫的網頁前端人物動作捕捉的實現
評論