百度云AI
百度云AI概述
- Face++
- 腾讯优图
- ���大讯飞
百度人脸识别基于深度学习的人脸识别方案,准确识别图片中的人脸信息,提供如下功能:
- 人脸检测:精准定位图中人脸,获得眼、口、鼻等72个关键点位置,分析性别、年龄、表情等多种人脸属性
- 人脸对比:对比两张人脸的相似度,并给出相似度评分,从而判断是否同一个人
- 人脸搜索:针对一张人脸照片,在指定人脸集合中搜索,找出最相似的一张脸或多张人脸,并给出相似度分值
- 活体检测:提供离线/在线方式的活体检测能力,判断操作用户是否为真人,有效抵御照片、视频、模具等作弊攻击
- 视频流人脸采集:设备端离线实时监测视频流中的人脸,同时支持处理静态图片或者视频流,输出人脸图片并进行图片质量控制
百度云AI的开发步骤
- 注册账号创建应用
- 搭建工程导入依赖
- 人脸注册
- 人脸识别
百度云AI的注册与认证
(1)注册百度云帐号
https://login.bce.baidu.com/new-reg?tpl=bceplat&from=portal
激活人脸识别,并创建应用
应用创建完成之后,进入刚刚创建的应用获取开发所需的AppID,API Key,Secret Key。
百度云API的入门
搭建环境
创建工程并导入依赖:
com.baidu.aip java-sdk 4.8.0
人脸注册
用于从人脸库中新增用户,可以设定多个用户所在组,及组内用户的人脸图片
典型应用场景:构建您的人脸库,如会员人脸注册,已有用户补全人脸信息等。
public class FaceTest { //人脸注册 @Test public void testFaceRegister() throws Exception { //创建java代码和百度云交互的clent对象 AipFace client = new AipFace("你的AppID", "你的API Key", "你的Secret Key"); //传入可选参数调用接口 HashMap options = new HashMap(); options.put("quality_control", "NORMAL"); //设置质量控制参数,可选值为NORMAL(默认)NONE、LOW。HIGH模式会进行更严格的人脸质量检测,若检测不通过,则会返回不通过的错误码。 options.put("liveness_control", "LOW");//设置活体检测参数,可选值为NONE(默认)LOW、NORMAL、HIGH。NONE模式不进行活体检测,直接返回结果。LOW模式会进行非常简单的活体检测,FAST模式会进行快速的活体检测,FAST模式会更关注速度,而可能增加误识率。HIGH模式会进行非常严格的活体检测, String imageType = "BASE64"; String groupId = "yu"; String userId = "0001"; //构造base64图片字符串 String path = "C:\Users\ZZZYY\3D Objects\gx.jpg"; byte[] bytes = Files.readAllBytes(Paths.get(path)); String image = Base64Util.encode(bytes); // 人脸注册 /** * @param image 本地图片路径,支持jpg、png、gif、bmp,不支持base * imageType 可选值为BASE64、URL,不填默认为BASE * groupId 用户组ID,必填。 * userId 用户ID,必填。 * options 可选参数,json格式。 */ JSONObject res = client.addUser(image, imageType, groupId, userId, options); System.out.println(res.toString(2)); } }
人脸注册 请求参数详情
人脸注册 返回数据参数详情
运行控制台输出
{ "result": { "face_token": "6dd622d4ac489e3***", "location": { "top": 186.57, "left": 215.43, "rotation": 1, "width": 285, "height": 302 } }, "log_id": 2227089050, "error_msg": "SUCCESS", "cached": 0, "error_code": 0, "timestamp": 1707968227 }
查看人脸库
人脸检测
人脸检测:检测图片中的人脸并标记出位置信息;
//人脸检测 @Test public void testFaceDetect() throws IOException { String path = "C:\Users\ZZZYY\3D Objects\logo.png"; byte[] bytes = Files.readAllBytes(Paths.get(path)); String image = Base64Util.encode(bytes); String imageType = "BASE64"; HashMap subOptions = new HashMap(); subOptions.put("max_face_num", "10"); //人脸检测 JSONObject res = client.detect(image, imageType, subOptions); System.out.println(res.toString(2)); } }
人脸检测 请求参数详情
人脸检测 返回数据参数详情
运行控制台输出
{ "result": null, "log_id": 124186657, "error_msg": "pic not has face", "cached": 0, "error_code": 222202, "timestamp": 1707969724 }
换张有人脸图,在运行输出
{ "result": { "face_num": 1, "face_list": [{ "angle": { "roll": -12.3, "pitch": 1.94, "yaw": -0.55 }, "face_token": "6bca071e248a56e212*****", "location": { "top": 170.58, "left": 214.3, "rotation": -9, "width": 181, "height": 185 }, "face_probability": 1 }] }, "log_id": 363572715, "error_msg": "SUCCESS", "cached": 0, "error_code": 0, "timestamp": 1707969963 }
人脸搜索
在指定人脸集合中,找到最相似的人脸
//人脸搜索 @Test public void testFaceSearch() throws IOException { String path = "C:\Users\ZZZYYD Objects\cgx.jpeg"; byte[] bytes = Files.readAllBytes(Paths.get(path)); String image = Base64Util.encode(bytes); String imageType = "BASE64"; HashMap options = new HashMap(); options.put("user_top_num", "1"); //人脸搜索 JSONObject res = client.search(image, imageType, "yu", options); System.out.println(res.toString(2)); } }
人脸搜索 请求参数详情
人脸搜索 返回数据参数详情
运行控制台输出
score:相识度90
{ "result": { "face_token": "6bca071e248a56e212eedae76a331c34", "user_list": [{ "score": 90.101455688477, "group_id": "yu", "user_id": "0001", "user_info": "" }] }, "log_id": 1674136859, "error_msg": "SUCCESS", "cached": 0, "error_code": 0, "timestamp": 1707971274 }
换张彭于晏的照片
score:相识度33
{ "result": { "face_token": "a9d9b891693df035877b3c79d271acc6", "user_list": [{ "score": 33.696895599365, "group_id": "yu", "user_id": "0001", "user_info": "" }] }, "log_id": 1872494893, "error_msg": "SUCCESS", "cached": 0, "error_code": 0, "timestamp": 1707971472 }
人脸更新
用于对人脸库中指定用户,更新其下的人脸图像。
//人脸更新 @Test public void testFaceUpdate() throws Exception { //传入可选参数调用接口 HashMap options = new HashMap(); options.put("quality_control", "NORMAL"); options.put("liveness_control", "LOW"); String imageType = "BASE64"; String groupId = "yu"; String userId = "0001"; //构造base64图片字符串 String path = "C:\Users\ZZZYY\3D Objects\cgx.jpeg"; byte[] bytes = Files.readAllBytes(Paths.get(path)); String image = Base64Util.encode(bytes); //人脸注册 JSONObject res = client.updateUser(image, imageType, groupId, userId, options); System.out.println(res.toString(2)); } }
人脸更新 请求参数详情
人脸更新 返回数据参数详情
运行控制台输出
{ "result": { "face_token": "936a8e9cefe780d1299e77923e870775", "location": { "top": 126.09, "left": 230.77, "rotation": 3, "width": 218, "height": 216 } }, "log_id": 3066523716, "error_msg": "SUCCESS", "cached": 0, "error_code": 0, "timestamp": 1707972666 }
查看人脸库
结语
在这个信息化快速发展的时代,百度云AI的人脸识别技术如同一把钥匙,为我们打开了智能世界的大门。从核心技术到应用场景,再到未来的发展蓝图,每一项创新都体现了科技的力量。
让我们期待,在不久的将来,这项技术能够带给我们更多的惊喜,让我们的生活更加智能、便捷。
The End