2018-06-13 python使用騰訊的人臉分析api

# -*- coding: utf-8 -*-
import hashlib
import time
import random
import string
import requests
import base64
import requests
import cv2
import numpy as np
from urllib.parse import urlencode
import json #用于post后得到的字符串到字典的轉(zhuǎn)換

app_id = '1106891759'
app_key = 'z1BoKczrUMtsWyMC'

'''
        騰訊openai鑒權(quán)簽名計算步驟:(摘抄自官網(wǎng))
            用于計算簽名的參數(shù)在不同接口之間會有差異,但算法過程固定如下4個步驟。
        1 將<key, value>請求參數(shù)對按key進行字典升序排序,得到有序的參數(shù)對列表N
        2 將列表N中的參數(shù)對按URL鍵值對的格式拼接成字符串,得到字符串T(如:key1=value1&key2=value2),URL鍵值拼接過程value部分需要URL編碼,URL編碼算法用大寫字母,例如%E8,而不是小寫%e8
        3 將應(yīng)用密鑰以app_key為鍵名,組成URL鍵值拼接到字符串T末尾,得到字符串S(如:key1=value1&key2=value2&app_key=密鑰)
        4 對字符串S進行MD5運算,將得到的MD5值所有字符轉(zhuǎn)換成大寫,得到接口請求簽名
'''
def get_params(img):                         #鑒權(quán)計算并返回請求參數(shù)
    #請求時間戳(秒級),用于防止請求重放(保證簽名5分鐘有效
    time_stamp=str(int(time.time())) 
    #請求隨機字符串,用于保證簽名不可預(yù)測,16代表16位
    nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 16))

    params = {'app_id':app_id,                #請求包,需要根據(jù)不同的任務(wù)修改,基本相同
              'image':img,                    #文字類的任務(wù)可能是‘text’,由主函數(shù)傳遞進來
              'mode':'0' ,                    #身份證件類可能是'card_type'
              'time_stamp':time_stamp,        #時間戳,都一樣
              'nonce_str':nonce_str,          #隨機字符串,都一樣
              #'sign':''                      #簽名不參與鑒權(quán)計算,只是列出來示意
             }

    sort_dict= sorted(params.items(), key=lambda item:item[0], reverse = False)  #字典排序
    sort_dict.append(('app_key',app_key))   #尾部添加appkey
    rawtext= urlencode(sort_dict).encode()  #urlencod編碼
    sha = hashlib.md5()
    sha.update(rawtext)
    md5text= sha.hexdigest().upper()        #MD5加密計算
    params['sign']=md5text                  #將簽名賦值到sign
    return  params                          #返回請求包

def main():
    '''
    #用python系統(tǒng)讀取方法
    f = open('c:/girl.jpg','rb')
    img = base64.b64encode(f.read())   #得到API可以識別的字符串
     '''
    #用opencv讀入圖片
    frame=cv2.imread('/Users/fuqi/Downloads/Douyin-Bot-master/autojump.png')
    nparry_encode = cv2.imencode('.jpg', frame)[1]
    data_encode = np.array(nparry_encode)
    img = base64.b64encode(data_encode)    #得到API可以識別的字符串

    params = get_params(img)    #獲取鑒權(quán)簽名并獲取請求參數(shù)

    url = "https://api.ai.qq.com/fcgi-bin/face/face_detectface"  # 人臉分析
    res = requests.post(url,params).json()
    print(res['data']['face_list'][0]['beauty'])


if __name__ == '__main__':
    main()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容