作者:極鏈科技 曾啟澔
前言
隨著前端生態(tài)的發(fā)展,Java已經(jīng)不僅僅局限于作為網(wǎng)頁開發(fā),也越來越活躍于服務(wù)器端,移動端小程序等應(yīng)用開發(fā)中。甚至通過Electron等打包工具,甚至能夠開發(fā)多系統(tǒng)的桌面應(yīng)用。其涉足的領(lǐng)域?qū)挿阂彩沟媚軌驅(qū)崿F(xiàn)的功能也不再是簡單的UI控件制作和內(nèi)容的展示,在互動娛樂,小游戲領(lǐng)域也有著極大的發(fā)展前景。本文以通過Java開發(fā)一個基于瀏覽器攝像頭的實時人物動作捕捉小程序為例,介紹一下前端在這一領(lǐng)域的可行性。
什么是TensorFlow
TensorFlow 最初是由Google大腦小組的研究員和工程師們開發(fā)出來,采用數(shù)據(jù)流圖(Data Flow Graphs)用于機器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)方面數(shù)值計算的開源軟件庫。其高度的可移植性和多語言性使得它可以通過各種常用編程語言編寫,輕松的運行在多種平臺的設(shè)備上。是一個集性能,可靠性,通用性,易用性為一體的強大開源庫。
本文所使用的開源Java模型庫:
l tfjs-models/posenet: 一個機器學(xué)習(xí)模型,功能為對圖像或者視頻中的人物進行動作捕捉,輸出人體各個部位的keypoints(坐標集)。具有單一人物分析和多人物分析的特點。
l tfjs-models/body-pix: 一個機器學(xué)習(xí)模型,功能為對圖像或者視頻中人物和背景進行分析,將人物從背景中剝離出來,輸出結(jié)果為人體24個部位在畫面中的像素位置。具有將人物與背景分離的功能。
實現(xiàn)原理
本文所介紹的基于瀏覽器和網(wǎng)絡(luò)攝像頭的人物實時動作捕捉方法,其實現(xiàn)原理是通過Java調(diào)用元素,通過瀏覽器呼叫網(wǎng)絡(luò)攝像頭,將網(wǎng)絡(luò)攝像頭獲取到的視頻流的每一幀數(shù)據(jù)通過TensorFlow 的JS模型庫(tfjs-models/posenet或tfjs-models/body-pix)對圖像進行分析,輸出攝像頭所拍攝對象的人體各keypoint數(shù)據(jù)分析結(jié)果的同時,對HTML5的元素進行渲染。開發(fā)者可以根據(jù)項目需求,對獲得到的人體各keypoint數(shù)據(jù)進行分析處理,實現(xiàn)程序功能。
*在基本的原理中并不是必須的組成部分,但在下文中會簡單介紹一種通過的圖像繪制功能,提升人物捕捉精度的方法。
通過tfjs-models/posenet模型庫實現(xiàn)人物動作捕捉
l基本配置
· 導(dǎo)入JS
· HTML
· 初始化網(wǎng)絡(luò)攝像頭
· 生成posenet對象
參數(shù)說明:
architecture:分為MobileNetV1和ResNet50兩個體系,其中ResNet50精度更高但處理速度較慢。
outputStride:輸出結(jié)果每個像素占用字節(jié)數(shù),數(shù)字越小結(jié)果越精確,但處理的成本和時間更多。
inputResolution:輸入圖像壓縮后的尺寸,數(shù)字越大越精確,但處理的成本和時間更多。
multiplier:僅在MobileNetV1體系中使用,卷積運算的深度(通道數(shù)),數(shù)字越大層數(shù)越多越精確,但處理的成本和時間更多。
l執(zhí)行實時分析
l結(jié)果
· 多人捕捉:多人捕捉時能夠獲得畫面中人物的keypoints,互相之間有一定的干擾但影響并不是特別大。
· 單人捕捉:很容易被背景及身邊人物干擾,導(dǎo)致人體keypoint定位不準確。
l缺點
通過實際的效果可以看到,該模型可以在多人物的時候準確捕捉到各個人物的動作和身體部位的keypoints,雖然存在若干干擾和不穩(wěn)定但基本能夠接受,實時性效果好,但是無法區(qū)分主要人物和次要人物,需要開發(fā)者對結(jié)果數(shù)據(jù)進行處理。
其score的生成是根據(jù)形狀準確度來計算,沒有場景深度的分析,因此無法判斷人物前后位置關(guān)系。
由于以上的問題,該方法在單一人物動作捕捉時被周圍環(huán)境干擾的影響極大。在背景存在其他人物時會因無法判斷主次人物關(guān)系,極大的降低準確率。對單一人物動作捕效果非常的不理想,需要進行改進。
改進方案
單一人物的動作捕捉被外界干擾的影響太大導(dǎo)致結(jié)果并不理想,因此首先要考慮的就是屏蔽掉周圍干擾物體,突出主體人物。由此引入了tfjs-models/body-pix模型庫。
**tfjs-models/body-pix模型庫的主要功能:**實時分析人物結(jié)構(gòu),將人物從背景中剝離。其作用對象為單一捕捉對象,正好適用于上述單人捕捉結(jié)果不理想的情況。
l基本配置
· 導(dǎo)入JS
· 生成bodyPixNet對象
ltfjs-models/body-pix與tfjs-models/posenet的混合使用
l結(jié)果
tfjs-models/body-pix與tfjs-models/posenet的混合使用,雖然加大了canvas處理的負擔(dān),加大了描繪和圖像處理的次數(shù),但是由于tfjs-models/body-pix已經(jīng)先將人物與背景剝離,在tfjs-models/posenet只使用用最高效但低準確度的參數(shù)配置下,也能夠產(chǎn)生遠高于使用高精確度但消耗處理性能極大的配置所不能達到的準確度。從而實現(xiàn)了高效,高準確度,流暢的實時單人動作捕捉功能。
結(jié)論
通過TensorFlow的開源庫,能夠輕松的在瀏覽器上通過網(wǎng)絡(luò)攝像頭實現(xiàn)人物動作的實時捕捉。
由于基于圖像分析,因此表現(xiàn)能力極大的依賴于對canvas的描繪性能,移動端由于瀏覽器canvas描繪能力以及硬件性能限制的原因,表現(xiàn)并不出色,無法做到長時間實時捕捉。甚至部分瀏覽器限制了網(wǎng)絡(luò)攝像頭的調(diào)用。在移動端的表現(xiàn)并不出色。
在單一人物的動作捕捉時,tfjs-models/body-pix與tfjs-models/posenet的混合使用能夠使精確度大大提升。
由于需要對canvas進行描繪,結(jié)合其他canvas的JS庫可以進行交互UI,交互小游戲等不同場合APP的開發(fā)。
發(fā)布評論請先 登錄
相關(guān)推薦
評論