为何要到百度云平台建立应用,首先来讲是为了获取获取access_token时须要的API Key和Secret Keyhtml
至于为何须要API Key和Secret Key才能获取access_token,应该一是为了推广一下百度云二是为了获取一些统计数据。微信苹果要大家搞得,度娘就不能要大家搞得?不要纠结python
1.访问百度AI开放 平台:http://ai.baidu.com/express
2.“产品服务”----“人脸检测”json
3. “当即使用”微信
4. 使用本身的百度帐号登陆(就手机百度、百度地图的那些帐号,实在没有就注册一个咯)app
5.建立应用scrapy
6.填写应用信息ide
应用名称----本身随便起就行函数
应用类型----不用管post
接口选择----咱们是从人脸识别连接进来的因此默认已帮咱们全选上了人脸相关的接口,因此能够不用管;固然本身想调整也行
应用描述----本身随便写写就行
点击当即建立
7.查看应用详情
8.记录本身的API Key和Secret Key
1.好吧,这里有点标题党,由于程序实现的是识别url指向的图片的中的人物,而后获取其种类(人仍是漫画)、性别、年龄和颜值,并不会说这妹子很漂亮这妹子很丑;但从技术上讲,颜值高低不过一个if颜值的事情并非什么难点,这个就不用纠结了。
2.对于更高级的噱头----下载高颜值妹子图片(嗯,后来我仍是实现了这个“噱头”),这在技术上也不是难点为了程序简洁这里下载代码就不写了;非要下载建议使用scrapy的ImagePiple,我的以为那才是绝配。
3.程序使用的第三方库requests进行请求,官方示例用的urllib/urllb2为了程序通用能够理解,但urllib比较费劲平时本身写仍是直接用requests好一些
4.程序不是很长也写了注释,就再也不具体讲解了,本身使用时记得三件事(代码中的client_id和client_secret我贴上来时乱改的,程序直接运行会出错的):
将client_id赋值成本身的API Key,client_secret赋值成本身的Secret Key,url_pic赋值成本身想测试的图片的url
5.其关access_token有效期通常有一个月(具体看返回的json_result['"expires_in"'],单位秒),因此不用每次请求都去申请一次access_token,虽然官方允许每次都请求这种操做
6.官方文档其实各个点都算讲得明白的,耐心点读理解应该都没问题:http://ai.baidu.com/docs#/Face-Detect-V3/top
7.另外百度针对python提供了pypi库----baidu-aip,但原理同样的仍是提供API Key和Secret Key联网去申请access_token,也就作了一下封装便利性上也就差很少吧想不想用看本身
import requests import json class BaiduFaceIdentify(): #此函数用于获取access_token,返回access_token的值 #此函数被parse_face_pic调用 def get_access_token(self): client_id = 'KuLRFhTzX3zBFBSrbQBsl6Q4' #此变量赋值成本身API Key的值 client_secret = '8ahbIb2hEOePzXhehw9ZDL9kGvbzIHTU' #此变量赋值成本身Secret Key的值 auth_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret response_at = requests.get(auth_url) json_result = json.loads(response_at.text) access_token = json_result['access_token'] return access_token #此函数进行人脸识别,返回识别到的人脸列表 #此函数被parse_face_pic调用 def identify_faces(self,url_pic,url_fi): headers = { 'Content-Type' : 'application/json; charset=UTF-8' } post_data = { 'image': url_pic, 'image_type' : 'URL', 'face_field' : 'facetype,gender,age,beauty', #expression,faceshape,landmark,race,quality,glasses 'max_face_num': 2 } response_fi = requests.post(url_fi,headers=headers,data=post_data) json_fi_result = json.loads(response_fi.text) return json_fi_result['result']['face_list'] #下边的print也许是最直观,你最想要的 #print(json_fi_result['result']['face_list'][0]['age']) #print(json_fi_result['result']['face_list'][0]['beauty']) #此函数用于解析进行人脸图片,输出图片上的人脸的性别、年龄、颜值 #此函数调用get_access_token、identify_faces def parse_face_pic(self,url_pic): #调用get_access_token获取access_token access_token = self.get_access_token() url_fi = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' + access_token #调用identify_faces,获取人脸列表 json_faces = self.identify_faces(url_pic,url_fi) if len(json_faces) == 0: print('未识别到人脸') else: for json_face in json_faces: print('种类:'+json_face['face_type']['type']) print('性别:'+json_face['gender']['type']) print('年龄:'+str(json_face['age'])) print('颜值:'+str(json_face['beauty'])) if __name__ == '__main__': #uil_pic赋值成本身要测试的图片的url地址 url_pic = 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1357154930,886228461&fm=27&gp=0.jpg' bfi = BaiduFaceIdentify() bfi.parse_face_pic(url_pic)
运行结果载图:
参考: