人脸识别库-于仕琪老师库地址
https://github.com/ShiqiYu
?
=================================================
知乎關(guān)于人臉識(shí)別實(shí)時(shí)濾鏡討論:
映客直播中 人臉特效是基于人臉識(shí)別還是AR?有什么可以使用的SDK么?
在直播中可以添加這樣的特效,可以準(zhǔn)確的識(shí)別人臉器官的位置,即使頭部扭動(dòng)也可有相應(yīng)的角度上的自適應(yīng),這個(gè)有什么來(lái)源的sdk可以研究接入么,這個(gè)屬于人臉識(shí)別還是AR呢? --------------------------- 作者:匿名用戶
鏈接:https://www.zhihu.com/question/52892092/answer/205076802
來(lái)源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
本人來(lái)說(shuō)說(shuō)該這是如何實(shí)現(xiàn)的吧。關(guān)鍵字:人臉檢測(cè)+圖片 + opengles。
我來(lái)說(shuō)說(shuō)Android上面是如何實(shí)現(xiàn)的吧。通過(guò)Camera接口獲取預(yù)覽數(shù)據(jù),然后將圖像所在的Surface綁定到opengles 的EGLSurface中,opengles通過(guò)從Surface中讀取EXTERNAL_OES類型的紋理Texture到幀緩沖區(qū)Framebuffer中(即將相機(jī)的圖像幀讀入FBO中),然后就是通過(guò)opengles將png 或者其他格式的圖片貼紙讀入生成相應(yīng)的紋理Texture。有了貼紙的Texture,接下來(lái)就是將貼紙繪制到幀緩沖區(qū)Framebuffer中。繪制完成,通過(guò)eglSwapBuffers將EGLSurface中渲染完成的幀交換顯示到前臺(tái),這就是問(wèn)題中所貼出來(lái)的預(yù)覽界面。
上面流程幾乎所有有貼紙?zhí)匦У南鄼C(jī)、直播推流端等應(yīng)用都基本走的流程,不管是不是用ffmpeg做推流,特效這塊,基本上都需要接入opengles來(lái)做渲染,一方面是減少CPU使用,降低能耗,降低發(fā)熱量,另一方面是渲染速度,gpu專門(mén)做渲染這一塊的,在實(shí)時(shí)渲染方面,CPU軟實(shí)時(shí)渲染的效率是完全不夠的。這個(gè)過(guò)程需要什么支撐?那就是人臉檢測(cè)技術(shù),我將貼紙紋理渲染到預(yù)覽幀中,需要拿到準(zhǔn)確的人臉關(guān)鍵點(diǎn),這個(gè)是必須的。人臉檢測(cè)基本上都是用opencv來(lái)檢測(cè)的,也有第三方的SDK可以接入,比如Face++,美顏相機(jī)等存在貼紙?zhí)匦У膽?yīng)用幾乎都在用這個(gè),可以免費(fèi)試用,自己從頭開(kāi)發(fā)的話,準(zhǔn)確率和檢測(cè)時(shí)間是個(gè)大問(wèn)題,人臉關(guān)鍵字檢測(cè)的算法比較成熟了,但傳統(tǒng)的算法跑在手機(jī)上還是做一些調(diào)整的,尤其是這種實(shí)時(shí)渲染的,得至少控制在一幀(16ms)內(nèi),因?yàn)槌藱z測(cè),我們還需要做其他的渲染,比如美顏、美白、磨皮、瘦臉等,哪怕是用opengles來(lái)做,也是勉強(qiáng)夠用而已。舉個(gè)例子,美顏相機(jī)的貼紙相機(jī),在1080P分辨率的手機(jī)上,默認(rèn)Texture 的大小也僅僅是480 x 864(存在虛擬鍵)、540 x 960(不存在虛擬鍵),也就是說(shuō),預(yù)覽幀的分辨率是這么大的,而不是屏幕的1080P(目前市面上的美顏類相機(jī),預(yù)覽幀(Camera PreviewSize)幾乎沒(méi)有達(dá)到1080P的,都是渲染完成后在放大的。除了美顏相機(jī), Camera360的預(yù)覽texture是764 x 1024, 全屏是720 x 1280,但顯示則是1080 x 1440、1080 x 1920,各家的相機(jī)流程差不多,渲染方案的話有單FBO 和多FBO兩種,Camera360 就是單一FBO渲染的,美顏相機(jī)則是多FBO渲染的)。渲染完成后再放大顯示到屏幕上的,因?yàn)槊李佅鄼C(jī)處理做貼紙,還做了實(shí)時(shí)美顏、磨皮、美白、瘦臉、瘦下巴、放大眼睛等操作,這些操作都是非常耗時(shí)的,哪怕是這樣,美顏相機(jī)在紅米Note2 上渲染出來(lái)的實(shí)時(shí)預(yù)覽幀率也只面前到20幀,Nexus 5X 實(shí)時(shí)預(yù)覽幀率大約23幀左右。大部分手機(jī)的預(yù)覽幀率最大支持值在30fps左右,能夠拿來(lái)做渲染的時(shí)間還是非常不足的。
那么有沒(méi)有相關(guān)的開(kāi)源項(xiàng)目呢?有的,比如比較出名的相機(jī)項(xiàng)目MagicCamera就是其中一個(gè),github地址: wuhaoyu1990/MagicCamera 你可以參考下。貼紙跟濾鏡的渲染過(guò)程是一樣的,其中多了個(gè)人臉關(guān)鍵點(diǎn)檢測(cè),也就是說(shuō),在用opengles繪制貼紙之前,需要做相關(guān)的定位、貼紙的三維位置調(diào)整,比如人臉朝向,貼紙要跟著人臉朝向繪制,否則方向是不對(duì)的。人臉朝向的話,也有專門(mén)的算法,但是如果要做到實(shí)時(shí)渲染,那么在人臉檢測(cè)之后再做人臉朝向的話,效率就太低了,這里面可以用檢測(cè)的關(guān)鍵點(diǎn)簡(jiǎn)單結(jié)算得到朝向的,比如簡(jiǎn)單地用人的眼睛位置,通過(guò)Math.atan2(distX, distY),通過(guò)眼睛中心點(diǎn)的距離(distX, distY)算方位角,雖然準(zhǔn)確率不夠,而且考慮的因素也不全,但在實(shí)時(shí)渲染預(yù)覽情況下也沒(méi)有更好的辦法,因?yàn)槟闶紫鹊帽WC預(yù)覽的幀率。得到人臉朝向的方位角后,我們就可以拿著這個(gè)方位角對(duì)貼紙的位置繞Y軸旋轉(zhuǎn),通過(guò)對(duì)投影矩陣旋轉(zhuǎn)得到三維物體在二維平面上的坐標(biāo)位置,再對(duì)貼紙進(jìn)行渲染。這樣就能夠做到立體感的貼紙了。
基本上做完上面的一些處理,
================================ https://www.zhihu.com/question/52892092總結(jié)
以上是生活随笔為你收集整理的人脸识别库-于仕琪老师库地址的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BMP位图之8位位图(三)
- 下一篇: 用三张图理解深度学习的工作原理