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