此次花了點時間,將百度智能雲裏面的人臉識別功能與python結合,進行了一場實驗。結果仍是蠻有成就感的,過程也挺簡單,不會複雜,說不定,你就能融合出你孩子的長相了耶~ 下面咱們一塊兒敲起鍵盤吧!python
百度AI開放平臺json
用你的百度帳號登錄ai.baidu.com,百度AI開放平臺。app
而後建立一我的臉識別應用, 函數
由於每一個帳號的調用次數都是有限的,只能免費500次,且玩且珍惜。因此大家仍是本身申請的好。 post
文檔地址:ai.baidu.com/docs#/Face-…測試
上面爲注意事項,就是post要帶header,圖片要是base64,還有請求地址等說明,文檔仍是要仔細看的,等下就會少點錯誤。編碼
上圖是說明你要post過去的數據,好比要template模板圖片和target目標文件兩張圖片,你也能夠設置圖片類型,圖片質量等url
上圖就是說你post過去後,會返回哪些東西的說明。spa
OK,看完了文檔,咱們來捋一下思路3d
一點點來開發,不要急於求成:
基於經驗,咱們確定要用到requests模塊,json模塊也要用,而後就是base64模塊,由於咱們要處理圖片。這些模塊咱們都有了,因此直接導入:
複製代碼
import requests ,json,base64
複製代碼
Token就是令牌,你要用接口須要取得它的承認,就是咱們要用到以前申請的那些key來獲取令牌:
複製代碼
def getToken():
token = '24.4e27ea4786f90eb77f23c4d66a781f13.2592000.1575258466.282335-17676610'
if token == '':
client_id = 'hTN22uEIq9bQcBYL1tXvxTjL'
client_secret = 'YiZ5PDW8Hoxka022loGdpoenNX53nCmq'
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id+'&client_secret=' + client_secret
response = requests.get(host)
token = response.json()["access_token"]
return token
複製代碼
base64是圖片的一種格式,因此要先打開圖片,而後轉成base64編碼才能用
複製代碼
def readPic(name):
with open("D:\\用戶目錄\\Desktop\\face\\"+name, 'rb') as f:
base64_data = base64.b64encode(f.read())
s = base64_data.decode()
return s
複製代碼
由於文檔裏面告訴咱們,返回的圖片是base64,因此這裏咱們還要把base64轉成你能夠看到的圖片。因此:
def downPic(data):
imagedata = base64.b64decode(data)
file = open('D:\\用戶目錄\\Desktop\\face\\done.jpg',"wb")
file.write(imagedata)
複製代碼
注意:代碼文件也放在這個文件夾裏面。
接下來就是最主要的功能了,
複製代碼
def merge(template,target):
token = getToken()
url = 'https://aip.baidubce.com/rest/2.0/face/v1/merge'
request_url = url + '?access_token=' + token
params={
"image_template":{
"image":template,
"image_type":"BASE64",
"quality_control":"NORMAL"
},
"image_target":{
"image":target,
"image_type":"BASE64",
"quality_control":"NORMAL"
},
"merge_degree":"HIGH"
}
params=json.dumps(params)
headers = {'content-type': 'application/json'}
result = requests.post(request_url, data=params, headers=headers).json()
if result['error_code'] == 0:
res = result["result"]["merge_image"]
downPic(res)
print('Done !')
else:
print(str(result['error_code'])+result['error_msg'])
複製代碼
在開始調試時,要一點點來測試,否則你那500次調用次數根本不夠你用,等你代碼寫好了,對不起,你的次數用完了,以下圖,你還玩個蛋蛋呀!
#功能測試
#測試獲取Token
print(getToken())
#測試讀取圖片base64
print(readPic('1.jpg'))
print(readPic('2.png'))
#測試下載圖片函數
img = readPic('1.jpg')
downPic(img)
複製代碼
#主程序
img1 = readPic('2.jpeg')
img2 = readPic('1.jpg')
merge(img1,img2)
複製代碼
出現Done!說明代碼成功了!咱們打開文件夾看看有沒有「done.jpg」這張圖
請發送【源碼】,今天文件名爲「face.zip」。
↓ ↓ ↓ 加小哥哥一塊兒玩耍吧 ↓ ↓ ↓