百度开放云中提供了一项人脸识别服务,依托百度业界领先的人脸识别算法,提供了人脸检测、五官定位、人脸属性检测等功能。
功能
提供人脸及五官几何位置定位
支持人脸图像的性别、表情等人脸属性分析功能
支持REST API方式调用
支持常用图片格式,能应对复杂的光照场景,并支持多种人脸姿态
提供了ANDROID、iOS、WP7、JAVA及PHP多种平台的SDK
服务控制台支持详细的服务统计查询及服务使用频次管理
典型案例
- 百度云网盘
- 百度相册
- 百度魔拍
- 百度内部移动办公应用
- 有缘网
API
开启服务
使用人脸服务前,首先需要开启服务。通过开发者中心“管理控制台”,进入“我的应用列表”,创建应用。填写信息,创建成功后,点击左侧“媒体云”开启媒体云人脸识别服务。
获取 access_token
- 访问百度开发者中心使用百度账号登录
- 从管理中心进入相应应用得到 API Key(client_id)和 Secret Key(client_secret)。
- 采用Client Credentials方式,获取Access Token,具体步骤见下。
在服务端发送请求(推荐用POST方法)到百度OAuth2.0授权服务的“https://openapi.baidu.com/oauth/2.0/token”地址上,并带上以下参数:
- grant_type:必须参数,固定为“client_credentials”;
- client_id:必须参数,应用的API Key;
- client_secret:必须参数,应用的Secret Key;
- scope:非必须参数。以空格分隔的权限列表,采用本方式获取Access Token时只能申请跟用户数据无关的数据访问权限。关于权限的具体信息请参考“权限列表”。
例如:
https://openapi.baidu.com/oauth/2.0/token?
grant_type=client_credentials&
client_id=Va5yQRHlA4Fq4eR3LT0vuXV4&
client_secret= 0rDSjzQ20XUj5itV7WRtznPQSzr5pVw2&
若参数无误,服务器将返回一段JSON文本,包含以下参数:
- access_token:要获取的Access Token;
- expires_in:Access Token的有效期,以秒为单位;
- refresh_token:用于刷新Access Token 的 Refresh Token,所有应用都会返回该参数;(10年的有效期)
- scope:Access Token最终的访问范围,即用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限),关于权限的具体信息参考“权限列表”一节;
- session_key:基于http调用Open API时所需要的Session Key,其有效期与Access Token一致;
- session_secret:基于http调用Open API时计算参数签名用的签名密钥。
例如:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"access_token": "1.a6b7dbd428f731035f771b8d15063f61.86400.1292922000-2346678-124328",
"expires_in": 86400,
"refresh_token": "2.385d55f8615fdfd9edb7c4b5ebdc3e39.604800.1293440400-2346678-124328",
"scope": "public",
"session_key": "ANXxSNjwQDugf8615OnqeikRMu2bKaXCdlLxn",
"session_secret": "248APxvxjCZ0VEC43EYrvxqaK4oZExMB",
}
若请求错误,服务器将返回一段JSON文本,包含error
(错误码)和 error_description
(错误描述信息),例如:
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
"error": "invalid_grant",
"error_description": "Invalid authorization code: ANXxSNjwQDugOnqeikRMu2bKaXCdlLxn"
}
注意:
- 默认情况下,Access Token的有效期为一个月,如果Access Token过期可以重新获取。
- 获取Access Token时所返回的session_key和session_secret参数不是OAuth2.0协议标准规定的返回参数,而是百度OAuth2.0服务扩展加入的,目的是使得开发者可以基于http调用百度的Open API,因为基于https调用Open API虽然更为简单,但毕竟响应速度更差(比基于http的要差一倍时间左右)。
API 请求方式
- 目前人脸检测接口支持 POST 和 GET 方式。
- 媒体云人脸识别 REST API 的所有参数在传入时应当使用:UTF-8 编码。
URL 格式:
https://openapi.baidu.com/rest/2.0/media/v1/face/{request_type}?{query_string}
其中:
-
request_type
为操作方法,detect
为人脸检测。
示例:
GET请求:
https://openapi.baidu.com/rest/2.0/media/v1/face/detect?access_token=urlencode(xxxxx)&url =urlencode(xxxxxx)
POST请求:
POST /rest/2.0/media/v1/face
User-Agent: curl/7.12.1 (x86_64-redhat-linux-gnu) libcurl/7.12.1 OpenSSL/0.9.7a zlib/1.2.1.2
libidn/0.5.6
Pragma: no-cache
Accept: */*
Host:openapi.baidu.com
Content-Type:application/x-www-form-urlencoded
Content-Length:123
access_token =urlencode(xxxx)&url =urlencode(xxxx)
人脸检测 API
请求:GET/POST
URL: https://openapi.baidu.com/rest/2.0/media/api/v1/face/detect
参数:
- access_token
- url:图片地址(需要使用 urlencode)
- callback_url:(可选)离线请求回调地址
请求示例:
curl -v "https://openapi.baidu.com/rest/2.0/media/v1/face/detect?access_token=3.ad2ee1e9b351cd800fd62bddc8bef016.2592000.1377163536.4212382003-260146&url=http://c.hiphotos.bdimg.com/album/s%3D800/sign=6bd70c1da044ad342abf8a87e0a00c08/8d5494eef01f3a29d7017b3e9825bc315d607c71.jp"
返回示例:
{
"face": //在原图片中检测到的人脸数组
[{
"attribute"{
"gender": { //检测到的人脸的性别
"value": "male" //人脸性别结果
"confidence": "1.0", //性别的置信度
},
"smiling ": { //检测到的笑脸
"confidence":”1.0” //笑脸的置信度
},
},
"face_id": "ffffff32c1f3813f0944f52427ed060b", //检测到的人脸的 id
"position": { //检测到的人脸的位置,坐标均进行了归一化,值在 0~1 之间
"center": {
"x": "0.591000", //人脸区域中心 x 坐标,
"y": "0.267000"}, //人脸区域中心 y 坐标
"width": "0.181290", //人脸区域宽度
`height": "0.120600", //人脸区域高度
"eye_left": {
"x": "0.556230",//左眼 x 坐标
"y": "0.230250" //左眼 y 坐标
},
"eye_right": {
"x": "0.638620",//右眼 x 坐标
"y": "0.244190", //右眼 y 坐标
},
"mouth": {
` "x":”0.574910”,//嘴巴中心 x 坐标
"y":” 0.301350”,//嘴巴中心 y 坐标
},
}
}],
"img_id": "966f0f32c1f3813f0944f52427ed060b", //图片 id
"url": "" //请求中的图片 url
"session_id": "966f0f32c1f3813f0944f52427jjjkkk" //唯一标识请求
"img_width": "320" //图片宽度
"img_height": "240" //图片高度
}
附言
除了百度提供的人脸识别服务之外,国内还有其他人脸识别服务提供商,其中 Face++的技术非常先进,值得一看。
百度深度学习研究院目前招聘人脸方向的工程师,包括人脸算法工程师、物体检测算法工程师、多媒体高级研发工程师、计算机视觉研发工程师、大规模机器学习工程师、算法研发工程师、图像方向高级测试开发工程师等,地点在北京和深圳。如果你热爱计算机视觉技术,并且在视觉方向有深入理解或取得过突出成绩,请速投简历。
编撰 SegmentFault