社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

自从学会了Python,我都不屑于用PS了!PS能做的基本都可以做到!

Python学习交流 • 5 年前 • 622 次点击  

一. 准备工作

1. 此程序使用的是 Face++ 的API,所以需要去Face++官网注册账号:

https://www.faceplusplus.com.cn/

2. 创建应用,获取 key 和 secret



私信小编007即可获取数十套PDF的获取地址,自行进入下载即可!

3. 下载 simplejson 模块 ,使用pip就可以下载了

pip install simplejson

二. 程序思路

1. 使用 decect 接口,获取人脸关键点

接口详细文档:

https://console.faceplusplus.com.cn/documents/4888373

* return_landmark 参数 不能为 0 不然不会返回人脸关键点

return_landmark

Int

是否检测并返回人脸关键点。合法值为:

2

检测。返回 106 个人脸关键点。

1

检测。返回 83 个人脸关键点。

0

不检测

注:本参数默认值为 0

核心代码:

def find_face(imgpath):

print("finding") http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'

data = {"api_key": key, "api_secret": secret, "image_url": imgpath, "return_landmark": 1}

files = {"image_file": open(imgpath, "rb")} req_con = response.content.decode('utf-8')

response = requests.post(http_url, data=data, files=files) req_dict = JSONDecoder().decode(req_con) faces = this_json2['faces']

this_json = simplejson.dumps(req_dict) this_json2 = simplejson.loads(this_json) list0 = faces[0] rectangle = list0['face_rectangle'] return rectangle

# print(rectangle)

2. 使用 mergeface 接口,合成脸部图像

接口详细文档:

https://console.faceplusplus.com.cn/documents/20813963

* 注意图片文件大小不超过 2 MB

核心代码:

# 模板图片地址 合成图片地址 生成图片地址 合成指数0-100

def add_face(image_url_1,image_url_2,image_url,number):

ff1 = find_face(image_url_1)

rectangle1 = str(str(ff1['top']) + "," + str(ff1['left']) + "," + str(ff1['width']) + "," + str(ff1['height']))

ff2 = find_face(image_url_2)

rectangle2 = str(ff2['top']) + "," + str(ff2['left']) + "," + str(ff2['width']) + "," + str(ff2['height'])

# print(rectangle1) # print(rectangle2) url_add = "https://api-cn.faceplusplus.com/imagepp/v1/mergeface"

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

f1 = open(image_url_1, 'rb') f1_64 = base64.b64encode(f1.read()) f1.close() f2 = open(image_url_2, 'rb') f2.close()

"merge_base64": f2_64, "merge_rectangle": rectangle2, "merge_rate": number}

data = {"api_key": key, "api_secret": secret, "template_base64": f1_64, "template_rectangle": rectangle1, response = requests.post(url_add, data=data) req_con = response.content.decode('utf-8')

file.close()

req_dict = JSONDecoder().decode(req_con) print(req_dict) result = req_dict['result'] imgdata = base64.b64decode(result) file = open(image_url, 'wb')

file.write(imgdata)

3. 示例运行代码

# 单独两张照片的合成示例

image_url_1 = r"C:Users.jpg"

image_url_2 = r"C:Users.jpg"

image_url = r'C:Users esult.jpg'

add_face(image_url_1,image_url_2,image_url,50)

4. 封装一个多张照片的合成函数

用 列表List 储存图片地址,先以最开始的两张进行合成,然后将合成后的图片与列表中的其他图像依次合成

* 程序没有做List的长度验证,注意边界特殊情况

def add_many(list_face):

print("正在合成第1-2张")

image_now = r'C:Users ow.jpg'

add_face(list_face[0], list_face[1], image_now, 50)

print("正在合成第"+str(index+1)+"张")

for index in range(2,len(list_face)):

add_face(image_now, list_face[index], image_now, 50)

5. 成果展示

素材1:





素材2:




合成结果:




完整代码:

https://github.com/chestnut-egg/Face



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/sjGDxXsQu2
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/26947
 
622 次点击