實現 AI 換臉的第一步:人臉搜尋
前段時間,AI 換臉這條新聞你關注了嗎?
說的是一位博主將 1994 年版《射鵰英雄傳》裡朱茵的臉換成了楊冪的臉。因為該視訊涉及到版權問題已被下架,但大家可以看看圖片對比來感受一下“移花接木”效果:
是不是足夠可以以假亂真了!這樣的視訊用一款實時視訊模擬軟體 Face2Face 就可以達到,在軟體中輸入一個說話的人臉錄影,通過演算法生成對應的人臉模型,套用這個模型就可以創造 DeepFakes。最恐怖的是,這個逼真的效果看起來毫無違和感。
讓我們一起來看看 AI 換臉背後的原理:
人臉檢測 → 多人臉區域分別做面部關鍵點檢測 → 面部區域分割 → 影象線性融合
順著這個思路,我們可以看到 AI 換臉裡最重要的一環就是人臉檢測,要進行人臉識別,得經過這麼幾個過程:
人臉檢測 → 人臉對齊 → 提取特徵編碼 → 編碼比對
人臉檢測:就是定位一張圖片中人臉的位置。
人臉對齊:就是根據人臉中五個特徵點位置(兩個眼睛、兩個嘴角、鼻子)將人臉縮放到一定的尺寸。
提取特徵編碼:通過訓練一個人臉識別模型來提取人臉特徵編碼。
編碼比對:將某個人臉的編碼與編碼庫中的編碼進行對比,得出距離或相似度。
01
實現 AI 換臉的第一步
以下關於人臉檢測、人臉對齊均使用基於 Tensorflow 的 MTCNN 模型,生成特徵編碼使用基於 Mxnet 的 Insightface 模型。
圖為人臉搜尋整體架構設計:
首先,我們會下載 Insightface 原始碼及其訓練好的模型檔案,在這個原始碼的基礎上,我們開發一個 API 程式,程式呼叫模型進行人臉檢測、人臉對齊、生成特徵編碼,然後完成人臉入庫、人臉搜尋功能。
該程式主要使用 Flask 來進行 API 開發,使用 Annoy 來進行人臉特徵向量搜尋。在部署上,使用 Docker 容器部署 Python 環境,讓 API 程式執行在 Docker 容器中,使用 Gunicorn 來啟動 Flask 程式。
另外,使用 Nginx 部署一個圖片伺服器,用於前端的圖片展示,也是執行在 Docker 容器中。最後,我們再提供一個簡單 Web 頁面,該頁面允許使用者進行入庫、搜尋操作(呼叫後端的人臉入庫、搜尋 API )。
最終的 Web 頁面展示如下:
02
人臉搜尋實現
首先你得有一個 Linux 環境,可以通過 VMware 構建一個 Ubuntu 16.04 的環境, iso 檔案為 ubuntu-16.04.5-desktop-amd64.iso 。
考慮到方便大家照著做,而且大家可能沒有 GPU 環境,所以以下構建環境我均使用 CPU 。
1. 克隆專案並修改相關原始碼
cd /opt
git clone https://github.com/deepinsight/insightface.git
將 /opt/insightface/src/api/face_model 第 61 行
self.model.ctx = mx.gpu(args.gpu)
改為
self.model.ctx = mx.cpu()
將第 34 行
for idx in xrange(data.shape[0]):
改為:
for idx in range(data.shape[0]):
下載作者訓練好的模型檔案。
將模型檔案解壓至 /opt/insightface/models ,目錄結構如下:
2. 編寫人臉入庫、搜尋 API 程式
這裡我們利用訓練好的模型檔案,使用 Flask 編寫一個人臉特徵編碼入庫、搜尋 API 。我們將入庫的特徵編碼存於程式中的一個陣列裡面。
首先,我們先建立用於圖片入庫及圖片搜尋的目錄。
然後編碼 API 程式,在 /opt/insightface/src/api 建立 app_flask.py 。
程式碼詳見 Github。
3. 安裝 Docker
安裝軟體,我一般從官網去獲取安裝操作說明,讓自己在安裝過程中少走些彎路。
4. 構建 Docker Nginx 圖片伺服器映象
我們要做人臉搜尋系統,在前端頁面就是要上傳一張圖片,然後點選“搜尋”按鈕,在頁面上顯示人臉庫中與該圖片相似度最高的 top6 圖片,所以我們要用到圖片伺服器,使用 url 進行圖片展示。
我們首先要建立一個圖片根目錄。
mkdir /opt/images
然後使用 Docker 拉取一個 Nginx 映象。
然後我們就可以啟動容器了:
docker run --name image-server -itd -p 8082:8080 -v /opt/insightface/src/api/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/images:/opt/images nginx
通過瀏覽器訪問 http://192.168.247.128:8082/
5. 構建 Docker Insightface 映象
我們從一個基礎映象 python:3.5 來構建我們的 Insightface 映象
docker pull python:3.5
然後我們使用 Dockerfile 來構建 Insightface 映象,主要是進行 Python 庫環境的安裝,比如 Tensorflow、Mxnet 。
最後,讓我們連續入庫 5 張梁靜茹和 1 張陳慧嫻的照片,然後用第 6 張梁靜茹的照片來搜尋,效果圖如下:
最後,以上並非完整全文,提示大家如果有 Gpu 環境的話,可以使用 Gpu 來進行模型推理,以上操作我均使用 root 使用者。本文所提到的程式碼都上傳到我的 Github 上了。
掃描下方二維碼檢視完整全文
獲取原始碼 Github 地址
開始你的 AI 換臉實踐
▼
點選閱讀原文,直達原文,上手 AI 換臉操作!
相關文章
- 乾貨 | AI人臉識別之人臉搜尋AI
- AI換臉實戰教學(FaceSwap的使用)---------第一步Extration:提取人臉。AI
- 萌新如何用Python實現人臉替換?Python
- 如何使用DeepFake實現影片換臉
- ai換臉工具roop 食用教程AIOOP
- 如何使用DeepFake實現視訊換臉
- AI+慈善 ▏人臉識別+人臉模擬助力失散親人找到回家的路AI
- AI換臉軟體-DeepFaceLab漢化版新手小白影片換臉入門教程AI
- OpenCv人臉檢測技術-(實現抖音特效-給人臉戴上墨鏡)OpenCV特效
- 刷臉認證如何實現人臉又快又準完成校驗?
- 超模臉、網紅臉、萌娃臉...換頭像不重樣?我開源了5款人臉生成器
- 5款超好用的AI換臉軟體,一鍵影片直播換臉(附下載連結)AI
- AI換臉——汝怎飾品如面AI
- 美顏SDK新方向——AI換臉AI
- 3分鐘內實現人臉檢測
- AI FaceSwap:探索無限可能的影像AI換臉軟體AI
- AI換臉常見方法細說從頭AI
- 基於Android平臺實現人臉識別Android
- 基於opencv實現簡單人臉檢測OpenCV
- 對抗人臉識別的一個新方法:隱藏身份、隨機換臉隨機
- 「無中生有」的AI,除了換臉,也有正規用途AI
- 人臉識別之特徵臉方法(Eigenface)特徵
- 人臉識別之人臉檢測的重要性
- 支小蜜人臉識別消費系統助力學校食堂實現“刷臉吃飯”
- 如何用Excel 9步實現CNN人臉識別ExcelCNN
- matlab實現人臉識別(數學基礎原理)Matlab
- 如何用OpenCV在Python中實現人臉檢測OpenCVPython
- 前端人臉識別--兩張臉相似度前端
- python ubuntu dlib人臉識別3-人臉對齊PythonUbuntu
- 人臉活體檢測人臉識別:眨眼+張口
- openCV實戰專案--人臉考勤OpenCV
- 人臉檢測識別,人臉檢測,人臉識別,離線檢測,C#原始碼C#原始碼
- SimpleAISearch:C# + DuckDuckGo 實現簡單的AI搜尋AIC#Go
- 機器學習實戰-SVM模型實現人臉識別機器學習模型
- 基於開源模型搭建實時人臉識別系統(四):人臉質量模型
- 基於開源模型搭建實時人臉識別系統(五):人臉跟蹤模型
- 小程式--人臉識別功能(百度ai)AI
- 華為雲——AI人臉編輯讓Lena微笑AI