全部产品
云市场

客流用户分析服务

更新时间:2020-02-12 10:20:20

客流用户分析服务

前言

用户进行客流视频中分析人的用户行为,如会员识别、用户轨迹跟踪。

1、轨迹查询

可以用于地图打点或者是轨迹绘图,主要是对用户行为做进一步分析。

1.1 轨迹查询

路径:/home/face/user/trace/query
版本:1.0.0

入参

参数 类型 是否必填 备注
faceId String 人脸Id
startTM Long 起始时间,毫秒
endTM Long 结束时间,毫秒

出参

参数 类型 备注
data Json 轨迹信息

示例

入参示例

  1. {
  2. "faceId": "dcac3a6c89a24daeb77f65b8bf1cbf92", //必填, 人脸ID
  3. "startTM": 1578205616000, //必填, 起始时间(毫秒)
  4. "endTM": 1578205666000 //必填, 结束时间(毫秒)
  5. }

出参示例

  1. {
  2. "code": 200,
  3. "message": "success",
  4. "localizedMsg": null,
  5. "data": {
  6. "faceId": "dcac3a6c89a24daeb77f65b8bf1cbf92",
  7. "timeSeries": "{\"1578648767325\":\"1\",\"1578648767953\":\"1\",\"1578648768029\":\"1\",\"1578648768559\":\"1\",\"1578648768661\":\"1\",\"1578648772495\":\"1\",\"1578648772703\":\"1\",\"1578648773217\":\"1\",\"1578648773226\":\"1\",\"1578648776183\":\"1\",\"1578648776288\":\"1\",\"1578648779215\":\"1\",\"1578648779418\":\"1\",\"1578648779753\":\"1\",\"1578648779818\":\"1\",\"1578648785339\":\"1\",\"1578648785347\":\"1\",\"1578648785824\":\"1\",\"1578648786222\":\"1\",\"1578648786541\":\"1\",\"1578648786814\":\"1\",\"1578648802584\":\"1\",\"1578648805305\":\"1\",\"1578648805897\":\"1\",\"1578648813488\":\"1\",\"1578648815022\":\"1\",\"1578648815654\":\"1\",\"1578649407941\":\"1\",\"1578650059893\":\"1\",\"1578650059938\":\"1\",\"1578650076884\":\"1\",\"1578650076947\":\"1\",\"1578650485563\":\"1\",\"1578650485618\":\"1\",\"1578650485651\":\"1\",\"1578650775769\":\"1\",\"1578650775896\":\"1\",\"1578651370740\":\"1\",\"1578651426409\":\"1\",\"1578651426586\":\"1\"}",
  8. "positionMap": "{\"1\":{\"iotId\":\"rDLZdBN1QsERXtr8biXX000100\",\"latitude\":\"30.132176\",\"longitude\":\"120.080502\"}}"
  9. }
  10. }
  11. //timeSeries-json字符串, 时间序列, key为时间戳,value对应positionMap中的key
  12. //positionMap-json字符串,位置信息mapkeytimeSeries中出现的value值, 对应的设备iotId以及精度和纬度

2、人脸以图搜图

需要先通接口1.1查询底库上传地址,获取到上传OSS上传地址后,将比对图片上传到OSS上(HTTP PUT),然后再调用该接口做人脸1比1对比,常用于人证对比的场景。

2.1 1V1人脸比对

路径:/home/face/user/compare
版本:1.0.0

入参

参数 类型 是否必填 备注
faceId String 用户人脸Id
faceKey String 抓拍人脸照片在oss的文件名

出参

参数 类型 备注
data Boolean 比对结果

示例

入参示例

  1. {
  2. "faceId": "dcac3a6c89a24daeb77f65b8bf1cbf92", //必填,人脸ID
  3. "faceKey": "ai/face/xxx/xxx.jpg" //必填
  4. }

出参示例

  1. {
  2. "code": 200,
  3. "message": "success",
  4. "localizedMsg": null,
  5. "data": true
  6. }

