#python
- 低级版的换脸
- 原理:使用cv2+face_recognition+pil
- 同时识别一张图片中的两个人,然后将一个人的脸移植到另一个人脸上(利用面部识别的定位,以及复制粘贴)
注意:复制粘贴的区域大小需要保持一致
import face_recognition
import cv2
import matplotlib.pyplot as plt
from pylab import *
from PIL import Imageimage = face_recognition.load_image_file("D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg")
face_locations=face_recognition.face_locations(image)face_num2=len(face_locations)
print(face_num2) # The number of faces
org = cv2.imread("D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg")
box={}for i in range(0,face_num2):top = face_locations[i][0]right = face_locations[i][1]bottom = face_locations[i][2]left = face_locations[i][3]length = bottom-topheight = right-leftbox[i] =left, top, left+length, top+heightprint(box[0])pil_im = Image.open('D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg')
region = pil_im.crop(box[1])
#region = region.transpose(Image.ROTATE_180)
pil_im.paste(region, box[0])
#subplot(233)
#title(u'复制粘贴区域', fontproperties=font)
axis('off')
imshow(pil_im)
2.利用face++实现精度更高的换脸
到face++网站注册账号密码获得密钥
获取人脸面部信息更精确的参数进行互相替换
import requests #导入requests库
import base64 #导入base64库
from PIL import Image
import matplotlib.pyplot as plt# API_Key='wLXiL5dy2qrO6YErbUm9dF_kr4wP7EVc'
# API_Secret = 'iEFrwgEzU_cIyrvMOSOw_vGUjNttgLhs'
#借助
API_Key = 'CGj6vYsWyRnKPPfvJNNIuSujuVVyJ095' #你自己申请的API Key
API_Secret = '7QMUgWN7CA8QlAdfDdNnQnNJX4fnZlu7' ##你自己申请的API Secret# 定义一个获取图片的人脸特征参数的函数
def find_face(imgpath): #查找人脸参数(图片位置)url = '' #使用的人脸识别网站data = {'api_key': API_Key, 'api_secret': API_Secret, 'image_url': imgpath, 'return_landmark': 1} #相关个人账号参数等files = {'image_file': open(imgpath, 'rb')} #打开图片response = requests.post(url, data=data, files=files) #用requests.poet()函数将个人账号参数和图片发送到网站res_json = response.json() #转换为jsonfaces = res_json['faces'][0]['face_rectangle'] # 获取面部大小的四个值,分别为长宽高低{'width': 176, 'top': 128, 'left': 80, 'height': 176}return faces #返回图片的面部参数# 定义一个换脸函数,函数中number表示两张脸的相似度为99%
def change_face(image_1, image_2, number=99):url = "" #使用的换脸网址find_p1 = find_face(image_1) #第1张图片的人脸参数find_p2 = find_face(image_2) #第2张图片的人脸参数rectangle1 = str(str(find_p1['top']) + ',' + str(find_p1['left']) + ',' + str(find_p1['width']) + ',' + str(find_p1['height'])) # 得到图片1坐标rectangle2 = str(str(find_p2['top']) + ',' + str(find_p2['left']) + ',' + str(find_p2['width']) + ',' + str(find_p2['height'])) # 得到图片2坐标page1 = open(image_1, 'rb') #以二进制打开图片1page1_64 = base64.b64encode(page1.read()) #将字符串转成成base64编码page1.close() #关闭图片1page2 = open(image_2, 'rb') #二进制打开图片2page2_64 = base64.b64encode(page2.read()) #将字符串转成成base64编码page2.close() #关闭图片2data = {'api_key': API_Key, 'api_secret': API_Secret, 'template_base64': page1_64,'template_rectangle': rectangle1, 'merge_base64': page2_64, 'merge_rectangele': rectangle2,'merge_rate': number} #参数信息response = requests.post(url, data=data).json() #发送参数到换脸网站results = response['result'] #得到返回参数image = base64.b64decode(results) #转换信息with open('新图片.jpg', 'wb') as file: #将信息写入到图片file.write(image)print("转换完成了!")if __name__ == '__main__':change_face('E:\\exefile\\wj.jpg','E:\\exefile\\3.jpeg')
img1=plt.imread('E:\\exefile\\wj.jpg')plt.subplot(122).imshow(img1)
plt.axis('off')
#plt.show()
img2=plt.imread('E:\\exefile\\3.jpeg')plt.subplot(121).imshow(img2)
plt.axis('off')
plt.show()
img0=Image.open('新图片.jpg')
plt.axis('off')
plt.imshow(img0)
plt.show()
#python
- 低级版的换脸
- 原理:使用cv2+face_recognition+pil
- 同时识别一张图片中的两个人,然后将一个人的脸移植到另一个人脸上(利用面部识别的定位,以及复制粘贴)
注意:复制粘贴的区域大小需要保持一致
import face_recognition
import cv2
import matplotlib.pyplot as plt
from pylab import *
from PIL import Imageimage = face_recognition.load_image_file("D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg")
face_locations=face_recognition.face_locations(image)face_num2=len(face_locations)
print(face_num2) # The number of faces
org = cv2.imread("D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg")
box={}for i in range(0,face_num2):top = face_locations[i][0]right = face_locations[i][1]bottom = face_locations[i][2]left = face_locations[i][3]length = bottom-topheight = right-leftbox[i] =left, top, left+length, top+heightprint(box[0])pil_im = Image.open('D:\Python 32\Lib\site-packages\cv2\data\img\old.jpg')
region = pil_im.crop(box[1])
#region = region.transpose(Image.ROTATE_180)
pil_im.paste(region, box[0])
#subplot(233)
#title(u'复制粘贴区域', fontproperties=font)
axis('off')
imshow(pil_im)
2.利用face++实现精度更高的换脸
到face++网站注册账号密码获得密钥
获取人脸面部信息更精确的参数进行互相替换
import requests #导入requests库
import base64 #导入base64库
from PIL import Image
import matplotlib.pyplot as plt# API_Key='wLXiL5dy2qrO6YErbUm9dF_kr4wP7EVc'
# API_Secret = 'iEFrwgEzU_cIyrvMOSOw_vGUjNttgLhs'
#借助
API_Key = 'CGj6vYsWyRnKPPfvJNNIuSujuVVyJ095' #你自己申请的API Key
API_Secret = '7QMUgWN7CA8QlAdfDdNnQnNJX4fnZlu7' ##你自己申请的API Secret# 定义一个获取图片的人脸特征参数的函数
def find_face(imgpath): #查找人脸参数(图片位置)url = '' #使用的人脸识别网站data = {'api_key': API_Key, 'api_secret': API_Secret, 'image_url': imgpath, 'return_landmark': 1} #相关个人账号参数等files = {'image_file': open(imgpath, 'rb')} #打开图片response = requests.post(url, data=data, files=files) #用requests.poet()函数将个人账号参数和图片发送到网站res_json = response.json() #转换为jsonfaces = res_json['faces'][0]['face_rectangle'] # 获取面部大小的四个值,分别为长宽高低{'width': 176, 'top': 128, 'left': 80, 'height': 176}return faces #返回图片的面部参数# 定义一个换脸函数,函数中number表示两张脸的相似度为99%
def change_face(image_1, image_2, number=99):url = "" #使用的换脸网址find_p1 = find_face(image_1) #第1张图片的人脸参数find_p2 = find_face(image_2) #第2张图片的人脸参数rectangle1 = str(str(find_p1['top']) + ',' + str(find_p1['left']) + ',' + str(find_p1['width']) + ',' + str(find_p1['height'])) # 得到图片1坐标rectangle2 = str(str(find_p2['top']) + ',' + str(find_p2['left']) + ',' + str(find_p2['width']) + ',' + str(find_p2['height'])) # 得到图片2坐标page1 = open(image_1, 'rb') #以二进制打开图片1page1_64 = base64.b64encode(page1.read()) #将字符串转成成base64编码page1.close() #关闭图片1page2 = open(image_2, 'rb') #二进制打开图片2page2_64 = base64.b64encode(page2.read()) #将字符串转成成base64编码page2.close() #关闭图片2data = {'api_key': API_Key, 'api_secret': API_Secret, 'template_base64': page1_64,'template_rectangle': rectangle1, 'merge_base64': page2_64, 'merge_rectangele': rectangle2,'merge_rate': number} #参数信息response = requests.post(url, data=data).json() #发送参数到换脸网站results = response['result'] #得到返回参数image = base64.b64decode(results) #转换信息with open('新图片.jpg', 'wb') as file: #将信息写入到图片file.write(image)print("转换完成了!")if __name__ == '__main__':change_face('E:\\exefile\\wj.jpg','E:\\exefile\\3.jpeg')
img1=plt.imread('E:\\exefile\\wj.jpg')plt.subplot(122).imshow(img1)
plt.axis('off')
#plt.show()
img2=plt.imread('E:\\exefile\\3.jpeg')plt.subplot(121).imshow(img2)
plt.axis('off')
plt.show()
img0=Image.open('新图片.jpg')
plt.axis('off')
plt.imshow(img0)
plt.show()