Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0b54eae

Browse files
committed
no message
1 parent 05b1c8b commit 0b54eae

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

‎moumoubaimifan/kouhong/kouhong.py

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import base64
2+
3+
import requests
4+
from PIL import Image, ImageDraw
5+
6+
7+
ak = 'MbDXGOrgXHqsgHKlAZLv6K93'
8+
9+
sk = 'fzIOiK2aEAKntAY7cOEHkUCoZOawe0wR'
10+
11+
# client_id 为官网获取的AK, client_secret 为官网获取的SK
12+
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+ak+'&client_secret=' + sk
13+
response = requests.get(host)
14+
if response:
15+
access_token = response.json()['access_token']
16+
print(access_token)
17+
else:
18+
raise Exception('access_token 获取失败')
19+
20+
21+
22+
# 图片转 base64
23+
pic_path = '/Users/xx/Desktop/kh/原图.png'
24+
with open (pic_path, 'rb') as f:
25+
base64_data = base64.b64encode(f.read())
26+
27+
# image:图片,image_type:图片格式,face_field:请求的结果,landmark150为人脸的 150 个关键点
28+
params = '{"image":"'+base64_data.decode('utf-8')+'","image_type":"BASE64","face_field":"landmark150"}'
29+
request_url = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' + access_token
30+
headers = {'content-type': 'application/json'}
31+
response = requests.post(request_url, data=params, headers=headers)
32+
33+
if response:
34+
face = response.json()
35+
else:
36+
raise Exception('人脸关键点获取失败')
37+
38+
39+
# 上嘴唇关键点,按顺时针方向的顺序组成一个多边形
40+
mouth_lip_upper_point_list = [
41+
'mouth_corner_right_outer','mouth_lip_upper_outer_1','mouth_lip_upper_outer_2','mouth_lip_upper_outer_3',
42+
'mouth_lip_upper_outer_4','mouth_lip_upper_outer_5','mouth_lip_upper_outer_6','mouth_lip_upper_outer_7',
43+
'mouth_lip_upper_outer_8','mouth_lip_upper_outer_9','mouth_lip_upper_outer_10','mouth_lip_upper_outer_11',
44+
'mouth_corner_left_outer','mouth_corner_left_inner','mouth_lip_upper_inner_11','mouth_lip_upper_inner_10',
45+
'mouth_lip_upper_inner_9','mouth_lip_upper_inner_8','mouth_lip_upper_inner_7','mouth_lip_upper_inner_6',
46+
'mouth_lip_upper_inner_5','mouth_lip_upper_inner_4','mouth_lip_upper_inner_3','mouth_lip_upper_inner_2',
47+
'mouth_lip_upper_inner_1','mouth_corner_right_inner','mouth_corner_right_outer'
48+
]
49+
50+
# 下嘴唇关键点,按顺时针方向的顺序组成一个多边形
51+
mouth_lip_low_point_list = [
52+
'mouth_corner_right_outer','mouth_corner_right_inner','mouth_lip_lower_inner_1','mouth_lip_lower_inner_2',
53+
'mouth_lip_lower_inner_3','mouth_lip_lower_inner_4','mouth_lip_lower_inner_5','mouth_lip_lower_inner_6',
54+
'mouth_lip_lower_inner_7','mouth_lip_lower_inner_8','mouth_lip_lower_inner_9','mouth_lip_lower_inner_10',
55+
'mouth_lip_lower_inner_11','mouth_corner_left_outer','mouth_lip_lower_outer_11','mouth_lip_lower_outer_10',
56+
'mouth_lip_lower_outer_9','mouth_lip_lower_outer_8','mouth_lip_lower_outer_7','mouth_lip_lower_outer_6',
57+
'mouth_lip_lower_outer_5','mouth_lip_lower_outer_4','mouth_lip_lower_outer_3','mouth_lip_lower_outer_2',
58+
'mouth_lip_lower_outer_1','mouth_corner_right_outer'
59+
]
60+
61+
62+
# 将将转为可操作的 RGBA 模式
63+
img = Image.open(pic_path)
64+
d = ImageDraw.Draw(img, 'RGBA')
65+
66+
for f in face['result']['face_list']:
67+
# 上嘴唇关键点 [(x,y),(x,y),(x,y)] 元组列表
68+
mouth_lip_upper_list = []
69+
# 下嘴唇关键点 [(x,y),(x,y),(x,y)] 元组列表
70+
mouth_lip_low_list = []
71+
72+
for point in mouth_lip_upper_point_list:
73+
p = f['landmark150'][point]
74+
mouth_lip_upper_list.append((p['x'], p['y']))
75+
76+
for point in mouth_lip_low_point_list:
77+
p = f['landmark150'][point]
78+
mouth_lip_low_list.append((p['x'], p['y']))
79+
80+
81+
82+
# 口红颜色
83+
hex = input('请输入口红的16进制颜色:')
84+
color = (int(hex[1:3], 16), int(hex[3:5], 16), int(hex[5:7], 16))
85+
86+
# 绘制多边形并填充颜色
87+
d.polygon(mouth_lip_upper_list, fill=color)
88+
# 绘制边框并填充颜色
89+
d.line(mouth_lip_upper_list, fill=color, width = 1)
90+
91+
d.polygon(mouth_lip_low_list, fill=color)
92+
d.line(mouth_lip_low_list, fill=color, width=1)
93+
94+
img.show()
95+
img.save('/Users/xx/Desktop/kh/' + hex + '.png')
96+
97+
98+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /