1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        技術(shù)解碼 | Web端AR美顏特效技術(shù)實現(xiàn)!

        共 2098字,需瀏覽 5分鐘

         ·

        2022-04-25 01:08


        直播、短視頻、在線會議等應(yīng)用越來越多地進入人們的生活,隨之誕生的是豐富的各類創(chuàng)意玩法與新鮮體驗,其中大量應(yīng)用了以AI檢測和圖形渲染為基礎(chǔ)的AR技術(shù)。

        此類技術(shù)在原生應(yīng)用已經(jīng)十分成熟,而由于Web的功能和性能瓶頸,使得實現(xiàn)Web端上的AI人臉識別與實時渲染成為了一種挑戰(zhàn)。而隨著Web技術(shù)的不斷成熟,AR技術(shù)在Web上的實現(xiàn)成為了一種可能。筆者總結(jié)了在Web端實現(xiàn)此功能的幾個技術(shù)要點,跟大家一起探討一下。


        一、技術(shù)實現(xiàn)


        抽象整體的實現(xiàn)思路如下,使用AI檢測模型檢測輸入幀數(shù)據(jù),獲得人臉的關(guān)鍵點,根據(jù)關(guān)鍵點進行面部的建模,然后進行美顏算法和美妝紋理的渲染。




        (一)數(shù)據(jù)采集


        為了統(tǒng)一輸入格式同時兼容多種媒體格式,采用了MediaStream作為規(guī)定的輸入格式,在Web中可以將視頻、攝像頭、畫布等媒體轉(zhuǎn)成MediaStream作為輸入進行處理。

        在實際的業(yè)務(wù)場景中為了保證清晰度畫面往往比較大,而給模型檢測的畫面過大容易造成不必要的性能損耗,發(fā)送至模型檢測的樣本會被轉(zhuǎn)化成為ImageBitmap,ImageBitmap可以節(jié)省在模型計算中解碼紋理的消耗,在頻繁調(diào)用的視頻場景中可以有效地減少解碼消耗。


        (二)檢測


        檢測性能在Web端一直是一個較大的瓶頸,廣泛使用的TensorFlow.js在Web上有明顯的性能瓶頸,檢測幀率在30FPS左右,主要是由于JS本身存在性能瓶頸。

        隨著WebAssembly的成熟,Web可以加載基于C++的模型,并開啟SIMD指令優(yōu)化,檢測流程控制中加入上一幀的結(jié)果緩存進行綜合推測,結(jié)合GPU進行運算,獲得了更好的計算性能,實際幀率可以達到接近60FPS。




        (三)人臉建模


        在獲取到人臉點位后,針對業(yè)務(wù)需求對點位進行預(yù)處理,按照2D展示的要求進行網(wǎng)格的整合。

        為了支持更多類型的面罩,實際需要的網(wǎng)格要比模型返回的網(wǎng)格外擴一圈,通過擬合算法,在面部輪廓進行擴展。擴展后的臉??梢灾С诸^部范圍包裹式的面具。




        (四)空間定位


        對于頭飾等效果,作為獨立個體附著在頭部及其附近的一塊區(qū)域,跟隨頭部移動而移動,其定位數(shù)據(jù)也是來源于人臉模型檢測的返回。

        在實際的使用場景里,為了保證素材制作流程的直觀和間接,素材是基于一個固定的標(biāo)準(zhǔn)人臉制作的,而渲染到真實的畫面中時,則需要將基于標(biāo)準(zhǔn)素材的位置準(zhǔn)確地映射到大小不一角度各異的人臉中,這里就需要一個定位的轉(zhuǎn)換算法。

        對于定位的算法,有以下幾點要求:


        • 定位準(zhǔn)確。制作時定位在鼻尖部位的素材在渲染時也需要跟隨到人臉的鼻尖部位。


        • 覆蓋全面??梢远ㄎ坏饺四樀娜魏我粋€位置,而不是只能定位在模型返回的有限的關(guān)鍵點上。


        • 易于計算,易于還原。在制作工具中可以根據(jù)素材的絕對位置快速計算一個相對值,并且在終端可以快速地根據(jù)這個值還原出新的位置。


        基于這幾個要求,以及模型返回的數(shù)據(jù)結(jié)果,最終確定了采用三角形坐標(biāo)的方式來進行貼紙的定位。在控制臺-素材制作上實現(xiàn)了此功能,可以直接可視化制作效果并導(dǎo)出。

        實現(xiàn)如下:


        • 確定三角形:在制作工具拖拽貼紙素材時,根據(jù)當(dāng)前點確定包含當(dāng)前點的最小三角形。


        • 計算權(quán)重:根據(jù)點的位置計算到三個頂點的權(quán)重,打包到素材協(xié)議中。


        • 解析:前端sdk在解析該素材時,根據(jù)這個權(quán)重和真實的人臉上對應(yīng)的三角形位置,計算出定位點的坐標(biāo)值。




        (五)美妝合成


        與頭飾貼紙不一樣的是,美妝是貼著面部輪廓,根據(jù)五官分布采樣渲染到網(wǎng)格上的。渲染的時候需要根據(jù)建模完成的人臉網(wǎng)格,就可以通過WebGL shader渲染紋理到網(wǎng)格上。

        美妝效果需要伴隨加深、提亮等效果,帶有白色或深色的修容效果,這類效果在面網(wǎng)和底層畫面之前,需要用到混合模式。

        WebGL自帶混合模式,但經(jīng)過對比后發(fā)現(xiàn)自帶的混合模式與PS這類通用的設(shè)計軟件并不一致,而且差值運算居多,對于美妝的融合來說并不實用。于是選擇使用shader自行實現(xiàn)混合模式。

        思路如下


        • 將底層畫面和上層的美妝圖層各自渲染到WebGl的framebuffer當(dāng)中,這一步的目的是為了將各自的前置操作,例如濾鏡、鏡像、變形等效果與畫面本身融合為最終效果。


        • 使用gl.copyTexImage2D或gl.copyTexSubImage2D將framebuffer中的像素復(fù)制為WebGL紋理,供混合模式的shader后續(xù)讀取。


        • 將上面復(fù)制完成的紋理輸入至混合模式shader,shader讀取上下圖層的像素,代入計算公式并最終輸出。


        混合前
        混合后



        二、最終效果


        ????


        三、快速體驗


        騰訊云視立方·Web美顏特效是適用于Web、小程序端的AR美顏特效解決方案,包含素材制作、素材管理、前端接入等全流程能力,可以快速、高效地與TRTC、快直播業(yè)務(wù)結(jié)合,豐富Web實時視頻應(yīng)用體驗。????


        掃碼體驗

        小程序
        Web端


        目前您可免費申請接入騰訊云視立方·Web美顏特效,點擊文末「閱讀原文」可進入官網(wǎng)獲取詳細體驗接入指南。


        快速上手文檔地址:

        https://cloud.tencent.com/document/product/616/71371


        作者:shirly,騰訊云前端開發(fā)高級工程師)


        ??點擊「閱讀原文」,查看相關(guān)產(chǎn)品文檔~
        瀏覽 46
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            女同互换添久久精品一女同志 | 男女aa免费视频网站 | 日本二区久久 | 热色视频| 特级西西444WWW高清大视频 | 艹逼在线观看 | 成人深夜福利在线 | 女人被添全过程av少妇寂寞 | 免费黄色三级网站 | 少妇玉梅抽搐呻吟 |