(一)獲取人臉數(shù)據(jù)
需要準(zhǔn)備圖片數(shù)據(jù):兩個(gè)不同的人臉经磅,各種表情射众,數(shù)量越多越好,約1萬(wàn)張以上會(huì)有比較好的替換效果述暂。
一般采用的方法是從視頻中截取痹升,操作如下:
首先下載視頻(本例用風(fēng)行播放器下載)。
剪切視頻片段(本例用愛(ài)剪輯)畦韭。
因?yàn)槟康氖菫榱私厝∪四槻刻鄱辏约羟械囊曨l片段很講究。
視頻分辨率要高清(否則截取的人臉像素太低)艺配;片段中目的人臉比較大察郁、突出、最好就是只有他自己一個(gè)人鏡頭特寫的視頻片段转唉。
從視頻中截取圖片(本例用Ffmpeg軟件)皮钠。
此時(shí)得到有目的人臉的一張張圖片。
然后酝掩,需要?jiǎng)h除不需要的圖片(如有非目的人臉的鳞芙,這就是數(shù)據(jù)清洗)。
然后寫幾行代碼檢測(cè)圖片中的人臉并截绕谙骸(利用OpenCV)原朝。
檢測(cè)并截取的人臉(用于輸入到神經(jīng)網(wǎng)絡(luò)中訓(xùn)練提取特征)。
人臉替換的效果非常依賴于這些截取到的人臉圖片的質(zhì)量:
如果截取的人臉包含了過(guò)多的干擾部分镶苞,那么替換效果就很差喳坠。
一直重復(fù)前面的步驟,直到獲取足夠多的人臉(兩個(gè)需要互換的人臉)茂蚓。
然后再寫幾行代碼修改人臉圖片的寬高為統(tǒng)一大小壕鹉,如256x256;
因?yàn)檩斎氲缴窠?jīng)網(wǎng)絡(luò)中訓(xùn)練的圖片寬高需要一致聋涨。
(二)進(jìn)行模型訓(xùn)練
接下來(lái)晾浴,開(kāi)始進(jìn)行漫長(zhǎng)的訓(xùn)練:
一般需要,一萬(wàn)張圖片牍白,訓(xùn)練100萬(wàn)次脊凰,才有比較好的替換效果;
我計(jì)算了一下時(shí)間茂腥,普通i7-PC狸涌,訓(xùn)練一次約44s切省,100萬(wàn)次需要運(yùn)行約1.2萬(wàn)小時(shí),約500天帕胆;玩不起(本例訓(xùn)練了1000次)朝捆。
深度學(xué)習(xí)漫長(zhǎng)的訓(xùn)練過(guò)程;
本例代碼是利用深度學(xué)習(xí)框架keras(backend is TensorFlow)構(gòu)建CNN懒豹;
訓(xùn)練完成之后芙盘,得到換臉模型;
(三)進(jìn)行視頻人臉替換
?接下來(lái)進(jìn)行視頻人臉替換歼捐;
?通俗點(diǎn)說(shuō)就是通過(guò)提取面部的特定結(jié)構(gòu)何陆,如眼睛、鼻子豹储、嘴巴的位置贷盲,顴骨、下巴剥扣、臉頰的形狀丁眼;
?然后按照這些特征點(diǎn)做替換岖沛;
?前面訓(xùn)練的模型斧散,已經(jīng)有了兩個(gè)不同的人臉的特征凭迹;
?就目前了解的信息來(lái)說(shuō),通過(guò)深度學(xué)習(xí)替換人臉這一技術(shù)相對(duì)于工業(yè)使用的人臉表情提取技術(shù)晦炊,優(yōu)勢(shì)是大大降低了使用門檻鞠鲜,但是遠(yuǎn)遠(yuǎn)還做不到以假亂真的完美效果;
接下來(lái)断国,仍然使用愛(ài)剪輯工具贤姆,從一段視頻,如電影中截取用于替換人臉的一個(gè)視頻片段稳衬;
截取的視頻片段也是需要精心挑選的:需要有利于檢測(cè)到被替換的人臉霞捡。
例如,截取的視頻中同時(shí)出現(xiàn)在鏡頭中人臉太多薄疚、人臉太小等都不利于檢測(cè)碧信。
再利用ffmpeg工具,把需要被替換人臉的視頻按原幀速截取成每一張圖片街夭;
注意:一定要按原幀速截取砰碴,否則后面替換人臉后再合成視頻會(huì)失幀。
接下來(lái)板丽,利用神經(jīng)網(wǎng)絡(luò)進(jìn)行人臉替換衣式。
輸入數(shù)據(jù):上一步截取的每一幀圖片;
輸出數(shù)據(jù):人臉被替換后的每一幀圖片檐什;
簡(jiǎn)單點(diǎn)說(shuō)碴卧,替換原理如下:
1.從原圖片中,檢測(cè)到人臉(用OpenCV)乃正,截取人臉部分住册;
2.把截取的人臉部分(人臉圖片)輸入到神經(jīng)網(wǎng)絡(luò)進(jìn)行替換,得到一個(gè)新的人臉(圖片)瓮具;
3.再把新人臉(圖片)替換原圖片中的人臉荧飞;
4.然后,進(jìn)行圖片“消邊”名党、模糊等圖片處理叹阔;因?yàn)樵瓐D人臉和新人臉,雖然尺寸一致传睹,
但畢竟不是同一張圖片耳幢,新圖片(人臉)替換到原圖片之后,會(huì)有明顯的“邊”欧啤,無(wú)法
完全融入到原圖中睛藻,所以需要處理;這是數(shù)字圖像處理技術(shù)了邢隧;
5.如此重復(fù)店印,知道每一張圖片的人都替換完成;
從上面的人臉替換原理可以知道倒慧,換臉效果受到以下幾個(gè)因素的影響:
?1按摘、從原圖片截取的人臉(圖片)不能有過(guò)多的干擾像素。最理想的是截取的僅僅只有面部纫谅。
?2炫贤、訓(xùn)練的模型效果要非常好。這受到訓(xùn)練數(shù)據(jù)(圖片)的質(zhì)量系宜、數(shù)量照激、尺寸大小(越大越好盹牧,但是會(huì)變慢)和訓(xùn)練次數(shù)(時(shí)間)的影響俩垃。
?3、要有很好的數(shù)字圖像處理技術(shù)汰寓。替換人臉后口柳,新臉(圖片)不能很好與原圖背景(人物)融合的處理,包括“消邊”有滑、模糊跃闹、融合等處理。
?4、要有很好的人臉檢測(cè)技術(shù)望艺。因?yàn)镺penCV的人臉檢測(cè)功能準(zhǔn)確率并不是100%的苛秕,所以存在有某些幀(圖片)沒(méi)有檢測(cè)到人臉,那么就不會(huì)替換人臉找默。
(四)合成替換了人臉的視頻
?最后一步:把替換了人臉的每一張圖片(每一幀)按原來(lái)視頻的幀速合成視頻(用ffmpeg工具)艇劫。
?這就是整個(gè)視頻人臉替換的操作和原理。
(五)分析-總結(jié).
?從整個(gè)替換人臉過(guò)程惩激、原理可以知道店煞,最終的效果極大的受到人臉檢測(cè)技術(shù)、圖像處理技術(shù)的影響风钻。
?在理想情況下顷蟀,單從AI替換人臉這個(gè)功能來(lái)說(shuō),有足夠多的骡技、高質(zhì)量的人臉數(shù)據(jù)鸣个,足夠多次的訓(xùn)練,基于深度學(xué)習(xí)的方法替換人臉確實(shí)取得了很不錯(cuò)的效果哮兰,如下圖:
上圖:特朗普基于原表情換成凱奇毛萌;下圖:反之;
?在整個(gè)視頻替換人臉應(yīng)用來(lái)說(shuō)喝滞,除了通過(guò)AI替換人臉之外阁将,還要受到訓(xùn)練數(shù)據(jù)收集、人臉檢測(cè)右遭、后期圖像處理的極大影響做盅,所以仍無(wú)法做到通用、實(shí)用窘哈。
?但是吹榴,也可以知道,如果基于某個(gè)非常必要的目的滚婉,因?yàn)閱渭兊腁I基于原表情換臉的效果還不錯(cuò)图筹,可以花時(shí)間、精力并掌握了圖像處理技術(shù)的話让腹,理論上也是可以特定為某一段視頻換臉的远剩。
(六)寫在最后
?突然發(fā)現(xiàn),通用的視頻換臉項(xiàng)目沒(méi)有做成骇窍,卻做了一個(gè)“視頻打碼器”瓜晤。。腹纳。痢掠。驱犹。。
?在即將寫完本文章的時(shí)候足画,因?yàn)楸救说牟环艞壘裥劬裕l(fā)現(xiàn)了“新大陸”,更新的替換技術(shù)锌云,很有可能會(huì)有更好的替換效果荠医。接下來(lái)馬上進(jìn)行研究,如果更好的效果桑涎,再寫一篇新文章,先定個(gè)題目:視頻換臉原理(進(jìn)階)兼贡。
?最后攻冷,雖然吐槽不是很好的事情,但是偶爾輕微的吐槽一下就當(dāng)是記錄心情了:
?隨著研究這東西越久遍希,越感覺(jué)像蚍蜉撼樹等曼,大量高質(zhì)量的數(shù)據(jù)、強(qiáng)大的算力凿蒜、枯燥的算法禁谦。。废封。州泊。。漂洋。都不好弄啊遥皂。
?三年來(lái),電腦不堪壓力第一次藍(lán)屏了刽漂,太慘了演训。
?完畢。