相關變數輸出結果(變數的輸出位置以及相關描述已經寫在**注釋中)
"""
__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.然後還想到了用語義分割的方法,將檢測的到人臉分割後,然後生成完全不同的臉,但是沒嘗試哈哈哈,雖然看到好幾篇 是這樣的,但是沒找到 而且下午和同...