媳婦兒喜歡玩某音中的動漫特效,那我就用python做一個圖片轉化軟體。
阿新 • • 發佈:2020-07-12
最近某音上的動漫特效特別火,很多人都玩著動漫肖像,我媳婦兒也不例外。看著她這麼喜歡這個特效,我決定做一個圖片處理工具,這樣媳婦兒的動漫頭像就有著落了。
編碼
為了快速實現我們的目標,我們就不自己寫圖片處理程式了,我們直接呼叫百度AI開放平臺提供的介面實現我們的需求。
這一次我們匯入如下兩個庫
1 # -*- coding:utf-8 -*- 2 #author:菜鳥小白的學習分享 3 4 import requests, base64
我們需要進行百度AI開放平臺的介面認證,程式碼如下:
# -*- coding:utf-8 -*- #author:菜鳥小白的學習分享 # 百度AI開放平臺鑑權函式def get_access_token(): url = 'https://aip.baidubce.com/oauth/2.0/token' data = { 'grant_type': 'client_credentials', # 固定值 'client_id': 'A3ppUrgl6H*******NjDN4Bb', # 在開放平臺註冊後所建應用的API Key 'client_secret': 'SqaeFpiPPC**********H1lsb0xO3w' # 所建應用的Secret Key } res = requests.post(url, data=data) res= res.json() access_token = res['access_token'] return access_token
因為百度AI平臺提供了多種影象處理方式,請求URL主體都相同,但是傳參不同,所以我們需要對不同的處理方式進行引數處理,程式碼如下:
1 # -*- coding:utf-8 -*- 2 #author:菜鳥小白的學習分享 3 def get_config(): 4 img_before = input("請輸入當前資料夾下需要處理的圖片名稱:") 5 process_action = ['','selfie_anime','colourize','style_trans'] 6 print("支援以下處理動作:\n1:為人像動漫化\n2:影象上色\n3:為影象風格化") 7 # 處理動作: selfie_anime 為人像動漫化,colourize 影象上色,style_trans 為影象風格化 8 i = int(input("請輸入需要處理的動作:")) 9 """ 10 cartoon:卡通畫風格 11 pencil:鉛筆風格 12 color_pencil:彩色鉛筆畫風格 13 warm:彩色糖塊油畫風格 14 wave:神奈川衝浪裡油畫風格 15 lavender:薰衣草油畫風格 16 mononoke:奇異油畫風格 17 scream:吶喊油畫風格 18 gothic:哥特油畫風格""" 19 others = ['','cartoon','pencil','color_pencil','warm','wave','lavender','mononoke','scream','gothic'] 20 j = 0 21 if process_action[i] == 'style_trans': 22 print("支援轉化的風格有:\n\ 23 1:卡通畫風格\n\ 24 2:鉛筆風格\n\ 25 3:彩色鉛筆畫風格\n\ 26 4:彩色糖塊油畫風格\n\ 27 5:神奈川衝浪裡油畫風格\n\ 28 6:薰衣草油畫風格\n\ 29 7:奇異油畫風格\n\ 30 8:吶喊油畫風格\n\ 31 9:哥特油畫風格\n") 32 j = int(input("請輸入需要轉化的風格型別(數字):")) 33 return img_before,process_action[i],others[j]
我們獲取到圖片和處理引數之後,就拿著這些資訊去請求百度AI開放平臺了
1 # -*- coding:utf-8 -*- 2 #author:菜鳥小白的學習分享 3 def image_process(img_before, img_after, how_to_deal,others): 4 # 函式的三個引數,一個是轉化前的檔名,一個是轉化後的檔名,均在同一目錄下,第三個是影象處理能力選擇 5 request_url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/' + how_to_deal 6 7 file = open(img_before, 'rb') # 二進位制讀取圖片 8 origin_img = base64.b64encode(file.read()) # 將圖片進行base64編碼 9 headers = {'Content-Type': 'application/x-www-form-urlencoded'} 10 data = { 11 'access_token': get_access_token(), 12 'image': origin_img, 13 'option': others 14 } 15 16 res = requests.post(request_url, data=data, headers=headers) 17 res = res.json() 18 19 if res: 20 f = open(img_after, 'wb') 21 after_img = res['image'] 22 after_img = base64.b64decode(after_img) 23 f.write(after_img) 24 f.close()
最後,我們再把主函式呼叫寫一下
1 # -*- coding:utf-8 -*- 2 #author:菜鳥小白的學習分享 3 if __name__ == '__main__': 4 # 選擇輸入資訊 5 img_before, process_action, others = get_config() 6 img_after = img_before.split('.') # 將原檔名分成列表 7 img_after = img_after[0] + '_1.' + img_after[1] # 新生成的檔名為原檔名上加 _1 8 image_process(img_before, img_after, process_action,others) 9 print('done!')
實現效果
原始圖片:
卡通化的轉化效果:
彩鉛風格轉換效果:
其它效果就由小夥伴們自行實驗吧,時間太晚了,我就不一一嘗試了。
程式獲取
考慮到有的小夥伴還沒有python環境也想體驗工具效果,我把也程式碼打包成了可執行程式,關注公眾號“菜鳥小白的學習分享”回覆“圖片處理程式”即可獲取。
有興趣自己研究的小夥伴想要獲取原始碼的話,關注公眾號“菜鳥小白的學習分享”回覆“圖片處理原始碼”即可獲取。
如果你也認可菜鳥小白的學習分享的話,請給我一個在看、點贊、關注+讚賞,因為有你們,所以我一直在努力。
# -*- coding:utf-8 -*-
#author:菜鳥小白的學習分享
if __name__ == '__main__':
# 選擇輸入資訊
img_before, process_action, others = get_config()
img_after = img_before.split('.') # 將原檔名分成列表
img_after = img_after[0] + '_1.' + img_after[1] # 新生成的檔名為原檔名上加 _1
image_process(img_before, img_after, process_action,others)
print('done!')