diff --git a/proxy.config.json b/proxy.config.json index df2c281..fe029a2 100644 --- a/proxy.config.json +++ b/proxy.config.json @@ -1,11 +1,11 @@ { "/api": { - "target": "http://121.36.37.70:8080", + "target": "http://10.156.134.54:8080", "secure": false, "changeOrigin": true }, "/signalr": { - "target": "http://121.36.37.70:8080", + "target": "http://10.156.134.54:8080", "secure": false, "ws": true, "logLevel": "debug" diff --git a/src/app/system-management/host-config/host-config.component.ts b/src/app/system-management/host-config/host-config.component.ts index 7b71fe8..d544d85 100644 --- a/src/app/system-management/host-config/host-config.component.ts +++ b/src/app/system-management/host-config/host-config.component.ts @@ -289,12 +289,12 @@ export class HostConfigComponent implements OnInit { return item.isEnabled; }) let config4 = `video_rate: 5 -inference_buffer_second: 6 +inference_buffer_second: 10 sources:` copyListOfData.forEach((item: any, index) => { if (item.type == 3 && item.dimensionedPointsObj && item.dimensionedPointsObj.arrow.length != 0) { let arrowArr = item.dimensionedPointsObj.arrow - let str = arrowArr[1].startX + ';' + arrowArr[1].startY + ';' + arrowArr[1].endX + ';' + arrowArr[1].endY + ';' + arrowArr[0].startX + ';' + arrowArr[0].startY + ';' + arrowArr[0].endX + ';' + arrowArr[0].endY + let str = arrowArr[1].startX + ',' + arrowArr[1].startY + ',' + arrowArr[1].endX + ',' + arrowArr[1].endY + ',' + arrowArr[0].startX + ',' + arrowArr[0].startY + ',' + arrowArr[0].endX + ',' + arrowArr[0].endY config4 += ` - name: '${item.name}' user: '${item.user}' @@ -305,7 +305,7 @@ sources:` ` } else if (item.type == 2 && item.dimensionedPointsObj && item.dimensionedPointsObj.arrow.length != 0 && item.dimensionedPointsObj.arrowOfWest && item.dimensionedPointsObj.arrowOfWest.length == 0) { let arrowArr = item.dimensionedPointsObj.arrow - let str = arrowArr[1].startX + ';' + arrowArr[1].startY + ';' + arrowArr[1].endX + ';' + arrowArr[1].endY + ';' + arrowArr[0].startX + ';' + arrowArr[0].startY + ';' + arrowArr[0].endX + ';' + arrowArr[0].endY + let str = arrowArr[1].startX + ',' + arrowArr[1].startY + ',' + arrowArr[1].endX + ',' + arrowArr[1].endY + ',' + arrowArr[0].startX + ',' + arrowArr[0].startY + ',' + arrowArr[0].endX + ',' + arrowArr[0].endY config4 += ` - name: '${item.name}' user: '${item.user}' @@ -316,10 +316,10 @@ sources:` ` } else if (item.type == 2 && item.dimensionedPointsObj && item.dimensionedPointsObj.arrow.length != 0 && item.dimensionedPointsObj.arrowOfWest && item.dimensionedPointsObj.arrowOfWest.length != 0) { let arrowArr = item.dimensionedPointsObj.arrow - let str = arrowArr[1].startX + ';' + arrowArr[1].startY + ';' + arrowArr[1].endX + ';' + arrowArr[1].endY + ';' + arrowArr[0].startX + ';' + arrowArr[0].startY + ';' + arrowArr[0].endX + ';' + arrowArr[0].endY + let str = arrowArr[1].startX + ',' + arrowArr[1].startY + ',' + arrowArr[1].endX + ',' + arrowArr[1].endY + ',' + arrowArr[0].startX + ',' + arrowArr[0].startY + ',' + arrowArr[0].endX + ',' + arrowArr[0].endY let arrowArr2 = item.dimensionedPointsObj.arrowOfWest - let str2 = arrowArr2[1].startX + ';' + arrowArr2[1].startY + ';' + arrowArr2[1].endX + ';' + arrowArr2[1].endY + ';' + arrowArr2[0].startX + ';' + arrowArr2[0].startY + ';' + arrowArr2[0].endX + ';' + arrowArr2[0].endY - let str3 = '[' + str + ']' + ',' + '[' + str2 + ']' + let str2 = arrowArr2[1].startX + ',' + arrowArr2[1].startY + ',' + arrowArr2[1].endX + ',' + arrowArr2[1].endY + ',' + arrowArr2[0].startX + ',' + arrowArr2[0].startY + ',' + arrowArr2[0].endX + ',' + arrowArr2[0].endY + let str3 = '[' + str + ',' + str2 + ']' config4 += ` - name: '${item.name}' user: '${item.user}' @@ -552,16 +552,9 @@ ${newstr}class-id=0 console.log('泄油管区域', xieyouguan) console.log('静电接地', jingdian) config2 = `# The all in one config file. -# RTSP sources -# type -# 0 ViolateArea.ENTRANCE, -# 1 ViolateArea.GAS_AREA, -# 2 ViolateArea.FUEL_AREA, -# 3 ViolateArea.MART, -# don't change the key name. debug: false #when the debug is on, osd. -video_record: 3 #time to record into the .ts video +video_record: 15 #time to record into the .ts video sources: config: 'config/source.yaml' @@ -572,6 +565,9 @@ tracker: analytics: config: 'config/config_nvdsanalytics.txt' +## 通用模型 ## + +# 1:人物检测 peoplenet: enable: true apply_on: -1 @@ -583,8 +579,9 @@ peoplenet: detected-min-w: 20 detected-min-h: 200 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/peoplenet/weights/resnet34_peoplenet_int8.etlt_b16_gpu0_int8.engine' - threshold: 0.8 + threshold: 0.3 +# 2:车辆检测 trafficcam: enable: true apply_on: 0 @@ -597,6 +594,7 @@ trafficcam: detected-min-h: 100 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/trafficcam/weights/resnet18_trafficcamnet_pruned.etlt_b16_gpu0_int8.engine' +# 3:人物倚靠行为 actionnet: enable: false apply_on: 1 @@ -612,6 +610,26 @@ actionnet: interval: 1 batch_size: 32 +# 4:烟火检测 +fire_smoke_net: + enable: true + apply_on: -1 + interval: 1 + batch_size: 16 + model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/fire_smoke_net/weights/yolov4_cspdarknet_tiny_fp16.etlt_b2_gpu0_fp16.engine' + threshold: 0.95 + +# 5:抽烟打电话检测 +smoking_calling_net: + enable: true + apply_on: -1 + interval: 1 + batch_size: 2 + model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/smoking_calling_net/weights/resnet50_smoking_calling_net_fp16.etlt_b2_gpu0_fp16.engine' + +## 油站专用模型 ## + +# 1:身份判别:工装、反光衣、便衣 idnet: enable: true apply_on: -1 @@ -619,8 +637,9 @@ idnet: batch_size: 2 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/idnet/weights/resnet50_idnet_fp16.etlt_b2_gpu0_fp16.engine' +# 2:卸油区物体识别:油罐车、灭火器、手推车、三角木、取样桶、隔离锥、卸油管 oilnet: - enable: true + enable: false apply_on: 2 interval: 1 batch_size: 2 @@ -631,21 +650,7 @@ oilnet: model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/oilnet/weights/yolov4_cspdarknet_tiny_fp16.etlt_b2_gpu0_fp16.engine' threshold: 0.5 -fire_smoke_net: - enable: true - apply_on: -1 - interval: 1 - batch_size: 2 - model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/fire_smoke_net/weights/yolov4_cspdarknet_tiny_fp16.etlt_b2_gpu0_fp16.engine' - threshold: 0.95 - -smoking_calling_net: - enable: true - apply_on: -1 - interval: 1 - batch_size: 2 - model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/smoking_calling_net/weights/resnet50_smoking_calling_net_fp16.etlt_b2_gpu0_fp16.engine' - +# 3:卸油管是否连接判定 connet_oil: enable: true apply_on: 2 @@ -656,6 +661,7 @@ connet_oil: batch_size: 2 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/connet_oil/weights/resnet50_connet_oil_fp16.etlt_b2_gpu0_fp16.engine' +# 4:静电接地仪器是否连接判定 connet_grounder: enable: true apply_on: 2 @@ -666,28 +672,36 @@ connet_grounder: batch_size: 2 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/connet_grounder/weights/resnet50_connet_grounder_fp16.etlt_b2_gpu0_fp16.engine' - #new field for rule threshold +# 5:散装桶加油 +bulk_oil_net: + enable: true + apply_on: 2 + interval: 1 + batch_size: 2 + model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/bulk_oil_net/weights/yolov4_cspdarknet_tiny_fp16.etlt_b2_gpu0_fp16.engine' + threshold: 0.3 + +# 模型阈值通用设定 rule_threshold: object_occurence_interval_second: 3 object_disappear_interval_second: 10 on_car_parking_interval_second: 1800 on_fire_smoke_interval_second: 5 + on_helmet_interval_second: 5 threshold_relying_sitting: 0.4 #rolling mean confidence threshold_smoking_calling: 0.3 #rolling mean confidence threshold_connecting: 0.667 #rolling mean confidence - threshold_identity: 0.5 #only to filter out people net error + threshold_identity: 0.1 #only to filter out people net error + threshold_helmet: 0 #num of helmet detected on a person + enable_seconday_model: False # secondary model (双模型) + threshold_secondary_model: 0.5 + secondary_model_window: 50 + secondary_model_path: '/opt/app/xgboost' ` config3 = `# The all in one config file. -# RTSP sources -# type -# 0 ViolateArea.ENTRANCE, -# 1 ViolateArea.GAS_AREA, -# 2 ViolateArea.FUEL_AREA, -# 3 ViolateArea.MART, -# don't change the key name. debug: false #when the debug is on, osd. -video_record: 3 #time to record into the .ts video +video_record: 15 #time to record into the .ts video sources: config: 'config/source.yaml' @@ -698,6 +712,9 @@ tracker: analytics: config: 'config/config_nvdsanalytics.txt' +## 通用模型 ## + +# 1:人物检测 peoplenet: enable: true apply_on: -1 @@ -711,6 +728,7 @@ peoplenet: model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/peoplenet/weights/resnet34_peoplenet_int8.etlt_b16_gpu0_int8.engine' threshold: 0.8 +# 2:车辆检测 trafficcam: enable: true apply_on: 0 @@ -723,6 +741,7 @@ trafficcam: detected-min-h: 100 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/trafficcam/weights/resnet18_trafficcamnet_pruned.etlt_b16_gpu0_int8.engine' +# 3:人物倚靠行为 actionnet: enable: false apply_on: 1 @@ -738,6 +757,26 @@ actionnet: interval: 1 batch_size: 32 +# 4:烟火检测 +fire_smoke_net: + enable: true + apply_on: -1 + interval: 1 + batch_size: 16 + model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/fire_smoke_net/weights/yolov4_cspdarknet_tiny_fp16.etlt_b2_gpu0_fp32.engine' + threshold: 0.95 + +# 5:抽烟打电话检测 +smoking_calling_net: + enable: true + apply_on: -1 + interval: 1 + batch_size: 2 + model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/smoking_calling_net/weights/resnet50_smoking_calling_net_fp16.etlt_b2_gpu0_fp32.engine' + +## 油站专用模型 ## + +# 1:身份判别:工装、反光衣、便衣 idnet: enable: true apply_on: -1 @@ -745,8 +784,9 @@ idnet: batch_size: 2 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/idnet/weights/resnet50_idnet_fp16.etlt_b2_gpu0_fp32.engine' +# 2:卸油区物体识别:油罐车、灭火器、手推车、三角木、取样桶、隔离锥、卸油管 oilnet: - enable: true + enable: false apply_on: 2 interval: 1 batch_size: 2 @@ -757,21 +797,7 @@ oilnet: model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/oilnet/weights/yolov4_cspdarknet_tiny_fp16.etlt_b2_gpu0_fp32.engine' threshold: 0.5 -fire_smoke_net: - enable: true - apply_on: -1 - interval: 1 - batch_size: 2 - model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/fire_smoke_net/weights/yolov4_cspdarknet_tiny_fp16.etlt_b2_gpu0_fp32.engine' - threshold: 0.95 - -smoking_calling_net: - enable: true - apply_on: -1 - interval: 1 - batch_size: 2 - model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/smoking_calling_net/weights/resnet50_smoking_calling_net_fp16.etlt_b2_gpu0_fp32.engine' - +# 3:卸油管是否连接判定 connet_oil: enable: true apply_on: 2 @@ -782,6 +808,7 @@ connet_oil: batch_size: 2 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/connet_oil/weights/resnet50_connet_oil_fp16.etlt_b2_gpu0_fp32.engine' +# 4:静电接地仪器是否连接判定 connet_grounder: enable: true apply_on: 2 @@ -792,16 +819,31 @@ connet_grounder: batch_size: 2 model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/connet_grounder/weights/resnet50_connet_grounder_fp16.etlt_b2_gpu0_fp32.engine' - #new field for rule threshold +# 5:散装桶加油 +bulk_oil_net: + enable: true + apply_on: 2 + interval: 1 + batch_size: 2 + model_engine_file: '/opt/nvidia/deepstream/deepstream-6.0/sources/project/models/bulk_oil_net/weights/yolov4_cspdarknet_tiny_fp16.etlt_b2_gpu0_fp32.engine' + threshold: 0.3 + +#模型阈值通用设定 rule_threshold: object_occurence_interval_second: 3 object_disappear_interval_second: 10 on_car_parking_interval_second: 1800 on_fire_smoke_interval_second: 5 + on_helmet_interval_second: 5 threshold_relying_sitting: 0.4 #rolling mean confidence threshold_smoking_calling: 0.3 #rolling mean confidence threshold_connecting: 0.667 #rolling mean confidence - threshold_identity: 0.5 #only to filter out people net error + threshold_identity: 0.1 #only to filter out people net error + threshold_helmet: 0 #num of helmet detected on a person + enable_seconday_model: False # secondary model (双模型) + threshold_secondary_model: 0.5 + secondary_model_window: 50 + secondary_model_path: '/opt/app/xgboost' ` sessionStorage.setItem('config1', config1) diff --git a/src/app/system-management/organization/organization.component.ts b/src/app/system-management/organization/organization.component.ts index 99f7f62..5d53754 100644 --- a/src/app/system-management/organization/organization.component.ts +++ b/src/app/system-management/organization/organization.component.ts @@ -122,7 +122,7 @@ export class OrganizationComponent implements OnInit { } editOr(node) { - // console.log(node) + console.log(node) const modal = this.modal.create({ nzTitle: '编辑组织机构', nzContent: EditorComponent, @@ -202,7 +202,6 @@ export class OrganizationComponent implements OnInit { parentId = event.node.origin.parentId } } - let body = { parentId: parentId, name: event.dragNode.origin.name, @@ -220,97 +219,17 @@ export class OrganizationComponent implements OnInit { return false }) - - // console.log('this.allOrList', this.allOrList) - // let orders = {} - // let originalData = JSON.parse(JSON.stringify(this.allOrList || [])) //tree原始数据 - // let targetNodeData = []//拖动移入节点的数据,用于遍历求出放在该数组的第几位 - //找到需要重新排序的数组 - // if (this.pos == 0) { - // originalData.forEach(item => { - // if (item.parentId == event.node.key) { - // targetNodeData.push(item) - // } - // }) - // } else { - // if (event.node.origin.parentId) {//如果拖动目标为非一级节点 - // originalData.forEach(item => { - // if (item.parentId == event.node.origin.parentId) { - // targetNodeData.push(item) - // } - // }) - // } else {//如果拖动目标为一级节点 - // originalData.forEach(item => { - // if (!item.parentId) { - // targetNodeData.push(item) - // } - // }) - // } - // } - - - // let idArr = [] - // targetNodeData.forEach(i => { - // idArr.push(i.id) - // }) - // if (this.pos == 0 && event.node.origin.children.length == 1) { - // // console.log("移入,没有兄弟") - // let key = event.dragNode.key - // orders[key] = 0 - // parentId = event.node.key - // } else { - - // let array = [] - // targetNodeData.forEach(item => { - // if (item.id != event.dragNode.key) { //将拖动项先移除掉 - // array.push(item) - // } - // }) - // if (event.dragNode.isEnd[event.dragNode.isEnd.length - 1]) { //如果移入到最后一个 - // // console.log("最后") - // array.push(event.dragNode.origin) - // } else if (event.dragNode.isStart[event.dragNode.isStart.length - 1]) {//如果移入到第一个 - // // console.log("第一") - // array.unshift(event.dragNode.origin) - // } else {//如果移入中间位置 - // // console.log("中间") - // array.splice(event.node.origin.order, 0, event.dragNode.origin) - // } - // array.forEach((item, key) => { - // orders[item.id] = key - // }) - // console.log("移入,多个兄弟",orders) - // } - - // let obj = { - // id: event.dragNode.origin.id, - // parentId: parentId, - // orders: orders - // } - - // this.http.put("/api/DisposalNodes/Sort", obj).subscribe(data => { - // const config = new MatSnackBarConfig(); - // config.verticalPosition = 'top'; - // config.duration = 3000 - // this.snackBar.open('排序成功', '确定', config) - // this.refurbishTreeData() - // }) - - - } } isDrag //是否可以拖动 pos//放置位置 beforeDrop = (arg: NzFormatBeforeDropEvent) => { console.log('arg', arg) - if (arg.node.level === 0) {//如果为数据节点则不允许拖到一级节点 + if (arg.pos != 0 && arg.node.level === 0) {//如果为数据节点则不允许拖到一级节点 this.message.create('warning', '不允许拖拽到一级节点'); this.isDrag = false return of(false); } else { - this.isDrag = true - this.pos = arg.pos return of(true) } }