本文來自花椒直播海外技術(shù)負(fù)責(zé)人唐賡在LiveVideoStackCon 2017上的分享,并由LiveVideoStack整理而成,在分享中唐賡詳細(xì)介紹了直播的基本組成部分以及ARKit、3D引擎、深度學(xué)習(xí)等技術(shù)在直播場(chǎng)景下的應(yīng)用。
大家好,我是唐賡,現(xiàn)就職于花椒直播。主要負(fù)責(zé)iOS和一些新技術(shù)的應(yīng)用。本次的分享內(nèi)容主要是介紹一下我們包括個(gè)人對(duì)直播這項(xiàng)新技術(shù)應(yīng)用的一些看法。
1. 直播的基本組成部分
直播行業(yè)大約是在2015開始火起來,由于是剛起步,所以整個(gè)直播行業(yè)不是特別成熟。在早期時(shí)甚至?xí)霈F(xiàn)音畫不同步等一些基礎(chǔ)的問題。之后也做了很多的工作,比如直播視頻秒開的優(yōu)化,包括網(wǎng)絡(luò)自適應(yīng)、碼率自適應(yīng)、分辨率以及幀率的自適應(yīng)。對(duì)于碼率自適應(yīng),在點(diǎn)播的場(chǎng)景下,服務(wù)器會(huì)事先準(zhǔn)備幾段不同碼率的視頻,觀眾根據(jù)不同的需要、網(wǎng)絡(luò)狀況從服務(wù)器上拉取不同的碼流。但是在直播的場(chǎng)景下,網(wǎng)絡(luò)自適應(yīng)更多的是發(fā)生在主播端,比如當(dāng)主播的網(wǎng)絡(luò)不太好時(shí),我們就會(huì)根據(jù)上行的碼流情況來實(shí)時(shí)的進(jìn)行調(diào)整,包括調(diào)整視頻的分辨率、碼率、幀率。然后對(duì)于超大型的聊天室或者一些直播網(wǎng)站,就要求每個(gè)直播間能夠承受百萬量級(jí)并發(fā)的在線用戶,包括私信、群組,這都是我們過去已經(jīng)做過的一些優(yōu)化工作。
隨著直播行業(yè)的發(fā)展,單向的直播已經(jīng)沒有什么新意了,現(xiàn)在大家開始關(guān)注連麥、一對(duì)一的單聊、群聊等。這些功能在我們的APP中都已經(jīng)實(shí)現(xiàn)了,包括上層的展現(xiàn),比如美顏、濾鏡、瘦臉、大眼、人臉識(shí)別貼紙、3D頭盔等等。我們?cè)?015年5月份左右起步做直播,這些都是我們?cè)谶@兩年里做過的一些事情,目前這些功能已經(jīng)逐漸成為直播APP的標(biāo)配,那么下一步該如何去做?在我個(gè)人認(rèn)為至少可以關(guān)注以下方面,如Augment Reality,Computer Graphics、Computer Vision以及Machine Learning.,接下來將分別給大家介紹一下這四個(gè)方面。
2. Augment Reality
首先是人臉識(shí)別技術(shù),從2016年開始已經(jīng)初步實(shí)現(xiàn),而我們可以說是第一個(gè)把這項(xiàng)技術(shù)應(yīng)用到直播場(chǎng)景中的。2016年初,我們發(fā)現(xiàn)手機(jī)上實(shí)時(shí)的人臉識(shí)別非常消耗CPU內(nèi)存,因此就可能導(dǎo)致直播卡頓,無法播放。為了解決這個(gè)問題,我們當(dāng)時(shí)進(jìn)行了非常多的優(yōu)化,比如,最先在有限的手機(jī)資源之上實(shí)現(xiàn)了實(shí)時(shí)的人臉貼紙功能。但當(dāng)時(shí)人臉識(shí)別的SDK普遍的CPU消耗都在50%以上,甚至蘋果自己提供的人臉識(shí)別的消耗都在80%以上,而且抖動(dòng)非常厲害。到了2017年,在不斷的優(yōu)化之后,人臉識(shí)別在手機(jī)上的應(yīng)用就非常成熟了。
現(xiàn)在基于ARKit、ARCore、SenseAR或者是基于IMU都可以實(shí)現(xiàn)很多玩法,比如利用AI/AR可以實(shí)現(xiàn)手勢(shì)識(shí)別與真實(shí)場(chǎng)景的結(jié)合。那么AR可以怎么利用呢?從一些小視頻可以看到,拍攝者與表演者以及一些動(dòng)畫效果要配合的很好才能實(shí)現(xiàn)AR特效,但是這些都是假的AR,而我們用AR技術(shù)就完全可以把這些做成真的。另外,基于AR在直播間里的視頻上面展現(xiàn)一些廣告或者好玩的東西,這實(shí)際也是比較經(jīng)典的AR應(yīng)用。
3. Computer Fraphics
AR可以反饋一些基本場(chǎng)景的認(rèn)知信息,包括平面在哪里,墻在哪里等。那么如何在上面疊加這些場(chǎng)景,這就需要基于圖形學(xué)的一些技術(shù)。最常見的就是基于OpenGL/Metal提供的一些API去實(shí)現(xiàn),當(dāng)然也有利用像Unity、Unreal之類相對(duì)成熟的引擎,包括蘋果提供的SceneKit 3D引擎。另外就是利用一些開源的引擎,比如Cocos2d-x、Crystal Space、Blender Game Engine,它們的功能也都比較強(qiáng)。像Cocos2DX目前已經(jīng)發(fā)展出比較強(qiáng)的3D能力,它能夠展現(xiàn)骨骼動(dòng)畫以及一些比較復(fù)雜的光影效果。如果能力足夠也可以開發(fā)自制引擎,據(jù)我所知,國(guó)內(nèi)的很多游戲廠商比如騰訊、暢游、搜狐,他們用的都是自己研發(fā)的強(qiáng)大引擎。
4. Computer Vision
直播行業(yè)目前對(duì)計(jì)算機(jī)視覺的依賴也變得非常的強(qiáng)烈。計(jì)算機(jī)視覺的開源實(shí)現(xiàn)主要體現(xiàn)在兩個(gè)開源庫(kù),分別是OpenCV和Dlib。OpenCV是由Intel發(fā)布的一個(gè)非常強(qiáng)大的視覺庫(kù)。包括實(shí)時(shí)計(jì)算機(jī)視覺、機(jī)器學(xué)習(xí),包括一些圖像處理、分析等基本都離不開它,而且它的代碼實(shí)現(xiàn)非常的簡(jiǎn)單快速。Dlib的使用非常方便,而且它自帶了它所依賴的一些東西,包括網(wǎng)絡(luò)、線程、GUI、各種各樣的線性代數(shù)、機(jī)器學(xué)習(xí)、圖像處理等各種模塊。它最大的一個(gè)優(yōu)勢(shì)是自帶強(qiáng)大的人臉識(shí)別引擎。接下來可以看一下基于OpenCV和Dlib實(shí)現(xiàn)的一些功能。
A.人臉朝向識(shí)別
從上面這幅圖可以看到,根據(jù)Dlib給出的人臉關(guān)鍵點(diǎn)坐標(biāo)信息,計(jì)算出了人臉的朝向,人臉前面的這根紅線就是顯示出了人臉的朝向?;谌四橁P(guān)鍵點(diǎn)坐標(biāo)、朝向信息,就可以實(shí)現(xiàn)比較炫酷的3D頭盔功能,此處例子的實(shí)現(xiàn)目前在網(wǎng)上有開源的代碼可以進(jìn)行參考。
B.精確估算手勢(shì)位置和姿勢(shì)
從上圖可以看到,在直播中可以精確的估算主播的手指頭的位置以及姿勢(shì),主播可以利用這種技術(shù)完成很多有趣的交互。
目前,在PC上已經(jīng)可以實(shí)現(xiàn)對(duì)于一個(gè)場(chǎng)景中多個(gè)人的復(fù)雜的肢體運(yùn)動(dòng)的實(shí)時(shí)識(shí)別。但是面臨的一個(gè)非常大的挑戰(zhàn)是如何將這個(gè)能力內(nèi)嵌到手機(jī)APP中,如果能夠做到這一點(diǎn),那么就可以把主播跳舞之類的身體動(dòng)作實(shí)時(shí)截取出來并與動(dòng)畫人偶相結(jié)合,會(huì)使得整個(gè)直播間顯得非常生動(dòng)。
5. Machine Learning
接下來簡(jiǎn)單介紹一下機(jī)器學(xué)習(xí)。機(jī)器學(xué)習(xí)在直播中已經(jīng)有了很多的運(yùn)用,比如人臉識(shí)別、物體識(shí)別、手勢(shì)識(shí)別、背景分割摳像等,再進(jìn)一步的運(yùn)用就是實(shí)時(shí)翻譯、跨語(yǔ)種連麥、畫質(zhì)改進(jìn)以及自動(dòng)生成主播漫畫人偶。
機(jī)器學(xué)習(xí)的運(yùn)用除了此前介紹到的一些前臺(tái)功能,還具有后臺(tái)功能,包括實(shí)時(shí)判斷主播的性別年齡、顏值才藝類型、識(shí)別場(chǎng)景、口才打分、人氣等。
下面幾頁(yè)P(yáng)PT簡(jiǎn)單介紹一下深度學(xué)習(xí)的一些入門知識(shí)。上面展現(xiàn)的是Google的一個(gè)Neural Network Playground ,在playground.tensorflow.org上可以看到,可以嘗試設(shè)計(jì)自己的神經(jīng)網(wǎng)絡(luò),了解深度學(xué)習(xí)的過程。(DEMO)。實(shí)際上深度學(xué)習(xí)就是在不斷地調(diào)整它的超參數(shù),增加深度學(xué)習(xí)的深度以及細(xì)胞的數(shù)量?,F(xiàn)在所謂的深度學(xué)習(xí)的研究實(shí)際上就是用各種各樣的排列組合來找出一種網(wǎng)絡(luò)結(jié)構(gòu)能夠更適合的解決某一類問題。
上面列出了各種開源的網(wǎng)絡(luò)結(jié)構(gòu),它們都是由各種學(xué)術(shù)機(jī)構(gòu)花了很多的時(shí)間精力找出的比較適合解決某些問題的網(wǎng)絡(luò)結(jié)構(gòu)。當(dāng)網(wǎng)絡(luò)結(jié)構(gòu)越復(fù)雜時(shí),訓(xùn)練模型的時(shí)間就越久。
這是一個(gè)簡(jiǎn)單的深度學(xué)習(xí)的例子,其中高亮的幾行是對(duì)網(wǎng)絡(luò)結(jié)構(gòu)的描述。它使用Keras/TensorFlow訓(xùn)練模型,在進(jìn)行了一千次迭代之后,誤差就降到了千分之四,我們就可以認(rèn)為訓(xùn)練出來的模型已經(jīng)學(xué)會(huì)了異或運(yùn)算法則。
前面例子中訓(xùn)練出來的模型可以直接放在CoreML中使用,運(yùn)行出來的結(jié)果可以在上圖中的輸出看到,所以說CoreML開發(fā)過程是非常簡(jiǎn)單快速的。
上面這個(gè)例子也是實(shí)現(xiàn)判斷異或功能,但是它沒有依賴任何框架,只是利用了一個(gè)最基本的數(shù)學(xué)運(yùn)算庫(kù),這個(gè)例子可以看到深度學(xué)習(xí)核心算法的工作原理,右邊是訓(xùn)練跑出來的結(jié)果,可以看到最終得到的結(jié)果跟前面的一樣。所以深度學(xué)習(xí)就是這么簡(jiǎn)單暴力。
綜上所述,有這么多的技術(shù)等著我們?nèi)グ阉诺街辈ブ惺褂茫矣X得后面的前景還是非常廣闊的,我們還有很多事情要去做。
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121111 -
arkit
+關(guān)注
關(guān)注
0文章
23瀏覽量
11276
原文標(biāo)題:從CV到ML 直播場(chǎng)景下新技術(shù)的應(yīng)用
文章出處:【微信號(hào):livevideostack,微信公眾號(hào):LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論