是不是足夠可以以假亂真了!這樣的視頻用一款實時視頻仿真軟件 Face2Face 就可以達到,在軟件中輸入一個說話的人臉錄像,通過算法生成對應的人臉模型,套用這個模型就可以創(chuàng)造 DeepFakes。最恐怖的是,這個逼真的效果看起來毫無違和感。
讓我們一起來看看 AI 換臉背后的原理:
人臉檢測 → 多人臉區(qū)域分別做面部關(guān)鍵點檢測 → 面部區(qū)域分割 → 圖像線性融合
順著這個思路,我們可以看到 AI 換臉里最重要的一環(huán)就是人臉檢測,要進行人臉識別,得經(jīng)過這么幾個過程:
人臉檢測 → 人臉對齊 → 提取特征編碼 → 編碼比對
人臉檢測:就是定位一張圖片中人臉的位置。
人臉對齊:就是根據(jù)人臉中五個特征點位置(兩個眼睛、兩個嘴角、鼻子)將人臉縮放到一定的尺寸。
提取特征編碼:通過訓練一個人臉識別模型來提取人臉特征編碼。
編碼比對:將某個人臉的編碼與編碼庫中的編碼進行對比,得出距離或相似度。
01
實現(xiàn) AI 換臉的第一步
以下關(guān)于人臉檢測、人臉對齊均使用基于 Tensorflow 的 MTCNN 模型,生成特征編碼使用基于 Mxnet 的 Insightface 模型。
圖為人臉搜索整體架構(gòu)設計:
首先,我們會下載 Insightface 源碼及其訓練好的模型文件,在這個源碼的基礎(chǔ)上,我們開發(fā)一個 API 程序,程序調(diào)用模型進行人臉檢測、人臉對齊、生成特征編碼,然后完成人臉入庫、人臉搜索功能。
該程序主要使用 Flask 來進行 API 開發(fā),使用 Annoy 來進行人臉特征向量搜索。在部署上,使用 Docker 容器部署 Python 環(huán)境,讓 API 程序運行在 Docker 容器中,使用 Gunicorn 來啟動 Flask 程序。
另外,使用 Nginx 部署一個圖片服務器,用于前端的圖片展示,也是運行在 Docker 容器中。最后,我們再提供一個簡單 Web 頁面,該頁面允許用戶進行入庫、搜索操作(調(diào)用后端的人臉入庫、搜索 API )。
最終的 Web 頁面展示如下:
02
人臉搜索實現(xiàn)
首先你得有一個 Linux 環(huán)境,可以通過 VMware 構(gòu)建一個 Ubuntu 16.04 的環(huán)境, iso 文件為 ubuntu-16.04.5-desktop-amd64.iso 。
考慮到方便大家照著做,而且大家可能沒有 GPU 環(huán)境,所以以下構(gòu)建環(huán)境我均使用 CPU 。
將 /opt/insightface/src/api/face_model 第 61 行
改為
將第 34 行
改為:
下載作者訓練好的模型文件。
將模型文件解壓至 /opt/insightface/models ,目錄結(jié)構(gòu)如下:
這里我們利用訓練好的模型文件,使用 Flask 編寫一個人臉特征編碼入庫、搜索 API 。我們將入庫的特征編碼存于程序中的一個數(shù)組里面。
首先,我們先創(chuàng)建用于圖片入庫及圖片搜索的目錄。
然后編碼 API 程序,在
/opt/insightface/src/api 創(chuàng)建 app_flask.py 。
代碼詳見 Github。
安裝軟件,我一般從官網(wǎng)去獲取安裝操作說明,讓自己在安裝過程中少走些彎路。
我們要做人臉搜索系統(tǒng),在前端頁面就是要上傳一張圖片,然后點擊“搜索”按鈕,在頁面上顯示人臉庫中與該圖片相似度最高的 top6 圖片,所以我們要用到圖片服務器,使用 url 進行圖片展示。
我們首先要創(chuàng)建一個圖片根目錄。
然后使用 Docker 拉取一個 Nginx 鏡像。
然后我們就可以啟動容器了:
通過瀏覽器訪問 http://192.168.247.128:8082/
我們從一個基礎(chǔ)鏡像 python:3.5 來構(gòu)建我們的 Insightface 鏡像
然后我們使用 Dockerfile 來構(gòu)建 Insightface 鏡像,主要是進行 Python 庫環(huán)境的安裝,比如 Tensorflow、Mxnet 。
最后,讓我們連續(xù)入庫 5 張梁靜茹和 1 張陳慧嫻的照片,然后用第 6 張梁靜茹的照片來搜索,效果圖如下:
最后,以上并非完整全文,提示大家如果有 Gpu 環(huán)境的話,可以使用 Gpu 來進行模型推理,以上操作我均使用 root 用戶。本文所提到的代碼都上傳到我的 Github 上了。
Chat:手把手教你做人臉搜索系統(tǒng)
掃碼閱讀全文
獲取源碼 Github 地址
馬上進行 AI 換臉實踐
聯(lián)系客服