1 概念介紹
人像動漫化
運用對抗生成網路技術,結合人臉檢測、頭髮分割、人像分割等技術,為使用者量身定製千人千面的二次元動漫形象,並支援透過引數設定,生成戴口罩的二次元動漫人像
2 效果展示
官方展示的效果~
我製作的效果~
是不是很傳神?
還有更神奇的!
貓貓變成了透明!
3 使用方法
3.1 註冊賬戶
開啟百度開發平臺,直接註冊賬戶就可以
3.2 免費額度
所有的API都會贈送一定免費額度,大家可以放心嘗試哦~
3.3 建立應用
進入控制檯建立應用,選擇產品服務->影象增強與特效
3.4 領取免費資源
領取成功後會在圓圈所示區域顯示剩餘次數~
3.5 建立應用
點選建立應用,填寫應用名稱(任意),選擇需要的介面(比如 影象增強與特效–人像動漫化),選擇應用歸屬為個人,隨便寫一下應用描述
***
3.6 獲取key
點選左側應用列表,檢視、儲存API Key和Secret Key,後面會用到
3.7 呼叫介面
請求示例
HTTP 方法:POST
請求URL: https://aip.baidubce.com/rest/2.0/image-process/v1/style_trans
URL引數:
Header如下:
Body中放置請求引數,引數詳情如下:
請求引數
3.8 線上除錯API
大家可以進入線上除錯介面,嫌麻煩的也可以跳過這一步,直接透過程式碼除錯
3.9 python呼叫
官方給出的程式碼如下:
# encoding:utf-8
import requests
import base64
'''
人像動漫化
'''
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
# 二進位制方式開啟圖片檔案
f = open('[本地檔案]', 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
access_token = '[呼叫鑑權介面獲取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print (response.json())
我們對其稍作修改
# encoding:utf-8
import requests
import base64
def image_process(img_name,client_id,client_secret):
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
# 二進位制方式開啟圖片檔案
f = open(img_name, 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
access_token = get_token(client_id,client_secret)
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print (response.json())
return response.json()['image']
3.10 獲取token
官方給出的token獲取方式:
# encoding:utf-8
import requests
# client_id 為官網獲取的AK, client_secret 為官網獲取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官網獲取的AK】&client_secret=【官網獲取的SK】'
response = requests.get(host)
if response:
print(response.json())
我們對其稍作修改
def get_token(client_id,client_secret):
# client_id 為官網獲取的AK, client_secret 為官網獲取的SK
host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}'
response = requests.get(host)
if response:
print(response.json())
return response.json()['access_token']
else:
print('no response!')
然後,執行程式碼就可以獲取處理後圖片的base64編碼啦~
# client_id 為官網獲取的AK, client_secret 為官網獲取的SK
client_id='xxx'
client_secret='xxx'
img_name='img_name.jpg'
img_base64=image_process(img_name,client_id,client_secret)
print(img_base64)
可以發現,官方已經給出了很詳細的程式碼模板,我們真正需要改的部分也就只有
client_id='xxx'
client_secret='xxx'
兩行而已~
3.11 檢視圖片
獲取到編碼後,可以在瀏覽器輸入data:image/jpeg;[你的base64編碼,注意需要去掉中括號]檢視圖片
或者使用下面的程式碼將base64編碼轉換成圖片
def base2picture(img_base64,img_save):
imgdata = base64.b64decode(img_base64)
with open(img_save,'wb') as f:
f.write(imgdata)
img_save='img_save.jpg'
base2picture(img_base64,img_save)
4 完整程式碼
# encoding:utf-8
import requests
import base64
def image_process(img_name,client_id,client_secret):
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
# 二進位制方式開啟圖片檔案
f = open(img_name, 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
access_token = get_token(client_id,client_secret)
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print (response.json())
return response.json()['image']
def get_token(client_id,client_secret):
# client_id 為官網獲取的AK, client_secret 為官網獲取的SK
host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}'
response = requests.get(host)
if response:
print(response.json())
return response.json()['access_token']
else:
print('no response!')
def base2picture(img_base64,img_save):
imgdata = base64.b64decode(img_base64)
with open(img_save,'wb') as f:
f.write(imgdata)
if __name__=='__main__':
client_id='xxx'
client_secret='xxx'
img_name='1.jpg'
img_base64=image_process(img_name,client_id,client_secret)
print(img_base64)
# 或者在瀏覽器輸入 data:image/jpeg;[base64]
img_save='2.jpg'
base2picture(img_base64,img_save)
大家都學會了嗎?
快去試試吧~