视觉能力
视觉能力目前主要指人员检测和识别两个模块,Api提供主要集中在PersonApi和RobotApi。
人员信息检测是本地能力,人站在机器人前方(排除光线较差的情况),机器人可以检测到前方人员,人站的较远时人脸和人体均可检测到,人站的比较近的时候只能检测到人脸信息。当人员id大于等于0时,代表着该人员的人脸信息完整,可以获取到该人人脸照片进行识别。
人员识别需要使用人脸照片进行识别,该能力需要使用网络,请注意获取人员照片时,保证人员符合采取照片条件。
注意:使用机器人视觉能力的时候,不可以同时使用机器人摄像头。这将会导致视觉能力报错失效
具体使用流程详见Demo,下面为API介绍:
private int id; //人脸本地识别id,此id可用于焦点跟随等。
private double distance; //距离
private double faceAngleX; //人脸x轴角度
private double faceAngleY; //人脸y轴角度
private int headSpeed; //当前机器人头部转动速度
private long latency; //数据延迟
private int facewidth; //人脸宽度
private int faceheight; //人脸高度
private int faceX; //人脸x坐标
private int faceY; //人脸y坐标
private int bodyX; //身体x坐标
private int bodyY; //身体y坐标
private int bodywidth; //身体宽度
private int bodyheight; //身体高度
private double angleInView; //人相对于机器人头部的角度
private String quality; //检查质量参数
private int age; //年龄(云端注册后会返回估算值)
private String gender; //性别(按照国家规定,此项必须授权注册后才会返回结果)
private int glasses; //是否戴眼睛
private String remoteFaceId; //如果已注册,注册的人脸远端id
private String faceRegisterTime; //注册时间
//更多Person信息,可参见SDK中com.ainirobot.coreservice.client.listener.Person类定义
方法名称:registerPersonListener / unregisterPersonListener
stopGetAllPersonInfo
调用方式:
PersonListener listener = new PersonListener() {
@Override
public void personChanged() {
super.personChanged();
//人员变化时,可以调用获取当前人员列表接口获取机器人视野内所有人员
// !!!! 这里是ms级的回调 !!!!
//getPictureById和getPersonInfoFromNet 不可以不做判断的出现在这里
}
};
//注册人员监听 PersonApi.getInstance().registerPersonListener(listener); //取消注册人员监听 PersonApi.getInstance().unregisterPersonListener(listener);
参数说明:
- listener:人员信息变化监听
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
方法名称:getAllPersons
调用方式:
//获取机器人视野内全部人员信息 List<Person> personList = PersonApi.getInstance().getAllPersons(); //获取机器人视野内1m范围内所有的人员信息 List personList = PersonApi.getInstance().getAllPersons(1);
参数说明:
- maxDistance:机器人多大视野范围内,单位为米,机器人能识别最准确的人员距离是1-3米。
返回:
- personList:人员信息列表
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
方法名称:getAllBodyList
调用方式:
//获取机器人视野内所有人体信息的人员列表 List<Person> personList = PersonApi.getInstance().getAllBodyList(); //获取机器人视野内1m范围内所有的人体信息的人员列表 List personList = PersonApi.getInstance().getAllBodyList(1);
参数说明:
- maxDistance:机器人多大视野范围内,单位为米,机器人能识别最准确的人员距离是1-3米。
返回:
- personList:人员信息列表
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
方法名称:getAllFaceList
调用方式:
//获取机器人视野内所有有人脸信息的人员列表 List<Person> personList = PersonApi.getInstance().getAllFaceList(); //获取机器人视野内1m范围内所有有人脸信息的人员列表 List personList = PersonApi.getInstance().getAllFaceList(1);
参数说明:
- maxDistance:机器人多大视野范围内,单位为米,机器人能识别最准确的人员距离是1-3米。
返回:
- personList:人员信息列表
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
方法名称:getCompleteFaceList
调用方式:
//获取机器人视野内所有有完整人脸信息的人员列表 List<Person> personList = PersonApi.getInstance().getCompleteFaceList();
返回:
- personList:人员信息列表
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
获取正在焦点跟随的人员(此方法仅在焦点跟随进行中有效)
方法名称:getFocusPerson
调用方式:
Person person = PersonApi.getInstance().getFocusPerson();
返回:
- person:人员信息
焦点跟随相关API,点击这里查看。
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 否 | 否 | 是 |
方法名称:getPictureById
调用方式:
RobotApi.getInstance().getPictureById(reqId, faceId, count, new CommandListener() {
@Override
public void onResult(int result, String message) {
try {
JSONObject json = new JSONObject(message);
String status = json.optString("status");
//获取照片成功
if (Definition.RESPONSE_OK.equals(status)) {
JSONArray pictures = json.optJSONArray("pictures");
if (!TextUtils.isEmpty(pictures.optString(0))) {
//照片本地存储全路径
String picturePath = pictures.optString(0);
}
}
} catch (JSONException | NullPointerException e) {
e.printStackTrace();
}
}
});
参数说明:
- faceID:人脸id,可通过本地人脸识别获得(Person的id)
- count:需要获取的照片数量,此参数目前无效,默认只有一张
注意:该接口保存的图片在使用完后需要手动删除
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
方法名称:startRegister,传入姓名,该方法会实时从摄像头中获取人脸,将该人脸注册为该姓名。日常使用该方式注册人脸
调用方式:
RobotApi.getInstance().startRegister(reqId, personName, timeout, tryCount, secondDelay, new ActionListener() {
@Override
public void onResult(int status, String response) throws RemoteException {
if (Definition.RESULT_OK != status) {
//注册失败
return;
}
try {
JSONObject json = new JSONObject(response);
String remoteType = json.optString(Definition.REGISTER_REMOTE_TYPE);
String remoteName = json.optString(Definition.REGISTER_REMOTE_NAME);
if (Definition.REGISTER_REMOTE_SERVER_EXIST.equals(remoteType)) {
//当前用户已存在
} else if (Definition.REGISTER_REMOTE_SERVER_NEW.equals(remoteType)) {
//新注册用户成功
}
} catch (JSONException e) {
e.printStackTrace();
} }});
参数说明:
- personName:注册名称
- timeout:注册超时时间,注册失败时会尝试重新注册,直到超时
- tryCount:失败重试次数,重试的时间大于timeout后,会放弃重试
- secondDelay:重试时间间隔
注意:不要重复注册同一个人脸
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
方法名称:remoteRegister
调用方式:
RobotApi.getInstance().remoteRegister(reqId, name, path, new CommandListener() {
@Override
public void onResult(int result, String message) {
try {
JSONObject jsonObject = new JSONObject(message);
int code = jsonObject.optInt("code", -1);
switch (code) {
case 0://成功
break;
case Definition.REMOTE_CODE_FACE_INVALID://图片无效
break;
default://其他
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
参数说明:
- name:注册名称
- path:图片路径,可以通过getPictureById获取
注意:不要重复注册同一个人脸
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
方法名称:getPersonInfoFromNet
调用方式:
RobotApi.getInstance().getPersonInfoFromNet(reqId, faceId, pictures, new CommandListener() {
@Override
public void onResult(int result, String message) {
try {
JSONObject json = new JSONObject(message);
JSONObject info = json.getJSONObject("people");
info.getString("name"); //名称
info.getString("gender"); //性别
info.getString("age"); //年龄
} catch (JSONException | NullPointerException e) {
e.printStackTrace();
}
}
});
参数说明:
- faceID:人脸id,可通过本地人脸识别获得(Person的id)
- pictures:人脸照片,可通过getPictureById接口获得
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 是 | 是 | 是 | 是 |
方法名称:switchCamera 调用方式:
RobotApi.getInstance().switchCamera(reqId, camera, new CommandListener() {
@Override
public void onResult(int result, String message) {
try {
JSONObject json = new JSONObject(message);
if (Definition.RESPONSE_OK.equals(json.getString("status"))) {
//切换成功
}
} catch (JSONException | NullPointerException e) {
e.printStackTrace();
}
}
});
参数
- camera:摄像头,String 类型 Definition.JSON_HEAD_FORWARD 前置摄像头 Definition.JSON_HEAD_BACKWARD 后置摄像头
适用平台:
| 豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
| 是 | 是 | 否 | 否 | 否 | 否 |