diff --git a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt index 05ea8c7..b49bee0 100644 --- a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt @@ -34,13 +34,14 @@ } val TARGET_NAMES_ARRAY = arrayListOf( - "三脚架", "三通", "标准软管", "人", "切断阀", "危险告知牌", "压力表", - "压力表", "防护服", "呼气器", "喉箍", "气体检测报警仪", "水枪", "", - "安全告知牌", "安全帽", "安全警示标识", "安全绳", "对讲设备", "水枪", "工服", - "开关", "燃气探测器", "接头", "施工路牌", "气体检测报警仪", "水带", "水带", - "流量计", "消火栓箱", "灭火器", "灶台", "灶具", "照明设备", "熄火保护", - "电线裸露", "电路图", "警戒线", "调压器", "调长器", "贴纸", "跨电线", - "路锥", "过滤器", "配电箱外部", "长柄阀门", "", "", "阀门", + "三脚架", "三通", "标准软管", "人", "作业信息公示牌", "切断阀", "危险告知牌", + "压力表", "压力表", "防护服", "可燃气体报警控制器", "呼气器", "喉箍", "气体检测报警仪", + "水枪", "头", "安全告知牌", "安全带", "安全帽", "安全标识", "安全标识牌", + "安全绳", "对讲设备", "水枪", "工服", "开关", "报警装置", "接头", + "施工路牌", "气体检测报警仪", "水带", "水带", "流量计", "消火栓箱", "灭火器", + "灶台", "灶具", "照明设备", "熄火保护", "燃气管道", "燃气计量器具", "电线裸露", + "电路图", "警戒线", "调压器", "调长器", "贴纸", "跨电线", "路锥", + "过滤器", "配电箱内部", "配电箱外部", "长柄阀门", "闪光灯亮", "闪光灯灭", "阀门", "非标准软管", "送风设备", "送风设备" ) diff --git a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt index 05ea8c7..b49bee0 100644 --- a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt @@ -34,13 +34,14 @@ } val TARGET_NAMES_ARRAY = arrayListOf( - "三脚架", "三通", "标准软管", "人", "切断阀", "危险告知牌", "压力表", - "压力表", "防护服", "呼气器", "喉箍", "气体检测报警仪", "水枪", "", - "安全告知牌", "安全帽", "安全警示标识", "安全绳", "对讲设备", "水枪", "工服", - "开关", "燃气探测器", "接头", "施工路牌", "气体检测报警仪", "水带", "水带", - "流量计", "消火栓箱", "灭火器", "灶台", "灶具", "照明设备", "熄火保护", - "电线裸露", "电路图", "警戒线", "调压器", "调长器", "贴纸", "跨电线", - "路锥", "过滤器", "配电箱外部", "长柄阀门", "", "", "阀门", + "三脚架", "三通", "标准软管", "人", "作业信息公示牌", "切断阀", "危险告知牌", + "压力表", "压力表", "防护服", "可燃气体报警控制器", "呼气器", "喉箍", "气体检测报警仪", + "水枪", "头", "安全告知牌", "安全带", "安全帽", "安全标识", "安全标识牌", + "安全绳", "对讲设备", "水枪", "工服", "开关", "报警装置", "接头", + "施工路牌", "气体检测报警仪", "水带", "水带", "流量计", "消火栓箱", "灭火器", + "灶台", "灶具", "照明设备", "熄火保护", "燃气管道", "燃气计量器具", "电线裸露", + "电路图", "警戒线", "调压器", "调长器", "贴纸", "跨电线", "路锥", + "过滤器", "配电箱内部", "配电箱外部", "长柄阀门", "闪光灯亮", "闪光灯灭", "阀门", "非标准软管", "送风设备", "送风设备" ) diff --git a/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt index 26a7790..1176049 100644 --- a/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt @@ -15,12 +15,11 @@ fun siftHiddenTrouble( segmentationResults: MutableList, detectResults: MutableList ) { - //只有有限空间作业才筛选以下隐患 when (RuntimeCache.sceneName) { "有限空间作业" -> { //结果包含人 if (detectResults.isContains(3)) { - if (!detectResults.isContains(20) || !detectResults.isContains(8)) { + if (!detectResults.isContains(24) || !detectResults.isContains(9)) { //不包含工服/防护服 val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerClothes" @@ -28,7 +27,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(15)) { + if (!detectResults.isContains(18)) { //不包含安全帽 val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyHat" @@ -38,7 +37,7 @@ } //结果不包含呼吸防护设备 - if (!detectResults.isContains(9)) { + if (!detectResults.isContains(11)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerMask" result.warning = "现场无呼吸器" @@ -46,7 +45,7 @@ } //结果不包含路锥、警戒线 - if (!detectResults.isContains(42) || !detectResults.isContains(37)) { + if (!detectResults.isContains(48) || !detectResults.isContains(43)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoEnclosure" result.warning = "现场无围挡设施" @@ -54,9 +53,9 @@ } //结果不包含安全告知牌 - if (!detectResults.isContains(14) || - !detectResults.isContains(5) || - !detectResults.isContains(24) + if (!detectResults.isContains(16) || + !detectResults.isContains(6) || + !detectResults.isContains(28) ) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWarningSign" @@ -64,8 +63,7 @@ hiddenTroubles.add(result) } - //TODO 新类型 - if (!detectResults.isContains(999999)) { + if (!detectResults.isContains(4)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoJobInformationSign" result.warning = "现场无作业信息公示牌" @@ -73,7 +71,7 @@ } //结果不包含通风设备 - if (!detectResults.isContains(50) || !detectResults.isContains(51)) { + if (!detectResults.isContains(57) || !detectResults.isContains(58)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoAirSupply" result.warning = "现场无送风设备" @@ -81,7 +79,7 @@ } //结果不包含井下照明设备 - if (!detectResults.isContains(33)) { + if (!detectResults.isContains(37)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoLighting" result.warning = "现场无照明设备" @@ -89,7 +87,7 @@ } //结果不包含对讲设备 - if (!detectResults.isContains(18)) { + if (!detectResults.isContains(22)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoIntercom" result.warning = "现场无对讲设备" @@ -105,7 +103,7 @@ } //结果不包含气体检测仪 - if (!detectResults.isContains(25)) { + if (!detectResults.isContains(13) || !detectResults.isContains(29)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoGasDetector" result.warning = "现场无气体检测报警仪" @@ -114,34 +112,9 @@ } "配电箱" -> { - //结果包含配电箱 - if (detectResults.isContains(44)) { - //且还包括开关 - if (detectResults.isContains(21)) { - if (!detectResults.isContains(36)) { - //不包含警示标识 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoCircuitDiagram" - result.warning = "配电箱内无电路图" - hiddenTroubles.add(result) - } - - if (detectResults.isContains(35)) { - //包含电线裸露 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasExposedWire" - result.warning = "配电箱内部电线裸露" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(41)) { - //包含跨电线 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoJumperWire" - result.warning = "配电箱箱体和箱盖未跨接" - hiddenTroubles.add(result) - } - } else { + //结果包含配电箱外 + if (detectResults.isContains(51)) { + if (!detectResults.isContains(19)) { //不包含警示标识 val result = HiddenTroubleResult() result.alarmCode = "DistributionBoxHasNoWarningSign" @@ -149,6 +122,33 @@ hiddenTroubles.add(result) } } + + //结果包含配电箱内 + if (detectResults.isContains(50)) { + if (!detectResults.isContains(42)) { + //不包含无电路图 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoCircuitDiagram" + result.warning = "配电箱内无电路图" + hiddenTroubles.add(result) + } + + if (detectResults.isContains(41)) { + //包含电线裸露 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasExposedWire" + result.warning = "配电箱内部电线裸露" + hiddenTroubles.add(result) + } + + if (!detectResults.isContains(47)) { + //包含跨电线 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoJumperWire" + result.warning = "配电箱箱体和箱盖未跨接" + hiddenTroubles.add(result) + } + } } "非居用户" -> { @@ -159,7 +159,7 @@ hiddenTroubles.add(result) } - if (detectResults.isContains(49)) { + if (detectResults.isContains(56)) { val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNonDedicatedHose" result.warning = "非标准软管" @@ -174,8 +174,8 @@ } //结果包含灶台、灶眼 - if (detectResults.isContains(31) || detectResults.isContains(32)) { - if (!detectResults.isContains(22)) { + if (detectResults.isContains(35) || detectResults.isContains(36)) { + if (!detectResults.isContains(10)) { //不包含燃气泄漏报警装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoAlarmDevice" @@ -183,7 +183,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(4)) { + if (!detectResults.isContains(5)) { //不包含切断阀 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoShutoffValve" @@ -191,7 +191,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(34)) { + if (!detectResults.isContains(38)) { //不包含熄火保护装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" @@ -202,7 +202,7 @@ } "居民用户" -> { - if (detectResults.isContains(49)) { + if (detectResults.isContains(56)) { val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNonDedicatedHose" result.warning = "非标准软管" @@ -217,8 +217,8 @@ } //结果包含灶台、灶眼 - if (detectResults.isContains(31) || detectResults.isContains(32)) { - if (!detectResults.isContains(34)) { + if (detectResults.isContains(35) || detectResults.isContains(36)) { + if (!detectResults.isContains(38)) { //不包含熄火保护装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" diff --git a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt index 05ea8c7..b49bee0 100644 --- a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt @@ -34,13 +34,14 @@ } val TARGET_NAMES_ARRAY = arrayListOf( - "三脚架", "三通", "标准软管", "人", "切断阀", "危险告知牌", "压力表", - "压力表", "防护服", "呼气器", "喉箍", "气体检测报警仪", "水枪", "", - "安全告知牌", "安全帽", "安全警示标识", "安全绳", "对讲设备", "水枪", "工服", - "开关", "燃气探测器", "接头", "施工路牌", "气体检测报警仪", "水带", "水带", - "流量计", "消火栓箱", "灭火器", "灶台", "灶具", "照明设备", "熄火保护", - "电线裸露", "电路图", "警戒线", "调压器", "调长器", "贴纸", "跨电线", - "路锥", "过滤器", "配电箱外部", "长柄阀门", "", "", "阀门", + "三脚架", "三通", "标准软管", "人", "作业信息公示牌", "切断阀", "危险告知牌", + "压力表", "压力表", "防护服", "可燃气体报警控制器", "呼气器", "喉箍", "气体检测报警仪", + "水枪", "头", "安全告知牌", "安全带", "安全帽", "安全标识", "安全标识牌", + "安全绳", "对讲设备", "水枪", "工服", "开关", "报警装置", "接头", + "施工路牌", "气体检测报警仪", "水带", "水带", "流量计", "消火栓箱", "灭火器", + "灶台", "灶具", "照明设备", "熄火保护", "燃气管道", "燃气计量器具", "电线裸露", + "电路图", "警戒线", "调压器", "调长器", "贴纸", "跨电线", "路锥", + "过滤器", "配电箱内部", "配电箱外部", "长柄阀门", "闪光灯亮", "闪光灯灭", "阀门", "非标准软管", "送风设备", "送风设备" ) diff --git a/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt index 26a7790..1176049 100644 --- a/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt @@ -15,12 +15,11 @@ fun siftHiddenTrouble( segmentationResults: MutableList, detectResults: MutableList ) { - //只有有限空间作业才筛选以下隐患 when (RuntimeCache.sceneName) { "有限空间作业" -> { //结果包含人 if (detectResults.isContains(3)) { - if (!detectResults.isContains(20) || !detectResults.isContains(8)) { + if (!detectResults.isContains(24) || !detectResults.isContains(9)) { //不包含工服/防护服 val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerClothes" @@ -28,7 +27,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(15)) { + if (!detectResults.isContains(18)) { //不包含安全帽 val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyHat" @@ -38,7 +37,7 @@ } //结果不包含呼吸防护设备 - if (!detectResults.isContains(9)) { + if (!detectResults.isContains(11)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerMask" result.warning = "现场无呼吸器" @@ -46,7 +45,7 @@ } //结果不包含路锥、警戒线 - if (!detectResults.isContains(42) || !detectResults.isContains(37)) { + if (!detectResults.isContains(48) || !detectResults.isContains(43)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoEnclosure" result.warning = "现场无围挡设施" @@ -54,9 +53,9 @@ } //结果不包含安全告知牌 - if (!detectResults.isContains(14) || - !detectResults.isContains(5) || - !detectResults.isContains(24) + if (!detectResults.isContains(16) || + !detectResults.isContains(6) || + !detectResults.isContains(28) ) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWarningSign" @@ -64,8 +63,7 @@ hiddenTroubles.add(result) } - //TODO 新类型 - if (!detectResults.isContains(999999)) { + if (!detectResults.isContains(4)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoJobInformationSign" result.warning = "现场无作业信息公示牌" @@ -73,7 +71,7 @@ } //结果不包含通风设备 - if (!detectResults.isContains(50) || !detectResults.isContains(51)) { + if (!detectResults.isContains(57) || !detectResults.isContains(58)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoAirSupply" result.warning = "现场无送风设备" @@ -81,7 +79,7 @@ } //结果不包含井下照明设备 - if (!detectResults.isContains(33)) { + if (!detectResults.isContains(37)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoLighting" result.warning = "现场无照明设备" @@ -89,7 +87,7 @@ } //结果不包含对讲设备 - if (!detectResults.isContains(18)) { + if (!detectResults.isContains(22)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoIntercom" result.warning = "现场无对讲设备" @@ -105,7 +103,7 @@ } //结果不包含气体检测仪 - if (!detectResults.isContains(25)) { + if (!detectResults.isContains(13) || !detectResults.isContains(29)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoGasDetector" result.warning = "现场无气体检测报警仪" @@ -114,34 +112,9 @@ } "配电箱" -> { - //结果包含配电箱 - if (detectResults.isContains(44)) { - //且还包括开关 - if (detectResults.isContains(21)) { - if (!detectResults.isContains(36)) { - //不包含警示标识 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoCircuitDiagram" - result.warning = "配电箱内无电路图" - hiddenTroubles.add(result) - } - - if (detectResults.isContains(35)) { - //包含电线裸露 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasExposedWire" - result.warning = "配电箱内部电线裸露" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(41)) { - //包含跨电线 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoJumperWire" - result.warning = "配电箱箱体和箱盖未跨接" - hiddenTroubles.add(result) - } - } else { + //结果包含配电箱外 + if (detectResults.isContains(51)) { + if (!detectResults.isContains(19)) { //不包含警示标识 val result = HiddenTroubleResult() result.alarmCode = "DistributionBoxHasNoWarningSign" @@ -149,6 +122,33 @@ hiddenTroubles.add(result) } } + + //结果包含配电箱内 + if (detectResults.isContains(50)) { + if (!detectResults.isContains(42)) { + //不包含无电路图 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoCircuitDiagram" + result.warning = "配电箱内无电路图" + hiddenTroubles.add(result) + } + + if (detectResults.isContains(41)) { + //包含电线裸露 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasExposedWire" + result.warning = "配电箱内部电线裸露" + hiddenTroubles.add(result) + } + + if (!detectResults.isContains(47)) { + //包含跨电线 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoJumperWire" + result.warning = "配电箱箱体和箱盖未跨接" + hiddenTroubles.add(result) + } + } } "非居用户" -> { @@ -159,7 +159,7 @@ hiddenTroubles.add(result) } - if (detectResults.isContains(49)) { + if (detectResults.isContains(56)) { val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNonDedicatedHose" result.warning = "非标准软管" @@ -174,8 +174,8 @@ } //结果包含灶台、灶眼 - if (detectResults.isContains(31) || detectResults.isContains(32)) { - if (!detectResults.isContains(22)) { + if (detectResults.isContains(35) || detectResults.isContains(36)) { + if (!detectResults.isContains(10)) { //不包含燃气泄漏报警装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoAlarmDevice" @@ -183,7 +183,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(4)) { + if (!detectResults.isContains(5)) { //不包含切断阀 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoShutoffValve" @@ -191,7 +191,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(34)) { + if (!detectResults.isContains(38)) { //不包含熄火保护装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" @@ -202,7 +202,7 @@ } "居民用户" -> { - if (detectResults.isContains(49)) { + if (detectResults.isContains(56)) { val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNonDedicatedHose" result.warning = "非标准软管" @@ -217,8 +217,8 @@ } //结果包含灶台、灶眼 - if (detectResults.isContains(31) || detectResults.isContains(32)) { - if (!detectResults.isContains(34)) { + if (detectResults.isContains(35) || detectResults.isContains(36)) { + if (!detectResults.isContains(38)) { //不包含熄火保护装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" diff --git a/app/src/main/java/com/casic/br/ar/app/widgets/FreeModeYoloDetectView.kt b/app/src/main/java/com/casic/br/ar/app/widgets/FreeModeYoloDetectView.kt index 20711a1..02f8ba8 100644 --- a/app/src/main/java/com/casic/br/ar/app/widgets/FreeModeYoloDetectView.kt +++ b/app/src/main/java/com/casic/br/ar/app/widgets/FreeModeYoloDetectView.kt @@ -52,44 +52,41 @@ this.detectResults = detectResults //筛选出隐患 - //[{"position":[559.7143,297.94324,944.8092,530.8739],"type":43},{"position":[559.7143,297.94324,944.8092,530.8739],"type":41}] val hiddenTroubles = ArrayList() for (it in detectResults) { - if (it.type == 44) { - //it此时代表配电箱 - if (!detectResults.isContains(16)) { + if (it.type == 51) { + //it此时代表配电箱外 + if (!detectResults.isContains(19)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "配电箱无警示标识" hiddenTroubles.add(result) break - } else { - //配电箱内。有开关说明在内部 - if (detectResults.isContains(21)) { - if (!detectResults.isContains(36)) { - val result = FreeModeYoloResult() - result.position = it.position - result.warning = "配电箱内无电路图" - hiddenTroubles.add(result) - break - } else if (!detectResults.isContains(35)) { - val result = FreeModeYoloResult() - result.position = it.position - result.warning = "配电箱内部电线裸露" - hiddenTroubles.add(result) - break - } else if (!detectResults.isContains(41)) { - val result = FreeModeYoloResult() - result.position = it.position - result.warning = "配电箱有跨电线" - hiddenTroubles.add(result) - break - } - } } - } else if (it.type == 13) { + } else if (it.type == 50) { + //it此时代表配配电箱内 + if (!detectResults.isContains(42)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "配电箱内无电路图" + hiddenTroubles.add(result) + break + } else if (detectResults.isContains(41)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "配电箱内部电线裸露" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(47)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "配电箱箱体和箱盖未跨接" + hiddenTroubles.add(result) + break + } + } else if (it.type == 15) { //it此时代表头 - if (!detectResults.isContains(15)) { + if (!detectResults.isContains(18)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未佩戴安全帽" @@ -98,41 +95,41 @@ } } else if (it.type == 3) { //it此时代表人 - if (!detectResults.isContains(20)) { + if (!detectResults.isContains(24) || !detectResults.isContains(9)) { val result = FreeModeYoloResult() result.position = it.position - result.warning = "未着工服" + result.warning = "未穿工服/防护服" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(17)) { + } else if (!detectResults.isContains(21)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "没有佩戴安全带、安全绳" hiddenTroubles.add(result) break } - } else if (it.type == 31 || it.type == 32) { + } else if (it.type == 35 || it.type == 36) { //it此时代表灶台、灶眼 - if (!detectResults.isContains(34)) { + if (!detectResults.isContains(38)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现熄火保护装置" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(22)) { + } else if (!detectResults.isContains(10)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现燃气泄漏报警装置" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(4)) { + } else if (!detectResults.isContains(5)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现切断阀" hiddenTroubles.add(result) break } - } else if (it.type == 2 || it.type == 49) { + } else if (it.type == 2 || it.type == 56) { //it此时代表软管 if (detectResults.isContains(1)) { val result = FreeModeYoloResult() @@ -141,38 +138,42 @@ hiddenTroubles.add(result) break } - } else if (it.type == 9 || it.type == 42 || it.type == 37 || it.type == 14 || it.type == 50 || it.type == 51 || it.type == 33 || it.type == 18 || it.type == 0 || it.type == 25) { - if (!detectResults.isContains(9)) { + } else { + if (!detectResults.isContains(11)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现呼吸防护设备" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(42) || !detectResults.isContains(37)) { + } else if (!detectResults.isContains(43) || !detectResults.isContains(48)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现路锥、警戒线" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(14)) { + } else if ( + !detectResults.isContains(16) || + !detectResults.isContains(6) || + !detectResults.isContains(28) + ) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现安全告知牌" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(50) || !detectResults.isContains(51)) { + } else if (!detectResults.isContains(57) || !detectResults.isContains(58)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现通风设备" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(33)) { + } else if (!detectResults.isContains(37)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现井下照明设备" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(18)) { + } else if (!detectResults.isContains(22)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现井下对讲设备" @@ -184,7 +185,7 @@ result.warning = "未发现施工三脚架" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(25)) { + } else if (!detectResults.isContains(13) || !detectResults.isContains(29)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现气体检测仪" @@ -200,8 +201,12 @@ override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - detectResults.forEach { - drawTarget(canvas, it, LocaleConstant.CLASS_NAMES_ARRAY[it.type]) + for (it in detectResults) { + if (it.type == 15 || it.type == 53 || it.type == 54) { + break + } + + drawTarget(canvas, it, LocaleConstant.TARGET_NAMES_ARRAY[it.type]) } segmentationResults.forEach { @@ -218,7 +223,7 @@ val textRectWidth = textLength * 1.1 //文字背景宽度 val textRectHeight = textHeight * 1.1 //文字背景高度 - if (it.type == 35 || it.type == 41 || it.type == 47 || it.type == 49) { + if (it.type == 41 || it.type == 56) { backgroundPaint.color = Color.RED borderPaint.color = Color.RED } else { diff --git a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt index 05ea8c7..b49bee0 100644 --- a/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/ar/app/utils/LocaleConstant.kt @@ -34,13 +34,14 @@ } val TARGET_NAMES_ARRAY = arrayListOf( - "三脚架", "三通", "标准软管", "人", "切断阀", "危险告知牌", "压力表", - "压力表", "防护服", "呼气器", "喉箍", "气体检测报警仪", "水枪", "", - "安全告知牌", "安全帽", "安全警示标识", "安全绳", "对讲设备", "水枪", "工服", - "开关", "燃气探测器", "接头", "施工路牌", "气体检测报警仪", "水带", "水带", - "流量计", "消火栓箱", "灭火器", "灶台", "灶具", "照明设备", "熄火保护", - "电线裸露", "电路图", "警戒线", "调压器", "调长器", "贴纸", "跨电线", - "路锥", "过滤器", "配电箱外部", "长柄阀门", "", "", "阀门", + "三脚架", "三通", "标准软管", "人", "作业信息公示牌", "切断阀", "危险告知牌", + "压力表", "压力表", "防护服", "可燃气体报警控制器", "呼气器", "喉箍", "气体检测报警仪", + "水枪", "头", "安全告知牌", "安全带", "安全帽", "安全标识", "安全标识牌", + "安全绳", "对讲设备", "水枪", "工服", "开关", "报警装置", "接头", + "施工路牌", "气体检测报警仪", "水带", "水带", "流量计", "消火栓箱", "灭火器", + "灶台", "灶具", "照明设备", "熄火保护", "燃气管道", "燃气计量器具", "电线裸露", + "电路图", "警戒线", "调压器", "调长器", "贴纸", "跨电线", "路锥", + "过滤器", "配电箱内部", "配电箱外部", "长柄阀门", "闪光灯亮", "闪光灯灭", "阀门", "非标准软管", "送风设备", "送风设备" ) diff --git a/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt index 26a7790..1176049 100644 --- a/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/ar/app/utils/YoloTargetDetectHelper.kt @@ -15,12 +15,11 @@ fun siftHiddenTrouble( segmentationResults: MutableList, detectResults: MutableList ) { - //只有有限空间作业才筛选以下隐患 when (RuntimeCache.sceneName) { "有限空间作业" -> { //结果包含人 if (detectResults.isContains(3)) { - if (!detectResults.isContains(20) || !detectResults.isContains(8)) { + if (!detectResults.isContains(24) || !detectResults.isContains(9)) { //不包含工服/防护服 val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerClothes" @@ -28,7 +27,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(15)) { + if (!detectResults.isContains(18)) { //不包含安全帽 val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyHat" @@ -38,7 +37,7 @@ } //结果不包含呼吸防护设备 - if (!detectResults.isContains(9)) { + if (!detectResults.isContains(11)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWorkerMask" result.warning = "现场无呼吸器" @@ -46,7 +45,7 @@ } //结果不包含路锥、警戒线 - if (!detectResults.isContains(42) || !detectResults.isContains(37)) { + if (!detectResults.isContains(48) || !detectResults.isContains(43)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoEnclosure" result.warning = "现场无围挡设施" @@ -54,9 +53,9 @@ } //结果不包含安全告知牌 - if (!detectResults.isContains(14) || - !detectResults.isContains(5) || - !detectResults.isContains(24) + if (!detectResults.isContains(16) || + !detectResults.isContains(6) || + !detectResults.isContains(28) ) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoWarningSign" @@ -64,8 +63,7 @@ hiddenTroubles.add(result) } - //TODO 新类型 - if (!detectResults.isContains(999999)) { + if (!detectResults.isContains(4)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoJobInformationSign" result.warning = "现场无作业信息公示牌" @@ -73,7 +71,7 @@ } //结果不包含通风设备 - if (!detectResults.isContains(50) || !detectResults.isContains(51)) { + if (!detectResults.isContains(57) || !detectResults.isContains(58)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoAirSupply" result.warning = "现场无送风设备" @@ -81,7 +79,7 @@ } //结果不包含井下照明设备 - if (!detectResults.isContains(33)) { + if (!detectResults.isContains(37)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoLighting" result.warning = "现场无照明设备" @@ -89,7 +87,7 @@ } //结果不包含对讲设备 - if (!detectResults.isContains(18)) { + if (!detectResults.isContains(22)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoIntercom" result.warning = "现场无对讲设备" @@ -105,7 +103,7 @@ } //结果不包含气体检测仪 - if (!detectResults.isContains(25)) { + if (!detectResults.isContains(13) || !detectResults.isContains(29)) { val result = HiddenTroubleResult() result.alarmCode = "ConfinedSpaceHasNoGasDetector" result.warning = "现场无气体检测报警仪" @@ -114,34 +112,9 @@ } "配电箱" -> { - //结果包含配电箱 - if (detectResults.isContains(44)) { - //且还包括开关 - if (detectResults.isContains(21)) { - if (!detectResults.isContains(36)) { - //不包含警示标识 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoCircuitDiagram" - result.warning = "配电箱内无电路图" - hiddenTroubles.add(result) - } - - if (detectResults.isContains(35)) { - //包含电线裸露 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasExposedWire" - result.warning = "配电箱内部电线裸露" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(41)) { - //包含跨电线 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoJumperWire" - result.warning = "配电箱箱体和箱盖未跨接" - hiddenTroubles.add(result) - } - } else { + //结果包含配电箱外 + if (detectResults.isContains(51)) { + if (!detectResults.isContains(19)) { //不包含警示标识 val result = HiddenTroubleResult() result.alarmCode = "DistributionBoxHasNoWarningSign" @@ -149,6 +122,33 @@ hiddenTroubles.add(result) } } + + //结果包含配电箱内 + if (detectResults.isContains(50)) { + if (!detectResults.isContains(42)) { + //不包含无电路图 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoCircuitDiagram" + result.warning = "配电箱内无电路图" + hiddenTroubles.add(result) + } + + if (detectResults.isContains(41)) { + //包含电线裸露 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasExposedWire" + result.warning = "配电箱内部电线裸露" + hiddenTroubles.add(result) + } + + if (!detectResults.isContains(47)) { + //包含跨电线 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoJumperWire" + result.warning = "配电箱箱体和箱盖未跨接" + hiddenTroubles.add(result) + } + } } "非居用户" -> { @@ -159,7 +159,7 @@ hiddenTroubles.add(result) } - if (detectResults.isContains(49)) { + if (detectResults.isContains(56)) { val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNonDedicatedHose" result.warning = "非标准软管" @@ -174,8 +174,8 @@ } //结果包含灶台、灶眼 - if (detectResults.isContains(31) || detectResults.isContains(32)) { - if (!detectResults.isContains(22)) { + if (detectResults.isContains(35) || detectResults.isContains(36)) { + if (!detectResults.isContains(10)) { //不包含燃气泄漏报警装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoAlarmDevice" @@ -183,7 +183,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(4)) { + if (!detectResults.isContains(5)) { //不包含切断阀 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoShutoffValve" @@ -191,7 +191,7 @@ hiddenTroubles.add(result) } - if (!detectResults.isContains(34)) { + if (!detectResults.isContains(38)) { //不包含熄火保护装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" @@ -202,7 +202,7 @@ } "居民用户" -> { - if (detectResults.isContains(49)) { + if (detectResults.isContains(56)) { val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNonDedicatedHose" result.warning = "非标准软管" @@ -217,8 +217,8 @@ } //结果包含灶台、灶眼 - if (detectResults.isContains(31) || detectResults.isContains(32)) { - if (!detectResults.isContains(34)) { + if (detectResults.isContains(35) || detectResults.isContains(36)) { + if (!detectResults.isContains(38)) { //不包含熄火保护装置 val result = HiddenTroubleResult() result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" diff --git a/app/src/main/java/com/casic/br/ar/app/widgets/FreeModeYoloDetectView.kt b/app/src/main/java/com/casic/br/ar/app/widgets/FreeModeYoloDetectView.kt index 20711a1..02f8ba8 100644 --- a/app/src/main/java/com/casic/br/ar/app/widgets/FreeModeYoloDetectView.kt +++ b/app/src/main/java/com/casic/br/ar/app/widgets/FreeModeYoloDetectView.kt @@ -52,44 +52,41 @@ this.detectResults = detectResults //筛选出隐患 - //[{"position":[559.7143,297.94324,944.8092,530.8739],"type":43},{"position":[559.7143,297.94324,944.8092,530.8739],"type":41}] val hiddenTroubles = ArrayList() for (it in detectResults) { - if (it.type == 44) { - //it此时代表配电箱 - if (!detectResults.isContains(16)) { + if (it.type == 51) { + //it此时代表配电箱外 + if (!detectResults.isContains(19)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "配电箱无警示标识" hiddenTroubles.add(result) break - } else { - //配电箱内。有开关说明在内部 - if (detectResults.isContains(21)) { - if (!detectResults.isContains(36)) { - val result = FreeModeYoloResult() - result.position = it.position - result.warning = "配电箱内无电路图" - hiddenTroubles.add(result) - break - } else if (!detectResults.isContains(35)) { - val result = FreeModeYoloResult() - result.position = it.position - result.warning = "配电箱内部电线裸露" - hiddenTroubles.add(result) - break - } else if (!detectResults.isContains(41)) { - val result = FreeModeYoloResult() - result.position = it.position - result.warning = "配电箱有跨电线" - hiddenTroubles.add(result) - break - } - } } - } else if (it.type == 13) { + } else if (it.type == 50) { + //it此时代表配配电箱内 + if (!detectResults.isContains(42)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "配电箱内无电路图" + hiddenTroubles.add(result) + break + } else if (detectResults.isContains(41)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "配电箱内部电线裸露" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(47)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "配电箱箱体和箱盖未跨接" + hiddenTroubles.add(result) + break + } + } else if (it.type == 15) { //it此时代表头 - if (!detectResults.isContains(15)) { + if (!detectResults.isContains(18)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未佩戴安全帽" @@ -98,41 +95,41 @@ } } else if (it.type == 3) { //it此时代表人 - if (!detectResults.isContains(20)) { + if (!detectResults.isContains(24) || !detectResults.isContains(9)) { val result = FreeModeYoloResult() result.position = it.position - result.warning = "未着工服" + result.warning = "未穿工服/防护服" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(17)) { + } else if (!detectResults.isContains(21)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "没有佩戴安全带、安全绳" hiddenTroubles.add(result) break } - } else if (it.type == 31 || it.type == 32) { + } else if (it.type == 35 || it.type == 36) { //it此时代表灶台、灶眼 - if (!detectResults.isContains(34)) { + if (!detectResults.isContains(38)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现熄火保护装置" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(22)) { + } else if (!detectResults.isContains(10)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现燃气泄漏报警装置" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(4)) { + } else if (!detectResults.isContains(5)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现切断阀" hiddenTroubles.add(result) break } - } else if (it.type == 2 || it.type == 49) { + } else if (it.type == 2 || it.type == 56) { //it此时代表软管 if (detectResults.isContains(1)) { val result = FreeModeYoloResult() @@ -141,38 +138,42 @@ hiddenTroubles.add(result) break } - } else if (it.type == 9 || it.type == 42 || it.type == 37 || it.type == 14 || it.type == 50 || it.type == 51 || it.type == 33 || it.type == 18 || it.type == 0 || it.type == 25) { - if (!detectResults.isContains(9)) { + } else { + if (!detectResults.isContains(11)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现呼吸防护设备" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(42) || !detectResults.isContains(37)) { + } else if (!detectResults.isContains(43) || !detectResults.isContains(48)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现路锥、警戒线" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(14)) { + } else if ( + !detectResults.isContains(16) || + !detectResults.isContains(6) || + !detectResults.isContains(28) + ) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现安全告知牌" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(50) || !detectResults.isContains(51)) { + } else if (!detectResults.isContains(57) || !detectResults.isContains(58)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现通风设备" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(33)) { + } else if (!detectResults.isContains(37)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现井下照明设备" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(18)) { + } else if (!detectResults.isContains(22)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现井下对讲设备" @@ -184,7 +185,7 @@ result.warning = "未发现施工三脚架" hiddenTroubles.add(result) break - } else if (!detectResults.isContains(25)) { + } else if (!detectResults.isContains(13) || !detectResults.isContains(29)) { val result = FreeModeYoloResult() result.position = it.position result.warning = "未发现气体检测仪" @@ -200,8 +201,12 @@ override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - detectResults.forEach { - drawTarget(canvas, it, LocaleConstant.CLASS_NAMES_ARRAY[it.type]) + for (it in detectResults) { + if (it.type == 15 || it.type == 53 || it.type == 54) { + break + } + + drawTarget(canvas, it, LocaleConstant.TARGET_NAMES_ARRAY[it.type]) } segmentationResults.forEach { @@ -218,7 +223,7 @@ val textRectWidth = textLength * 1.1 //文字背景宽度 val textRectHeight = textHeight * 1.1 //文字背景高度 - if (it.type == 35 || it.type == 41 || it.type == 47 || it.type == 49) { + if (it.type == 41 || it.type == 56) { backgroundPaint.color = Color.RED borderPaint.color = Color.RED } else { diff --git a/app/src/main/java/com/casic/br/ar/app/widgets/YoloTargetDetectView.kt b/app/src/main/java/com/casic/br/ar/app/widgets/YoloTargetDetectView.kt index ffba700..943f9ad 100644 --- a/app/src/main/java/com/casic/br/ar/app/widgets/YoloTargetDetectView.kt +++ b/app/src/main/java/com/casic/br/ar/app/widgets/YoloTargetDetectView.kt @@ -52,8 +52,12 @@ override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - detectResults.forEach { - drawTarget(canvas, it, LocaleConstant.CLASS_NAMES_ARRAY[it.type]) + for (it in detectResults) { + if (it.type == 15 || it.type == 53 || it.type == 54) { + break + } + + drawTarget(canvas, it, LocaleConstant.TARGET_NAMES_ARRAY[it.type]) } segmentationResults.forEach { @@ -66,7 +70,7 @@ val textRectWidth = textLength * 1.1 //文字背景宽度 val textRectHeight = textHeight * 1.1 //文字背景高度 - if (it.type == 35 || it.type == 41 || it.type == 47 || it.type == 49) { + if (it.type == 41 || it.type == 56) { backgroundPaint.color = Color.RED borderPaint.color = Color.RED } else {