**

3、匿名客人管理

这里的匿名客人并不是没有名字的客人,指的是经常在商场出现,缺不在黑白名单中的客人。主要用于客户分析,促进转化率,比如一个客人在近15天内每天都出现,但不是商场的会员,这种是潜在可以发展成会员的客人。

3.1 查询匿名人脸

匿名人脸:摄像头直接抓拍的人脸图片,如果没有绑定用户,就是匿名人脸。该接口用于查询某段时间内出现次数超过阈值caputuredNum的匿名人脸。可以通过绑定接口把匿名人脸绑定到用户下。

路径:/home/face/anonymous/face/query
版本:1.0.0

入参

参数 类型 是否必填 备注
toDate String 格式yyyy-MM-dd,结束日期(含当天),默认昨天
period String 时间段枚举,相对toDate,YESTODAY-昨天,LAST7DAY-近7天,LAST15DAY-近15天,LAST30DAY-近30天,LAST60DAY-近60天,LAST90DAY-近90天
capturedNum Integer 抓拍的次数,YESTODAY 表示一天内抓拍的次数,其他表示抓拍的天数
pageNo Integer 页码
pageSize Integer 分页大小

出参

参数 类型 备注
faceId String 匿名人脸Id
faceUrl String 人脸图片地址

示例

入参示例

  1. {
  2. "period":"LAST90DAY",
  3. "toDate":"2019-11-16",
  4. "campturedLimit":15,
  5. "pageNo":1,
  6. "pageSize":10
  7. }

出参示例

  1. {
  2. "code": 200,
  3. "message": "success",
  4. "data": {
  5. "total":200,
  6. "pageNo":1,
  7. "pageSize":10,
  8. "data":[{
  9. "faceId":"xxx",
  10. "faceUrl":"http://xxx.x"
  11. }]
  12. }
  13. }

3.2 查询匿名人脸的抓拍记录

路径:/home/face/anonymous/face/record/query
版本:1.0.0

入参

参数 类型 是否必填 备注
fromTime Long 时间戳,精确到ms
toTime Long 时间戳,精确到ms
faceId String 匿名人脸Id
pageNo Integer 页码
pageSize Integer 分页大小

出参

参数 类型 备注
faceId String 匿名人脸Id
faceUrl String 人脸图片地址
iotId String 设备Id
caputuredTime Date 抓拍时间

示例

入参示例

  1. {
  2. "fromDate":1578053781000,
  3. "toDate":1578056781000,
  4. "faceId":"xxxxx",
  5. "pageNo":1,
  6. "pageSize":10
  7. }

出参示例

  1. {
  2. "code": 200,
  3. "message": "success",
  4. "data": {
  5. "total":200,
  6. "pageNo":1,
  7. "pageSize":10,
  8. "data":[{
  9. "faceId":"xxx",
  10. "faceUrl":"http://xxx.x",
  11. "iotId":"xxxx",
  12. "capturedTime":1578053781000
  13. }]
  14. }
  15. }

4、最佳实践案例

4.1 以图搜图1V1最佳实践

12
假如有一个用户在平台中底库图片是:
123

4.1.1 构造客户端

服务中所有接口均可以通过API-Gateway访问,具体代码获取可以通过GitHub获取

  1. public static SyncApiClient getClient() {
  2. IoTApiClientBuilderParams builderParams = new IoTApiClientBuilderParams();
  3. builderParams.setAppKey(appKey);
  4. builderParams.setAppSecret(appSecret);
  5. return new SyncApiClient(builderParams);
  6. }

4.1.2 获取图片上传地址

