前幾天,AI 換臉這條新聞你關(guān)注了嗎?
說的是一位博主將 1994 年版《射雕英雄傳》里朱茵的臉換成了楊冪的臉。因?yàn)樵撘曨l涉及到版權(quán)問題已被下架,但大家可以看看圖片對(duì)比來感受一下“移花接木”效果:
是不是足夠可以以假亂真了!這樣的視頻用一款實(shí)時(shí)視頻仿真軟件Face2Face 就可以達(dá)到,在軟件中輸入一個(gè)說話的人臉錄像,通過算法生成對(duì)應(yīng)的人臉模型,套用這個(gè)模型就可以創(chuàng)造 DeepFakes。最恐怖的是,這個(gè)逼真的效果看起來毫無違和感。
讓我們一起來看看 AI 換臉背后的原理:
人臉檢測(cè) → 多人臉區(qū)域分別做面部關(guān)鍵點(diǎn)檢測(cè)→面部區(qū)域分割→圖像線性融合
順著這個(gè)思路,我們可以看到 AI 換臉里最重要的一環(huán)就是人臉檢測(cè),要進(jìn)行人臉識(shí)別,得經(jīng)過這么幾個(gè)過程:
人臉檢測(cè)→人臉對(duì)齊→提取特征編碼→編碼比對(duì)
人臉檢測(cè):就是定位一張圖片中人臉的位置。
人臉對(duì)齊:就是根據(jù)人臉中五個(gè)特征點(diǎn)位置(兩個(gè)眼睛、兩個(gè)嘴角、鼻子)將人臉縮放到一定的尺寸。
提取特征編碼:通過訓(xùn)練一個(gè)人臉識(shí)別模型來提取人臉特征編碼。
編碼比對(duì):將某個(gè)人臉的編碼與編碼庫中的編碼進(jìn)行對(duì)比,得出距離或相似度。
01
實(shí)現(xiàn) AI 換臉的第一步
以下關(guān)于人臉檢測(cè)、人臉對(duì)齊均使用基于 Tensorflow 的 MTCNN 模型,生成特征編碼使用基于 Mxnet 的 Insightface 模型。
圖為人臉?biāo)阉髡w架構(gòu)設(shè)計(jì):
首先,我們會(huì)下載 Insightface 源碼及其訓(xùn)練好的模型文件,在這個(gè)源碼的基礎(chǔ)上,我們開發(fā)一個(gè) API 程序,程序調(diào)用模型進(jìn)行人臉檢測(cè)、人臉對(duì)齊、生成特征編碼,然后完成人臉入庫、人臉?biāo)阉鞴δ堋?/p>
該程序主要使用 Flask 來進(jìn)行 API 開發(fā),使用 Annoy 來進(jìn)行人臉特征向量搜索。在部署上,使用 Docker 容器部署 Python 環(huán)境,讓 API 程序運(yùn)行在 Docker 容器中,使用 Gunicorn 來啟動(dòng) Flask 程序。
另外,使用 Nginx 部署一個(gè)圖片服務(wù)器,用于前端的圖片展示,也是運(yùn)行在 Docker 容器中。最后,我們?cè)偬峁┮粋€(gè)簡(jiǎn)單 Web 頁面,該頁面允許用戶進(jìn)行入庫、搜索操作(調(diào)用后端的人臉入庫、搜索 API )。
最終的 Web 頁面展示如下:
02
人臉?biāo)阉鲗?shí)現(xiàn)
首先你得有一個(gè) Linux 環(huán)境,可以通過 VMware 構(gòu)建一個(gè) Ubuntu 16.04 的環(huán)境, iso 文件為 ubuntu-16.04.5-desktop-amd64.iso 。
考慮到方便大家照著做,而且大家可能沒有 GPU 環(huán)境,所以以下構(gòu)建環(huán)境我均使用 CPU 。
1. 克隆項(xiàng)目并修改相關(guān)源碼
將 /opt/insightface/src/api/face_model 第 61 行
改為
將第 34 行
改為:
下載作者訓(xùn)練好的模型文件。
將模型文件解壓至 /opt/insightface/models ,目錄結(jié)構(gòu)如下:
2. 編寫人臉入庫、搜索 API 程序
這里我們利用訓(xùn)練好的模型文件,使用 Flask 編寫一個(gè)人臉特征編碼入庫、搜索 API 。我們將入庫的特征編碼存于程序中的一個(gè)數(shù)組里面。
首先,我們先創(chuàng)建用于圖片入庫及圖片搜索的目錄。
然后編碼 API 程序,在
/opt/insightface/src/api 創(chuàng)建 app_flask.py 。
代碼詳見 Github。
3. 安裝 Docker
安裝軟件,我一般從官網(wǎng)去獲取安裝操作說明,讓自己在安裝過程中少走些彎路。
4. 構(gòu)建 Docker Nginx 圖片服務(wù)器鏡像
我們要做人臉?biāo)阉飨到y(tǒng),在前端頁面就是要上傳一張圖片,然后點(diǎn)擊“搜索”按鈕,在頁面上顯示人臉庫中與該圖片相似度最高的 top6 圖片,所以我們要用到圖片服務(wù)器,使用 url 進(jìn)行圖片展示。
我們首先要?jiǎng)?chuàng)建一個(gè)圖片根目錄。
然后使用 Docker 拉取一個(gè) Nginx 鏡像。
然后我們就可以啟動(dòng)容器了:
通過瀏覽器訪問 http://192.168.247.128:8082/

5. 構(gòu)建 Docker Insightface 鏡像
我們從一個(gè)基礎(chǔ)鏡像 python:3.5 來構(gòu)建我們的 Insightface 鏡像
然后我們使用 Dockerfile 來構(gòu)建 Insightface 鏡像,主要是進(jìn)行 Python 庫環(huán)境的安裝,比如 Tensorflow、Mxnet 。
最后,讓我們連續(xù)入庫 5 張梁靜茹和 1 張陳慧嫻的照片,然后用第 6 張梁靜茹的照片來搜索,效果圖如下:
最后,以上并非完整全文,提示大家如果有 Gpu 環(huán)境的話,可以使用 Gpu 來進(jìn)行模型推理,以上操作我均使用 root 用戶。本文所提到的代碼都上傳到我的 Github 上了。
Chat:手把手教你做人臉?biāo)阉飨到y(tǒng)
-
gpu
+關(guān)注
關(guān)注
28文章
5194瀏覽量
135486 -
服務(wù)器
+關(guān)注
關(guān)注
14文章
10253瀏覽量
91502 -
AI
+關(guān)注
關(guān)注
91文章
39793瀏覽量
301454
原文標(biāo)題:這個(gè)技術(shù)讓我毛骨悚然后背發(fā)涼!
文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
主流顯卡GTX 1060長(zhǎng)啥樣,一起來看看拆解圖!
VS1053 Hifi Player 資料共享 讓我們一起打造完美聽覺感受
C語言可以實(shí)現(xiàn)微妙級(jí)的延時(shí),大家一起來看看這段代碼
Molex莫仕就“未來汽車”發(fā)布全球汽車調(diào)研結(jié)果,一起來看看都有什么內(nèi)容吧??!
中興V5手機(jī)配置如何?我們一起來看看吧!
VR讓我們更容易實(shí)現(xiàn)超級(jí)記憶力呢?
AI換臉技術(shù)背后的問題
如何利用土壤采樣器如何提取土壤溶液,一起來看看
走進(jìn)奇瑞汽車 一起來看看虹科風(fēng)采
一起來看看ODF配線架光纖怎么進(jìn)線-科蘭
讓我們一起來看看AI換臉背后的原理
評(píng)論