python—调用API人脸识别

#-*- coding: utf-8 -*-
import urllib.request
import urllib.error
import time
import re
#json 交互协议
import json
import cv2 as cv
import numpy as np

http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
key = 创建的API key的API key
secret = 创建的API key的API Secret
#图像地址
path_name = 图像地址
filepath = r''+path_name

#将时间变成十六进制
boundary = '----------%s' #% hex(int(time.time() * 1000))
data = []
#boundary边界
data.append('--%s' % boundary)
#权限名添加
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'api_key')
data.append(key)
#权限密码添加
data.append('--%s' % boundary)
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'api_secret')
data.append(secret)
data.append('--%s' % boundary)
#二进制方法读取  'rb
fr = open(filepath, 'rb')
#传输数据到网页
data.append('Content-Disposition: form-data; name="%s"; filename=" "' % 'image_file')
data.append('Content-Type: %s\r\n' % 'application/octet-stream')
data.append(fr.read())
#关闭传输通道
fr.close()
data.append('--%s' % boundary)
#return_landmark    是否检测并返回人脸关键点
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'return_landmark')
'''
0   不检测
1  检测,返回 83 个人脸关键点
2   检测,返回 106 个人脸关键点
'''
data.append('1')
data.append('--%s' % boundary)
#return_attributes  是否检测并返回根据人脸特征判断出的年龄、性别、情绪等属性
data.append('Content-Disposition: form-data; name="%s"\r\n' % 'return_attributes')
data.append(
    "gender,age,smiling,headpose,facequality,blur,eyestatus,emotion,ethnicity,beauty,mouthstatus,eyegaze,skinstatus")
data.append('--%s--\r\n' % boundary)

#改变编码格式
for i, d in enumerate(data):
    if isinstance(d, str):
        data[i] = d.encode('utf-8')

http_body = b'\r\n'.join(data)

# 生成HTTP请求
req = urllib.request.Request(url=http_url, data=http_body)

# header
req.add_header('Content-Type', 'multipart/form-data; boundary=%s' % boundary)

try:
    # 将数据发布到服务器
    resp = urllib.request.urlopen(req, timeout=5)
    #得到响应
    qrcont = resp.read()
    # 如果你想加载为JSON,你应该先解码
    # for example: json.loads(qrcont.decode('utf-8'))
    qrcont = qrcont.decode('utf-8')
    #将字符串解码变成字典
    qrcont =json.loads(qrcont)
    # print(qrcont)
    cv.namedWindow('img',cv.WINDOW_NORMAL)

    '''

     不带中文路径的图像

      img = cv.imread(path)

    '''

   #读取带中文路径的图像
    img = cv.imdecode(np.fromfile(path_name,dtype=np.uint8),1)
    # 图上添加文字
    font = cv.FONT_HERSHEY_SIMPLEX
    for i in range(len(qrcont['faces'])):
        dis = qrcont['faces'][i]['face_rectangle']

        #木有购买API的使用权限,所以只能显示前五个识别出来的年龄等
        if i < 5:
            age = qrcont['faces'][i]['attributes']['age']

           #图像上添加文字
            cv.putText(img, str(age['value']), (dis['left'], dis['top']), font, 4, (98,170,255), 2)

        #画矩形框
        cv.rectangle(img, (dis['left'], dis['top']), (dis['left']+dis['width'], dis['top']+dis['height']), (255, 255, 119), 3)
    cv.imshow('img',img)
    cv.waitKey(0)
except urllib.error.HTTPError as e:
    print(e.read().decode('utf-8'))

猜你喜欢

转载自blog.csdn.net/Como0413/article/details/88052840