Python實現頭像換臉(AI換臉)

2021-10-22 16:26:47 字數 3757 閱讀 7047

相關變數輸出結果(變數的輸出位置以及相關描述已經寫在**注釋中)

"""

__author__="dazhi"

2021/3/19-19:42

"""# 首先是導入庫

import json

import requests

import ******json

import base64

# 第一步:獲取人臉關鍵點

deffind_face

(impath)

:# 這個鏈結是『曠視平台』向我們開放的介面(請求介面之後,讓介面幫我們處理一些東西)

''# 將相應的變數封裝到字典內(api_key和api_secret都是平台上的引數)

data =

# 這個open(impath)的作用是將的資料讀取進來('rb'表示二進位制讀取)

files =

# 傳送我們的請求(擁有鏈結、資料、檔案)---類似與某個平台上傳自己自定義頭像

# print("response1 的值:",response1)

# 檢視response裡面的內容。防止出現亂碼要進行解碼

# 這裡返回的不是字典,是json資料

req_con = response1.content.decode(

'utf-8'

)# print("req_con 的值:",req_con)

# 進行******json的載入-之後可以按字典提取方式進行操作

this_json = ******json.loads(req_con)

# 按字典方式進行提取(鍵值對)

# 當前faces是乙個列表

faces = this_json[

'faces'

]# 通過索引提取faces中的內容

list0 = faces[0]

# 獲取面部輪廓的相關資料

rectangle = list0[

'face_rectangle'

]# print("rectangle 的值:",rectangle)

return rectangle

# 第二步:換臉

# 前3個引數是第乙個、第二個、生成的新。number是換臉的相似度

defmerge_face

(image_url1, image_url2, image_url, number)

:# 獲取已知兩張的人臉資料(臉部輪廓資料字典)

ff1 = find_face(image_url1)

ff2 = find_face(image_url2)

# 將字典型別的面部資料轉換為字串(我們這裡採用最簡單的方法)

rectangle1 =

str(

str(ff1[

'top'])

+","

+str

(ff1[

'left'])

+","

+str

(ff1[

'width'])

+","

+str

(ff1[

'height'])

) rectangle2 =

str(

str(ff2[

'top'])

+","

+str

(ff2[

'left'])

+","

+str

(ff2[

'width'])

+","

+str

(ff2[

'height'])

)# 開啟檔案

f1 =

open

(image_url1,

'rb'

) f2 =

open

(image_url2,

'rb'

)# 進行b64編碼

f1_64 = base64.b64encode(f1.read())

f2_64 = base64.b64encode(f2.read())

# 關閉檔案

f1.close(

) f2.close(

)# 合併人臉的介面

url_add =

''# data的相關性質看上方**

# template_base64模板檔案的64編碼檔案,template_rectangle(字串格式)模板的面部輪廓內容(「145,123,1212,123」)

# merge_base64合併的64編碼檔案 merge_rectangle(字串格式)合併的面部輪廓內容

# number是換臉的相似度

data =

# 進行乙個request提交

response2 = requests.post(url_add, data)

# 將返回的資料進行乙個解碼操作

req_con2 = response2.content.decode(

'utf-8'

)# json處理--進行解碼操作

req_dict = json.jsondecoder(

).decode(req_con2)

# 按照字典提取的特點,提取其中的result資料

result = req_dict[

'result'

]# 將結果在進行b64解碼(將二進位制轉換為影象)

imgdata = base64.b64decode(result)

# 先開啟

file

=open

(image_url,

'wb'

)# 寫入

file

.write(imgdata)

# 關閉

file

.close(

)if __name__ ==

'__main__'

:# 加『r』的作用是因為鏈結中的『\』具有轉義的意思。加上之後就不按轉義進行處理(使鏈結保持原意)

image1 = r"c:\users\26301\desktop\1.png"

image2 = r"c:\users\26301\desktop\2.png"

image3 = r"c:\users\26301\desktop\3.png"

merge_face(image1, image2, image3,

100)

print

("恭喜您合成成功!!!!!"

曠視**~~~~~~。

python換臉開源 Python實現AI換臉功能

需要用到的介面 獲取人臉資訊的介面 實現換臉的介面 分為三步 import requests import json import json import base64 第一步 獲取人臉關鍵點 def find face imgpath return 乙個字典型別的人臉關鍵點 如 http url ...

利用opencv進行換臉

關於換臉的什麼背景什麼的,我也就不提了,直接說一下換臉所需要的步驟吧,在這裡我用的是opencv和之前我用的clm框架,clm還是進行人臉關鍵點檢測,利用opencv進行臉部替換和顏色風格統一。接下來是利用opencv換臉的一般步驟 臉部關鍵點檢測 因為我們要變換的兩張臉的形狀一般是不同的,所以我們...

2 7 2 10實習內容總結 換臉

實習這一周的工作內容是換臉 1.一開始考慮了直接swap face,但是得到的效果不好,原因是資料集中人臉非常的模糊,所以用dlib庫有時候檢測不到人臉 2.然後還想到了用語義分割的方法,將檢測的到人臉分割後,然後生成完全不同的臉,但是沒嘗試哈哈哈,雖然看到好幾篇 是這樣的,但是沒找到 而且下午和同...