前幾天,AI 換臉這條新聞你關(guān)注了嗎?
說(shuō)的是一位博主將 1994 年版《射雕英雄傳》里朱茵的臉換成了楊冪的臉。因?yàn)樵?a href="http://www.nxhydt.com/v/" target="_blank">視頻涉及到版權(quán)問(wèn)題已被下架,但大家可以看看圖片對(duì)比來(lái)感受一下“移花接木”效果:
是不是足夠可以以假亂真了!這樣的視頻用一款實(shí)時(shí)視頻仿真軟件Face2Face 就可以達(dá)到,在軟件中輸入一個(gè)說(shuō)話(huà)的人臉?shù)浵瘢ㄟ^(guò)算法生成對(duì)應(yīng)的人臉模型,套用這個(gè)模型就可以創(chuàng)造 DeepFakes。最恐怖的是,這個(gè)逼真的效果看起來(lái)毫無(wú)違和感。
讓我們一起來(lái)看看 AI 換臉背后的原理:
人臉檢測(cè) → 多人臉區(qū)域分別做面部關(guān)鍵點(diǎn)檢測(cè)→面部區(qū)域分割→圖像線(xiàn)性融合
順著這個(gè)思路,我們可以看到 AI 換臉里最重要的一環(huán)就是人臉檢測(cè),要進(jìn)行人臉識(shí)別,得經(jīng)過(guò)這么幾個(gè)過(guò)程:
人臉檢測(cè)→人臉對(duì)齊→提取特征編碼→編碼比對(duì)
人臉檢測(cè):就是定位一張圖片中人臉的位置。
人臉對(duì)齊:就是根據(jù)人臉中五個(gè)特征點(diǎn)位置(兩個(gè)眼睛、兩個(gè)嘴角、鼻子)將人臉縮放到一定的尺寸。
提取特征編碼:通過(guò)訓(xùn)練一個(gè)人臉識(shí)別模型來(lái)提取人臉特征編碼。
編碼比對(duì):將某個(gè)人臉的編碼與編碼庫(kù)中的編碼進(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ǔ)上,我們開(kāi)發(fā)一個(gè) API 程序,程序調(diào)用模型進(jìn)行人臉檢測(cè)、人臉對(duì)齊、生成特征編碼,然后完成人臉入庫(kù)、人臉?biāo)阉鞴δ堋?/p>
該程序主要使用 Flask 來(lái)進(jìn)行 API 開(kāi)發(fā),使用 Annoy 來(lái)進(jìn)行人臉特征向量搜索。在部署上,使用 Docker 容器部署 Python 環(huán)境,讓 API 程序運(yùn)行在 Docker 容器中,使用 Gunicorn 來(lái)啟動(dòng) Flask 程序。
另外,使用 Nginx 部署一個(gè)圖片服務(wù)器,用于前端的圖片展示,也是運(yùn)行在 Docker 容器中。最后,我們?cè)偬峁┮粋€(gè)簡(jiǎn)單 Web 頁(yè)面,該頁(yè)面允許用戶(hù)進(jìn)行入庫(kù)、搜索操作(調(diào)用后端的人臉入庫(kù)、搜索 API )。
最終的 Web 頁(yè)面展示如下:
02
人臉?biāo)阉鲗?shí)現(xiàn)
首先你得有一個(gè) Linux 環(huán)境,可以通過(guò) VMware 構(gòu)建一個(gè) Ubuntu 16.04 的環(huán)境, iso 文件為 ubuntu-16.04.5-desktop-amd64.iso 。
考慮到方便大家照著做,而且大家可能沒(méi)有 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. 編寫(xiě)人臉入庫(kù)、搜索 API 程序
這里我們利用訓(xùn)練好的模型文件,使用 Flask 編寫(xiě)一個(gè)人臉特征編碼入庫(kù)、搜索 API 。我們將入庫(kù)的特征編碼存于程序中的一個(gè)數(shù)組里面。
首先,我們先創(chuàng)建用于圖片入庫(kù)及圖片搜索的目錄。
然后編碼 API 程序,在
/opt/insightface/src/api 創(chuàng)建 app_flask.py 。
代碼詳見(jiàn) Github。
3. 安裝 Docker
安裝軟件,我一般從官網(wǎng)去獲取安裝操作說(shuō)明,讓自己在安裝過(guò)程中少走些彎路。
4. 構(gòu)建 Docker Nginx 圖片服務(wù)器鏡像
我們要做人臉?biāo)阉飨到y(tǒng),在前端頁(yè)面就是要上傳一張圖片,然后點(diǎn)擊“搜索”按鈕,在頁(yè)面上顯示人臉庫(kù)中與該圖片相似度最高的 top6 圖片,所以我們要用到圖片服務(wù)器,使用 url 進(jìn)行圖片展示。
我們首先要?jiǎng)?chuàng)建一個(gè)圖片根目錄。
然后使用 Docker 拉取一個(gè) Nginx 鏡像。
然后我們就可以啟動(dòng)容器了:
通過(guò)瀏覽器訪(fǎng)問(wèn) http://192.168.247.128:8082/
5. 構(gòu)建 Docker Insightface 鏡像
我們從一個(gè)基礎(chǔ)鏡像 python:3.5 來(lái)構(gòu)建我們的 Insightface 鏡像
然后我們使用 Dockerfile 來(lái)構(gòu)建 Insightface 鏡像,主要是進(jìn)行 Python 庫(kù)環(huán)境的安裝,比如 Tensorflow、Mxnet 。
最后,讓我們連續(xù)入庫(kù) 5 張梁靜茹和 1 張陳慧嫻的照片,然后用第 6 張梁靜茹的照片來(lái)搜索,效果圖如下:
最后,以上并非完整全文,提示大家如果有 Gpu 環(huán)境的話(huà),可以使用 Gpu 來(lái)進(jìn)行模型推理,以上操作我均使用 root 用戶(hù)。本文所提到的代碼都上傳到我的 Github 上了。
Chat:手把手教你做人臉?biāo)阉飨到y(tǒng)
-
gpu
+關(guān)注
關(guān)注
28文章
4700瀏覽量
128697 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9018瀏覽量
85182 -
AI
+關(guān)注
關(guān)注
87文章
30107瀏覽量
268401
原文標(biāo)題:這個(gè)技術(shù)讓我毛骨悚然后背發(fā)涼!
文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論