更新时间:2019-08-10 20:06
1.开通阿里云 视频监控 和 智能视觉。
2.登录智能视觉控制台,点击“授权管理”,查看“视频监控授权”,点击“去授权”。
用户需要首先在视频监控产品中创建空间,配置域名,添加监控设备,启动流,监控服务拉流到云端。
通过公网接入监控上云,需要您先准备好备案过的域名,详情请参见域名备案。(如果使用RTMP协议接入,需准备备案过的推流和播流域名。如果使用国标协议接入,仅准备一个备案过的播流域名。)
注:如果是国标协议接入,需要在摄像头或网络存储平台或视频管理平台进行设备国标注册,详细流程见设备国标注册。如果是RTMP协议接入,此时可直接使用推流的鉴权URL开始推流。
明厨亮灶场景是厨房操作人员卫生是否达标进行实时检测分析,并将检测结果实时返回给客户,主要包括:是否佩戴帽子,口罩,手套等检测。
调用智能视觉API接口创建流预测并输入被预测流ID、模型ID以及MNS队列名称信息,启动流预测,从监控服务拉流进行预测处理,并将预测结果回调到用户指定的MNS队列。
调用视频监控服务API: DescribeStream接口返回PlayDomain, App, Name三元组,按规则拼接产生streamId:rtmp://PlayDomain/App/Name
调用智能视觉服务API:CreateStreamPredict接口,创建流预测任务:
CreateStreamPredictRequest request = new CreateStreamPredictRequest();
// 从视频监控服务DescribeStream接口获得拼接产生的 streamId
request.setStreamId(streamId);
// 直播类型,Live
request.setStreamType("Live");
// 输入明厨亮灶系统模型ID
request.setModelIds(modelId);
// 创建流预测时,是否自动开始预测,这里演示手动开始模式。
request.setAutoStart("false");
// 流预测时,保存结果有问题的地址前缀。
request.setOutput("http://ivison-test.oss-cn-beijing.aliyuncs.com/ivision-test/");
// 配置消息通知,当前只支持MNS队列。
JSONObject notify = new JSONObject();
notify.put("MNSQueue", "ivison-test-queue");
request.setNotify(notify.toJSONString());
CreateStreamPredictResponse response = vars.getClient().getAcsResponse(request);
String predictId = response.getPredictId();
StartStreamPredictRequest request = new StartStreamPredictRequest();
// 创建流预测时,返回的预测ID。
request.setPredictId(predictId);
StartStreamPredictResponse response = vars.getClient().getAcsResponse(request);
{
"predictDatas": [
{
"dataUrl": "http://xxx/1.jpg", // 图片地址
"modelId": "xxxx", // 模型ID
"predictId": "xxx", // 预测任务ID
"timestamp": 11111, // 流时间戳
"predictTime": "2019-05-14T10:10:10:001Z", // 进行预测的UTC时间
"status": "success", // 预测结果,success,fail
//预测结果
"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}}}]}"
}
]
}
predictResult是一个json字符串:
{
"objects": [ //人脸列表
{
"rect": { //人脸坐标位置
"top": 197,
"left": 365,
"width": 59,
"height": 80
},
"tagId": "1", //分类tag
"probability": 0.78249687, //人脸概率
"properties": {
"hat": { //帽子
"result": true, //true: 戴帽子,false:没戴帽子
"probability": 0.7388 //帽子概率
},
"mask": { //口罩
"result": true, //true: 戴口罩,false:没戴口罩
"probability": 0.6523 //口罩概率
},
"gloves": { //手套
"result": true, //true: 戴手套,false:没戴手套
"probability": 0.6523 //手套概率
},
}
}
]
}
// 收到的消息,转换为列表
JSONArray resultArray = JSONObject.parseArray(message.getMessageBodyAsString());
StopStreamPredictRequest request = new StopStreamPredictRequest();
request.setPredictId(predictId);
StopStreamPredictResponse response = vars.getClient().getAcsResponse(request);
DeleteStreamPredictRequest request = new DeleteStreamPredictRequest();
request.setPredictId(predictId);
DeleteStreamPredictResponse response = vars.getClient().getAcsResponse(request);
DescribeStreamPredictsRequest request = new DescribeStreamPredictsRequest();
request.setPredictIds(predictId);
DescribeStreamPredictsResponse response = vars.getClient().getAcsResponse(request);
List<DescribeStreamPredictsResponse.StreamPredict> streamPredicts = response.getStreamPredicts();
for (DescribeStreamPredictsResponse.StreamPredict streamPredict : streamPredicts) {
System.out.println(JSON.toJSONString(streamPredict));
}
在文档使用中是否遇到以下问题
更多建议
匿名提交