利用腾讯AI平台进行人脸识别

最近github上wangshub的抖音机器人很火,参考了下代码。把人脸识别的部分拿出来做个备份,感觉挺有意思的。
准备在自己的blog上搭个人脸识别demo。

import hashlib
import urllib
from urllib import parse
import urllib.request
import base64
import json
import time

url_preffix='https://api.ai.qq.com/fcgi-bin/'


def setParams(array, key, value):   #字典构成函数
    array[key] = value


def genSignString(parser):
    '''
    进行腾讯ai接口鉴权签名生成
    对各个参数格式处理及md5运算,并把所有字母转换为大写
    '''
    uri_str = ''
    for key in sorted(parser.keys()):
        if key == 'app_key':
            continue
        uri_str += "%s=%s&" % (key, parse.quote(str(parser[key]), safe=''))
    sign_str = uri_str + 'app_key=' + parser['app_key']

    hash_md5 = hashlib.md5(sign_str.encode('utf-8'))
    return hash_md5.hexdigest().upper()


class AiPlat(object):
    def __init__(self,app_id = '申请到的ID',app_key = '申请到的KEY'):
        self.app_id = app_id
        self.app_key = app_key
        self.data = {}
        self.url_data = ''

    def invoke(self, params):
        self.url_data = urllib.parse.urlencode(params).encode("utf-8")  #将字典编码为url查询字符串
        req = urllib.request.Request(self.url, self.url_data)  #构建ai请求
        try:
            rsp = urllib.request.urlopen(req)  #请求ai,返回结果储存在rsp中
            str_rsp = rsp.read() #读出rsp内容,储存在str_rsp中
            dict_rsp = json.loads(str_rsp) #将内容解析为json格式,方便后续使用
            return dict_rsp
        except Exception as e:
            print(e)
            return {'ret': -1}

    def face_detectface(self, image, mode):
        self.url = url_preffix + 'face/face_detectface'
        setParams(self.data, 'app_id', self.app_id)  #在self.data字典中构建app_id
        setParams(self.data, 'app_key', self.app_key)  #在self.data字典中构建app_key
        setParams(self.data, 'mode', mode)  #在self.data字典中构建mode
        setParams(self.data, 'time_stamp', int(time.time()))  #在self.data字典中构建time_stamp
        setParams(self.data, 'nonce_str', int(time.time()))  #在self.data字典中构建nonce_str
        image_data = base64.b64encode(image)  #对图片进行解码
        setParams(self.data, 'image', image_data.decode("utf-8")) #将解码后的图片数据按utf-8编码,构建image
        sign_str = genSignString(self.data)  #根据self.data数据算出hash(MD5)值
        setParams(self.data, 'sign', sign_str)   #根据算出的hash值,构建sign
        return self.invoke(self.data) #调用self.invoke函数处理self.data,并返回结果


ai_obj = AiPlat()  #初始化AI接口
with open('1.jpg', 'rb') as bin_data:   #打开处理好的截图
    image_data = bin_data.read()     #将数据存入image_data中
    rsp = ai_obj.face_detectface(image_data, 0)  #将截图传给AI,rsp为AI分析后的数据,字典结构
    print(rsp)

你可能感兴趣的:(利用腾讯AI平台进行人脸识别)