說的是一位博主將 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)阉鞴δ堋?/strong> 該程序主要使用 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 上了。 掃碼閱讀全文 獲取源碼 Github 地址 馬上進(jìn)行 AI 換臉實(shí)踐 |
|