全部产品
云市场
云游戏

API接入说明

更新时间:2019-08-10 20:06:21

步骤一:准备工作


1.开通阿里云 视频监控智能视觉
2.登录智能视觉控制台,点击“授权管理”,查看“视频监控授权”,点击“去授权”。授权管理开启监控授权

步骤二:将监控流推/拉流至云端

用户需要首先在视频监控产品中创建空间,配置域名,添加监控设备,启动流,监控服务拉流到云端。

视频监控目前支持通过两种协议接入:
  • 通过RTMP协议进行设备推流,直接把监控设备的直播流推入到阿里云视频监控服务的接入点。
  • 通过国标GB/T28181协议进行设备拉流,拉流前需要进行设备国标注册。
接入前准备:

通过公网接入监控上云,需要您先准备好备案过的域名,详情请参见域名备案(如果使用RTMP协议接入,需准备备案过的推流和播流域名。如果使用国标协议接入,仅准备一个备案过的播流域名。)

通过阿里云管理控制台(或API接口)来完成视频监控接流的流程如下:
  1. 创建空间,进行空间配置(或使用API CreateGroup 创建空间)
  2. 配置域名并进行CNAME解析(或使用API DescribeVsDomainDetail获取CNAME解析地址,去域名产品控制台或者使用API AddDomainRecord配置域名解析)
  3. 配置URL鉴权(或通过SDK设置鉴权KEY和过期时间,得到鉴权URL地址)
  4. 添加国标设备,进行设备国标注册,成功后即可启动拉流(或使用API CreateDevice添加设备)

注:如果是国标协议接入,需要在摄像头或网络存储平台或视频管理平台进行设备国标注册,详细流程见设备国标注册。如果是RTMP协议接入,此时可直接使用推流的鉴权URL开始推流。

步骤三:开启智能视觉AI分析

明厨亮灶场景是厨房操作人员卫生是否达标进行实时检测分析,并将检测结果实时返回给客户,主要包括:是否佩戴帽子,口罩,手套等检测。

系统模型ID:

  • 识别是否戴帽子口罩,模型ID:59520769ac6349b08af7bce82bdf7492
  • 识别是否戴手套, 模型ID:c8e2b6418f564576bf2cd9974a48a548

流程说明:

调用智能视觉API接口创建流预测并输入被预测流ID、模型ID以及MNS队列名称信息,启动流预测,从监控服务拉流进行预测处理,并将预测结果回调到用户指定的MNS队列。

  • 调用视频监控服务API: DescribeStream接口返回PlayDomain, App, Name三元组,按规则拼接产生streamId:rtmp://PlayDomain/App/Name

  • 调用智能视觉服务API:CreateStreamPredict接口,创建流预测任务:

  1. CreateStreamPredictRequest request = new CreateStreamPredictRequest();
  2. // 从视频监控服务DescribeStream接口获得拼接产生的 streamId
  3. request.setStreamId(streamId);
  4. // 直播类型,Live
  5. request.setStreamType("Live");
  6. // 输入明厨亮灶系统模型ID
  7. request.setModelIds(modelId);
  8. // 创建流预测时,是否自动开始预测,这里演示手动开始模式。
  9. request.setAutoStart("false");
  10. // 流预测时,保存结果有问题的地址前缀。
  11. request.setOutput("http://ivison-test.oss-cn-beijing.aliyuncs.com/ivision-test/");
  12. // 配置消息通知,当前只支持MNS队列。
  13. JSONObject notify = new JSONObject();
  14. notify.put("MNSQueue", "ivison-test-queue");
  15. request.setNotify(notify.toJSONString());
  16. CreateStreamPredictResponse response = vars.getClient().getAcsResponse(request);
  17. String predictId = response.getPredictId();
  • 调用智能视觉API:StartStreamPredict接口,开启流预测:
  1. StartStreamPredictRequest request = new StartStreamPredictRequest();
  2. // 创建流预测时,返回的预测ID。
  3. request.setPredictId(predictId);
  4. StartStreamPredictResponse response = vars.getClient().getAcsResponse(request);
  1. {
  2. "predictDatas": [
  3. {
  4. "dataUrl": "http://xxx/1.jpg", // 图片地址
  5. "modelId": "xxxx", // 模型ID
  6. "predictId": "xxx", // 预测任务ID
  7. "timestamp": 11111, // 流时间戳
  8. "predictTime": "2019-05-14T10:10:10:001Z", // 进行预测的UTC时间
  9. "status": "success", // 预测结果,success,fail
  10. //预测结果
  11. "predictResult": "{\"objects\":[{\"rect\":{\"top\":197,\"left\":365,\"width\":59,\"height\":80},\"tagId\":\"1\",\"probability\":0.78249687,\"properties\":{\"hat\":{\"result\":true,\"probability\":0.7388},\"mask\":{\"result\":true,\"probability\":0.6523}}},{\"rect\":{\"top\":173,\"left\":425,\"width\":59,\"height\":72},\"tagId\":\"1\",\"probability\":0.6424332,\"properties\":{\"hat\":{\"result\":true,\"probability\":0.2589},\"mask\":{\"result\":false,\"probability\":0.3213}}}]}"
  12. }
  13. ]
  14. }

predictResult是一个json字符串:

  1. {
  2. "objects": [ //人脸列表
  3. {
  4. "rect": { //人脸坐标位置
  5. "top": 197,
  6. "left": 365,
  7. "width": 59,
  8. "height": 80
  9. },
  10. "tagId": "1", //分类tag
  11. "probability": 0.78249687, //人脸概率
  12. "properties": {
  13. "hat": { //帽子
  14. "result": true, //true: 戴帽子,false:没戴帽子
  15. "probability": 0.7388 //帽子概率
  16. },
  17. "mask": { //口罩
  18. "result": true, //true: 戴口罩,false:没戴口罩
  19. "probability": 0.6523 //口罩概率
  20. },
  21. "gloves": { //手套
  22. "result": true, //true: 戴手套,false:没戴手套
  23. "probability": 0.6523 //手套概率
  24. },
  25. }
  26. }
  27. ]
  28. }
  1. // 收到的消息,转换为列表
  2. JSONArray resultArray = JSONObject.parseArray(message.getMessageBodyAsString());
  • 调用智能视觉API:StopStreamPredict 接口停止流预测任务
  1. StopStreamPredictRequest request = new StopStreamPredictRequest();
  2. request.setPredictId(predictId);
  3. StopStreamPredictResponse response = vars.getClient().getAcsResponse(request);
  • 调用智能视觉API: DeleteStreamPredict 删除流预测任务
  1. DeleteStreamPredictRequest request = new DeleteStreamPredictRequest();
  2. request.setPredictId(predictId);
  3. DeleteStreamPredictResponse response = vars.getClient().getAcsResponse(request);
  • 调用智能视觉API:DescribeStreamPredicts 查询流预测任务列表
  1. DescribeStreamPredictsRequest request = new DescribeStreamPredictsRequest();
  2. request.setPredictIds(predictId);
  3. DescribeStreamPredictsResponse response = vars.getClient().getAcsResponse(request);
  4. List<DescribeStreamPredictsResponse.StreamPredict> streamPredicts = response.getStreamPredicts();
  5. for (DescribeStreamPredictsResponse.StreamPredict streamPredict : streamPredicts) {
  6. System.out.println(JSON.toJSONString(streamPredict));
  7. }