首页 > 编程语言 >Python实现AI换脸功能

Python实现AI换脸功能

时间:2024-01-17 14:11:42浏览次数:29  
标签:face2 Python res image AI url str 换脸 face1

运行时如果提示模块requests和simplejson不存在使用命令

pip install requests

pip install simplejson

import requests
import json
import simplejson
import base64
 
#第一步:获取人脸关键点
def find_face(imgpath):
    """
    :param imgpath: 图片的地址
    :return: 一个字典类型的人脸关键点 如:{'top': 156, 'left': 108, 'width': 184, 'height': 184}
    """
    http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect' #获取人脸信息的接口
    data = {
    "api_key":"x2NyKaa6vYuArYwat4x0-NpIbM9CrwGU",#访问url所需要的参数
    "api_secret":"OuHx-Xaey1QrORwdG7QetGG5JhOIC8g7",#访问url所需要的参数
    "image_url":imgpath, #图片地址
    "return_landmark":1
    }
    
    
    files = {'image_file':open(imgpath,'rb')} #定义一个字典存放图片的地址
    response = requests.post(http_url,data=data,files=files)
    res_con1 = response.content.decode('utf-8')
    res_json = simplejson.loads(res_con1)
    faces = res_json['faces']
    list = faces[0]
    rectangle = list['face_rectangle']
    return rectangle
 
#第二步:实现换脸
def merge_face(image_url1,image_url2,image_url,number):
    """
    :param image_url1: 被换脸的图片路径
    :param image_url2: 换脸的图片路径
    :param image_url: 换脸后生成图片所保存的路径
    :param number: 换脸的相似度
    """
    #首先获取两张图片的人脸关键点
    face1 = find_face(image_url1)
    face2 = find_face(image_url2)
    #将人脸转换为字符串的格式
    rectangle1 = str(str(face1['top']) + "," + str(face1['left']) + "," + str(face1['width']) + "," + str(face1['height']))
    rectangle2 = str(str(face2['top']) + "," + str(face2['left']) + "," + str(face2['width']) + "," + str(face2['height']))
    #读取两张图片
    f1 = open(image_url1,'rb')
    f1_64 = base64.b64encode(f1.read())
    f1.close()
    f2 = open(image_url2, 'rb')
    f2_64 = base64.b64encode(f2.read())
    f2.close()
    
    url_add = 'https://api-cn.faceplusplus.com/imagepp/v1/mergeface' #实现换脸的接口
    data={
    "api_key": "x2NyKaa6vYuArYwat4x0-NpIbM9CrwGU",
    "api_secret": "OuHx-Xaey1QrORwdG7QetGG5JhOIC8g7",
    "template_base64":f1_64,
    "template_rectangle":rectangle1,
    "merge_base64":f2_64,
    "merge_rectangle":rectangle2,
    "merge_rate":number
    }
    response1 = requests.post(url_add,data=data)
    res_con1 = response1.content.decode('utf-8')
    res_dict = json.JSONDecoder().decode(res_con1)
    result = res_dict['result']
    imgdata = base64.b64decode(result)
    file=open(image_url,'wb')
    file.write(imgdata)
    file.close()
 
if __name__ == '__main__':
    face1="mingxing"
    face2="meizi"  
    face3=face1+"_"+face2 #把face2的脸换到face1图片中的脸上去
    image1 = r""+face1+".jpg"
    image2 = r""+face2+".jpg"
    image3 = r""+face3+".jpg"
    merge_face(image1,image2,image3,100)

把图片与py文件放在同一目录下

原图mingxing.jpg

要换的脸图meizi.jpg

换完以后的图mingxing_meizi.jpg

标签:face2,Python,res,image,AI,url,str,换脸,face1
From: https://www.cnblogs.com/ddzzhh/p/17969911

相关文章

  • python3之多进程线程
    本文内容参考https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064 多进程os模块的fork()多进程(multiprocessing):Unix/Linux操作系统提供了一个fork()函数,fork()函数调用时,操作系统自动把当前进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。......
  • Python字符串删除第一个字符常用的方法!
    字符串是常用的数据类型之一,在Python中,用引号表示字符串,双引号或单引号都可以,保持统一即可。那么Python字符串如何删除第一个字符?想要删除字符串第一个字符,有多种办法可以实现,具体请看下文。1、使用切片切片是Python中一个非常强大的功能,可以用于获取列表、字符串和元......
  • Python 面向对象的私有属性获取
    前言全局说明一、安装flask模块二、引用模块三、启动服务模块安装、引用模块、启动Web服务方法,参考下面链接文章:https://www.cnblogs.com/wutou/p/17963563四、面向对象的私有属性获取4.1.2classFoo:def__init__(self):self.name='wangwu'......
  • python-pyspark数据输入
    数据容器转rdd对象通过SparkContext对象的parallelize成员方法,将python数据容器转为rdd对象frompysparkimportSparkConf,SparkContextconf=SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc=SparkContext(conf=conf)data1=[1,2,3,4,5]data2=(1......
  • (Python)每日代码||2024.1.17||函数中给列表形参默认值时,该默认列表在函数中的改变会
    deff(x,li=[1]):print(id(li))li.append(x)print(li)f('a')#第一次调用函数print()f('b')#第二次调用函数print()f('a',[])#第三次调用函数print()f('b',[2,2])#第四次调用函数print()f('a')#第五次调用函数'''输出14......
  • python 连接mysql 报错 打包 报错
    mysql.connector.connect(auth_plugin='mysql_native_password',host=lis[0],database=lis[1],user=lis[2],password=lis[3])auth_plugin='mysql_native_password'Python连接MySQL报错:mysql.connector.errors.NotSupportedError:Authenticationplugin......
  • 给大家降降火 —— AI养殖是否夸大功效 —— 深大学生用AI养乌骨鸡增产6万只
    看到一个新闻:地址:https://export.shobserver.com/baijiahao/html/705726.html这个新闻里面说的就是这个腾讯的对口培养的大学生搞了一个AI养殖,增长了6万只鸡。看到了这个新闻第一感觉就是新奇和高兴,毕竟这从另一个层面上说明了AI技术对发展的重要性了,也是正好自己的方向和专......
  • python循环语句
    while循环与其他语言不同的是python中的while循环没有dowhile语句,要么直接使用while循环,或者使用whileelse语句,其基本格式如下:while<expr>:<statement(s)>else:<additional_statement(s)>for循环遍历循环格式如下(将序列中的元素依次赋值给变量,再通过循环体处......
  • CodeFormer一款既能人脸修复、还能视频去码的AI软件,附下载使用教程
    CodeFormer是一款强大的人工智能工具,主要用于图像和视频的修复和增强。它基于深度学习技术,特别是人脸复原模型,可以轻松修复和增强面部图像,提升照片和视频的质量和视觉效果工作原理1、通过自动编码器实现人脸的变换,包括色彩化、清晰化、去马赛克修复等功能2、采用了预训练VQGAN......
  • python 在排序数组中查找元素的第一个和最后一个位置 多种解法
    二分查找:基于二分查找的算法可以在O(logn)的时间复杂度内解决该问题。具体实现方式是,先使用二分查找找到该元素的位置,然后向左和向右扩展,直到找到第一个和最后一个位置。代码如下:defsearchRange(nums,target):defbinarySearch(nums,target,lower):left,righ......