BeLive Tutorial: How to Share Images on Your Facebook Live Show
leiphone 涂图
本文來自塗圖CTO在架構師沙龍上的演講整理,本篇主要談談美顏技術,在直播中的使用。
2016年作為影像直播元年,無論從資本層面不斷高漲的估值,到平台主播各種天文數字的報酬,再到像「局座」這樣的主流人士爭相上直播,直播的社會熱度可見一斑。
而各大直播平台,在經歷了直播概念從無到有的階段後,如何做出差異化,如何解決在野蠻生長期產生的各種涉黃問題,成為了幾乎所有平台「成長的煩惱」。拋開政策、內容問題不說,單就技術層面,基於圖像技術的創新,成為解決這些難題最為可行的辦法。作為 Tu 料的首個分享,我們首先就選擇了直播這個熱門話題,就圖像技術在直播中的應用,做一個入門的介紹。
該分享系列整理自塗圖 CTO 在架構師沙龍上的演講內容。
一、技術框架
愛美之心,人皆有之。早期的圖片美顏教育了市場,到了直播時代,美顏同樣成為直播平台的標配。就目前來說,直播美顏用的主流技術是 OpenGL ES。
它的好處,首先是直接在 GPU 上運行的,所以性能高、功耗小,用在直播上比較划算。
第二,它是跨平台的,iOS和安卓都支持,美顏效果能夠直接在這兩個平台上,達到跨平台的效果。另外 OpenGL ES 有一個優勢,就是有大量現成的開源庫。比如像 GPUImage,谷歌的grafika,還有基於安卓的一些具有實踐意義的庫,都是很常用的。
網上也有一些比較熱心的開發者,把自己的美顏的算法直接開源,包括一整套解決方案,從採集到處理到美顏處理,到最後輸出一個源編碼,都有相關的解決方案。
二、美顏原理—混合不能少
市面上大部分美顏產品的一般原理,都是相似的。攝影機採集畫面,透過一定的方式處理,最後輸出一張美顏後的圖片。
具體的說,原圖首先經過磨皮處理,也就是把痘、斑這些消除掉。然後把經過磨皮的圖片與原圖進行混合。混合這個步驟是不可缺少的,因為如果只用磨皮後的圖,很容易丟失細節。
而且把兩張圖混合,還可以透過調整兩個圖的混合權重,來控制磨皮的程度,達成不同級別的磨皮效果。當然最後一步也很關鍵,就是美膚,比如把皮膚膚色調得白一點、紅嫩一點,或者一些特殊的需求,都可以實現。基本上大部分的美顏,都是這樣的流程。
三、磨皮算法——去痘就是降噪
本質上說,一張圖就是一個二維的數據。如果相臨的兩個區域灰度值相差比較大,這就意味著存在著噪點。比如臉上有個痘,這個痘自然產生一個灰度值的變化,從抽象意義上說,就是一個噪點。所以美顏磨皮的算法,核心是去噪。
去噪有很多的辦法,網上有各種各樣的算法,包括現成的論文。但是不管產用什麼算法,美顏的去噪算法,都要保持一個特點,那就既要是邊界保持,同時還要做到平滑,也就是要濾波。
濾波算法中比較常見的是雙邊濾波,它的優點在於很高效,因此非常適合移動平台。還有一些其他的算法比較複雜一點,也可以達到那樣的效果,但是在移動應用上效率不高。
雖然 GPU 是並行運算的,很適合這種運算,但 GPU 的能力是有一定範圍的,超過這個範圍也很耗電。
包括雙邊濾波在內,一種濾波算法也有各種各樣實現,考慮在行動平台上運行,可以做一下特別的優化,比如在精度計算裡,適當降低精度,達到效果與效率的平衡。
四、膚色調整——檢測才是難題
在做好磨皮後,最後一個流程就是膚色調整。調整膚色本身的手法已經非常成熟,所以更難的其實在於膚色檢測。
為什麼要做膚色檢測?有些早期的直播,美顏是沒有這個功能的,所以他們就是以美化的膚色為基礎,簡單粗暴的把整個圖像按這個色彩全部處理掉了,這就造成了整體偏色,效果還不如不做。
因此,在處理圖像前,必須先進行膚色檢測,在圖像的所有像素點中,找到對應膚色範圍的像素再進行處理。
直播中的膚色檢測特殊的地方,在於顏色空間的轉換。因為跟圖像處理相關的顏色空間,主要有三種:RGB、YUV、HSV,而這三種色彩空間在直播中都要用到。
RGB 是最常見的色彩空間,我們日常用的顯示設備,就是基於 RGB 空間,這裡不多解釋。
YUV 是一種比較傳統的顏色空間,最早是應用在電視信號的傳播裡面的,目前多用在直播的數據採樣、傳輸的過程。這是因為人眼對亮度(Y)遠比色度(U、V)更敏感,所以 YUV 比起 RGB 更容易被壓縮,這樣就更容易節省頻寬進行傳輸。
而基於 HSV 顏色空間,才是用來做膚色檢測的。因為如果用 RGB 來做膚色檢測,需要檢測 R、G、B 三個值是否同時滿足膚色的顏色範圍,YUV 同理。而 HSV 三個值:色調(H)、飽和度(S),明度(V)中,只有 H 是關乎膚色的,因此只需要對 H 進行考慮( H 值在 25-50 之間即可判斷為膚色),所需要的運算量,自然比 RGB 少很多。
所以,在直播的不同階段,要分別使用這三種色彩空間,要不停的把這三種色彩空間進行相互轉換。
沒有留言:
張貼留言