Python頭像動漫化,快來生成一個自己的動漫頭像吧

一、前言

很多時候我們都會爲頭像發愁,像我這種萬年不換頭像的鹹魚從來沒有這種煩惱。但是吧,有個個性化的頭像還是非常有趣的,因爲這個摳鼻屎的頭像除了摳鼻屎這點,其它都很符合本人的氣質,所以已經夠用了。但是我還是打算把這個小技巧給大家分享。

二、效果展示

在我多次測試後,發現女生頭像的生成還是比較不錯的,而且最好是正面照。而男生動漫頭像的生成就有點差強人意了,大家可以自己試試,下面我們看看我用有村大妹子生成的兩張圖片,我們先看第一張:
在這裏插入圖片描述
接下來是第二張,我用的是墊底辣妹中的形象:
在這裏插入圖片描述
兩張效果都還可以,主要還是人物的頭部動漫化了,其它部分只是趨於動漫的風格。不過我覺得還是很可以的。

三、實現

對於我這種基本功不紮實的人來說,實現這種只能調用API了。我使用的是百度的API,我們可以進入百度AI開放平臺註冊賬號,具體流程就不講了。登陸後我們可以看到如下界面:
在這裏插入圖片描述
我們依次點擊開放能力》圖像技術》人像動漫化,然後我們點擊立即使用,再創建應用就可以了。在應用裏面我們可以看到三個參數AppIDAPI KeySecret Key三個參數,我們把這三個參數記住就可以開始我們的編程了。

實現人像動漫化需要用到兩個接口,一個用來獲取access_token,另一個則是用來獲取動漫頭像,我們來獲取access_token:

import requests
def get_access_token():
	# 獲取token的API
	url = 'https://aip.baidubce.com/oauth/2.0/token'
	# 獲取access_token需要的參數
	params = {
		# 固定參數
        'grant_type':'client_credentials',
        # 必選參數,傳入你的API Key
        'client_id':'你的API Key',
        # 必選參數,傳入你的Secret Key
        'client_secret':'你的Secret Key'
    }
    # 發送請求,獲取響應數據
    response = requests.post(url, params)
    # 將響應的數據轉成字典類型,然後取出access_token
    access_token = eval(response.text)['access_token']
    # 將access_token返回
    return access_token

這裏我們用到了requests模塊,如果沒有安裝的可以在命令行執行下列語句:

pip install requests

接下來就是我們頭像動漫化了:

import base64
import requests
def img2Cartoon(img):
	# 頭像動漫化的API
    url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
    # 以二進制的方式讀取原始圖片
    origin_im = open(img, 'rb')
    # 將圖片進行base64編碼
    img = base64.b64encode(origin_im .read())
    # 關閉原圖片
    origin_im.close()

	# 請求的headers信息,固定寫法
    headers = {'content-type':'application/x-www-form-urlencoded'}
	
	# 請求的參數
    params = {
    	# 開始獲取的access_token
        'access_token':get_access_token(),
        # 圖片的base64編碼
        'image':img,
    }
    # 發送請求
    response = requests.post(url, data=params, headers=headers)
    # 對響應結果進行處理
    if response:
    	# 打開一個文件
        f = open('result.jpg', 'wb')
        # 獲取動漫頭像
        anime = response.json()['image']
        # 對返回的頭像進行解碼
        anime = base64.b64decode(anime)
        # 將頭像寫入文件當中
        f.write(anime)
        f.close()

我們只需要在main中調用img2Cartoon函數即可完成動漫頭像的生成,完整代碼如下:

import base64
import requests

def get_access_token():
	# 獲取token的API
	url = 'https://aip.baidubce.com/oauth/2.0/token'
	# 獲取access_token需要的參數
	params = {
		# 固定參數
        'grant_type':'client_credentials',
        # 必選參數,傳入你的API Key
        'client_id':'你的API Key',
        # 必選參數,傳入你的Secret Key
        'client_secret':'你的Secret Key'
    }
    # 發送請求,獲取響應數據
    response = requests.post(url, params)
    # 將響應的數據轉成字典類型,然後取出access_token
    access_token = eval(response.text)['access_token']
    # 將access_token返回
    return access_token

def img2Cartoon(img):
	# 頭像動漫化的API
    url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
    # 以二進制的方式讀取原始圖片
    origin_im = open(img, 'rb')
    # 將圖片進行base64編碼
    img = base64.b64encode(origin_im .read())
    # 關閉原圖片
    origin_im.close()

	# 請求的headers信息,固定寫法
    headers = {'content-type':'application/x-www-form-urlencoded'}
	
	# 請求的參數
    params = {
    	# 開始獲取的access_token
        'access_token':get_access_token(),
        # 圖片的base64編碼
        'image':img,
    }
    # 發送請求
    response = requests.post(url, data=params, headers=headers)
    # 對響應結果進行處理
    if response:
    	# 打開一個文件
        f = open('result.jpg', 'wb')
        # 獲取動漫頭像
        anime = response.json()['image']
        # 對返回的頭像進行解碼
        anime = base64.b64decode(anime)
        # 將頭像寫入文件當中
        f.write(anime)
        f.close()
        
if __name__ == '__main__':
    img2Cartoon('origin.jpg')

這樣我們就實現了頭像動漫化的操作,非常簡單,因爲主要的工作都由百度的程序員幫我們實現了,大家可以使用自己的照片生成一些個性化的頭像。如果太醜的話不要跑回來罵我就好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章