所有图片必须先上传至阿里云OSS,首先需要获取到待上传的阿里云地址。

  1. public static JSONObject getUploadUrl() throws UnsupportedEncodingException {
  2. SyncApiClient syncApiClient = getClient();
  3. IoTApiRequest request = new IoTApiRequest();
  4. //设置api的版本
  5. request.setApiVer("1.0.0");
  6. //设置参数
  7. request.putParam("batch", 10);
  8. //请求参数域名、path、request
  9. String host = "api.link.aliyun.com";
  10. String path = "/home/face/file/getuploadurl";
  11. ApiResponse response = syncApiClient.postBody(host, path, request,true);
  12. JSONObject result = (JSONObject)JSON.parse(new String(response.getBody(),
  13. "utf-8"));
  14. JSONObject uploadJSON = result.getJSONArray("data").getJSONObject(1);
  15. return uploadJSON;
  16. }

4.1.3 上传图片

  1. public static void uploadPicture(String url, String fileName) throws UnirestException, IOException {
  2. HttpClient httpClient = HttpClients.createDefault();
  3. HttpEntity reqEntity = null;
  4. reqEntity = EntityBuilder.create().setBinary(FileUtils.toByteArray(fileName)).build();
  5. HttpPut put = new HttpPut(url);
  6. put.setEntity(reqEntity);
  7. httpClient.execute(put);
  8. }

4.1.4 创建用户

特别需要指出的是,并不是每次比对照片都要创建用户,用户只需要创建一次

  1. SyncApiClient syncApiClient = getClient();
  2. IoTApiRequest request = new IoTApiRequest();
  3. //设置api的版本
  4. request.setApiVer("1.0.0");
  5. //设置参数
  6. //请求参数域名、path、request
  7. String host = "api.link.aliyun.com";
  8. String path = "/home/face/user/batchadd";
  9. JSONArray userList = new JSONArray();
  10. JSONObject user = new JSONObject();
  11. user.put("name","高晓松");
  12. user.put("gender","M");
  13. user.put("age", 50);
  14. user.put("faceKey",faceFileKey);
  15. // 0-白名单
  16. // 1-黑名单
  17. user.put("faceType",0);
  18. userList.add(user);
  19. request.putParam("userList", userList);
  20. ApiResponse response = syncApiClient.postBody(host, path, request,true);
  21. JSONObject result = (JSONObject)JSON.parse(new String(response.getBody(),
  22. "utf-8"));
  23. System.out.println(result);
  24. return result.getJSONArray("data").getJSONObject(0).getString("identityId");

4.1.5 查询用户信息

  1. public static String queryUserInfo(String identityId) throws Exception {
  2. SyncApiClient syncApiClient = getClient();
  3. IoTApiRequest request = new IoTApiRequest();
  4. //设置api的版本
  5. request.setApiVer("1.0.0");
  6. //设置参数
  7. //请求参数域名、path、request
  8. String host = "api.link.aliyun.com";
  9. String path = "/home/face/user/get";
  10. request.putParam("identityId", identityId);
  11. ApiResponse response = syncApiClient.postBody(host, path, request,true);
  12. JSONObject result = (JSONObject)JSON.parse(new String(response.getBody(),
  13. "utf-8"));
  14. System.out.println(result);
  15. return result.getJSONObject("data").getString("faceId");
  16. }

4.1.6 上传待比对图片

与2、3步骤相同,只是图片不同

4.1.7 开始比对

  1. public static Boolean faceCompare(String faceId, String faceKey) throws Exception {
  2. SyncApiClient syncApiClient = getClient();
  3. IoTApiRequest request = new IoTApiRequest();
  4. //设置api的版本
  5. request.setApiVer("1.0.0");
  6. //设置参数
  7. //请求参数域名、path、request
  8. String host = "api.link.aliyun.com";
  9. String path = "/home/face/user/compare";
  10. request.putParam("faceId", faceId);
  11. request.putParam("faceKey", faceKey);
  12. ApiResponse response = syncApiClient.postBody(host, path, request,true);
  13. JSONObject result = (JSONObject)JSON.parse(new String(response.getBody(),
  14. "utf-8"));
  15. System.out.println(result);
  16. return result.getBoolean("data");
  17. }