最近做人脸识别的项目调用了face++的API,可是官网给的代码是python2的,估计不少初学者和我一样把代码换成Python3花了不少功夫吧。现在这篇文章将简单的告诉你如何用简简单单十几行代码调用face++任意的API。
先附上代码,运行环境:Python3.6
import requests from json import JSONDecoder http_url ="https://api-cn.faceplusplus.com/facepp/v3/detect" #你要调用API的URL key ="公钥" secret ="私钥" #face++提供的一对密钥 filepath1 ="D:\py\image\WIN_20180412_21_52_13_Pro.jpg" #图片文件的绝对路径 data = {"api_key":key, "api_secret": secret, "return_attributes": "gender,age,smiling,beauty"} #必需的参数,注意key、secret、"gender,age,smiling,beauty"均为字符串,与官网要求一致 files = {"image_file": open(filepath1, "rb")} '''以二进制读入图像,这个字典中open(filepath1, "rb")返回的是二进制的图像文件,所以"image_file"是二进制文件,符合官网要求''' response = requests.post(http_url, data=data, files=files) #POTS上传 req_con = response.content.decode('utf-8') #response的内容是JSON格式 req_dict = JSONDecoder().decode(req_con) #对其解码成字典格式 print(req_dict) #输出
我调用的是Detect API,调用URL和调用方法官网上写的清清楚楚,想调用不同的方法就用相应的URL和调用方法。
我想强调的是请求参数,如果你知道如何传入参数,那么你就可以调用face++上所有的API了。
1.参数名
参数名是字符串,除了FILE参数,其余所有参数都写进data字典里:参数名作为键,变量名或字符串作为值(如上面程序中的key,secret,"gender,age,smiling,beauty")。通常值均为字符串。
下面看看官网给的请求参数:
(如果看不清请点击全屏看图)
我想特别声明的是参数“return_attributes",这个参数作为键,后面对应的值就是你请求的返回属性(注意CS中attribute一般是属性的意思,它是可数名词,不是四级词汇归因于。。。),我只请求了四个变量"gender,age,smiling,beauty",想加的话直接在字符串里写就行了,它们之间用逗号间隔。
"return_attributes": "gender,age,smiling,beauty"
除FILE参数其余参数都存在data字典里了,那么现在该处理FILE文件了。
官网的描述是:
image_file | File | 一个图片,二进制文件,需要用post multipart/form-data的方式上传。 |
参数名“image_file”,注意这个是作为files字典的键,不是让你建立一个叫image_file的文件对象。我的代码是:
files = {"image_file": open(filepath1, "rb")}
open(filepath1, "rb")返回的是二进制的图像文件,rb:以二进制读取。所以"image_file"键对应的值是二进制文件,符合官网要求
2.返回值
返回值经JSONDecode之后是字典类型的,官网例子如下:
具体返回值中的参数代表什么意思查询官网的返回值表格就行了。
我们回过头来看看关键点:
1.不同API的URL
2.此API要求的请求参数
3.处理字典类型的返回值
怎么样,调用face++的API是不是很简单呢!