diff --git a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt index 2b8c2a7..c672549 100644 --- a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt @@ -7,196 +7,264 @@ class YoloTargetDetectHelper(private val callback: OnYoloResultSiftCallback) { fun siftHiddenTrouble( - segmentationResults: MutableList, detectResults: MutableList + segmentationResults: MutableList, detectResults: MutableList, + detectedTargetSet: HashSet ) { val hiddenTroubles = ArrayList() - - //结果包含配电箱 - 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 = "" - result.warning = "配电箱内部电线裸露" - hiddenTroubles.add(result) - } - - if (detectResults.isContains(41)) { - //包含跨电线 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoJumperWire" - result.warning = "配电箱有跨电线" - hiddenTroubles.add(result) - } - } else { - //不包含警示标识 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoWarningSign" - result.warning = "配电箱无警示标识" - hiddenTroubles.add(result) - } - } - - //结果包含头 - if (detectResults.isContains(13)) { - if (!detectResults.isContains(15)) { - //不包含安全帽 - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyHat" - result.warning = "未佩戴安全帽" - hiddenTroubles.add(result) - } - } - - //结果包含人 - if (detectResults.isContains(3)) { - if (!detectResults.isContains(20)) { - //不包含工服 - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWorkerClothes" - result.warning = "未着工服" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(17)) { - //不包含安全带、安全绳 - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyLine" - result.warning = "没有佩戴安全带、安全绳" - hiddenTroubles.add(result) - } - } - - //结果包含灶台、灶眼 - if (detectResults.isContains(31) || detectResults.isContains(32)) { - if (!detectResults.isContains(34)) { - //不包含熄火保护装置 - val result = HiddenTroubleResult() - result.alarmCode = "" - result.warning = "未发现熄火保护装置" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(22)) { - //不包含燃气泄漏报警装置 - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" - result.warning = "未发现燃气泄漏报警装置" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(4)) { - //不包含切断阀 - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasNoShutoffValve" - result.warning = "未发现切断阀" - hiddenTroubles.add(result) - } - } - - //结果包含专用软管、非专用软管 - if (detectResults.isContains(2) || detectResults.isContains(49)) { - //包含接头或三通 - if (detectResults.isContains(1) || detectResults.isContains(23)) { - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasNoHoseJoint" - result.warning = "软管有接头或三通" - hiddenTroubles.add(result) - } - } - //只有有限空间作业才筛选以下隐患 - if (RuntimeCache.sceneName == "有限空间作业") { - //结果不包含呼吸防护设备 - if (!detectResults.isContains(9)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWorkerMask" - result.warning = "未发现呼吸防护设备" - hiddenTroubles.add(result) + when (RuntimeCache.sceneName) { + "有限空间作业" -> { + //结果包含头 + if (detectResults.isContains(13)) { + if (!detectResults.isContains(15)) { + //不包含安全帽 + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyHat" + result.warning = "未佩戴安全帽" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } + + //结果包含人 + if (detectResults.isContains(3)) { + if (!detectResults.isContains(20)) { + //不包含工服 + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWorkerClothes" + result.warning = "未着工服" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!detectResults.isContains(17)) { + //不包含安全带、安全绳 + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyLine" + result.warning = "没有佩戴安全带、安全绳" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } + + //结果不包含呼吸防护设备 + if (!detectResults.isContains(9)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWorkerMask" + result.warning = "未发现呼吸防护设备" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含路锥、警戒线 + if (!detectResults.isContains(42) || !detectResults.isContains(37)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoEnclosure" + result.warning = "未发现路锥、警戒线" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含安全告知牌 + if (!detectResults.isContains(14) || + !detectResults.isContains(5) || + !detectResults.isContains(24) + ) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWarningSign" + result.warning = "未发现安全告知牌" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含通风设备 + if (!detectResults.isContains(50) || !detectResults.isContains(51)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoAirSupply" + result.warning = "未发现通风设备" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含井下照明设备 + if (!detectResults.isContains(33)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoLighting" + result.warning = "未发现井下照明设备" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含对讲设备 + if (!detectResults.isContains(18)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoIntercom" + result.warning = "未发现井下对讲设备" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含施工三脚架 + if (!detectResults.isContains(0)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoTripod" + result.warning = "未发现施工三脚架" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含气体检测仪 + if (!detectResults.isContains(25)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoGasDetector" + result.warning = "未发现气体检测仪" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } } - //结果不包含路锥、警戒线 - if (!detectResults.isContains(42) || !detectResults.isContains(37)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoEnclosure" - result.warning = "未发现路锥、警戒线" - hiddenTroubles.add(result) + "配电箱" -> { + //结果包含配电箱 + if (detectResults.isContains(44)) { + //且还包括开关 + if (detectResults.isContains(21)) { + if (!detectResults.isContains(36)) { + //不包含警示标识 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoCircuitDiagram" + result.warning = "配电箱内无电路图" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (detectResults.isContains(35)) { + //包含电线裸露 + val result = HiddenTroubleResult() + result.alarmCode = "" + result.warning = "配电箱内部电线裸露" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (detectResults.isContains(41)) { + //包含跨电线 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoJumperWire" + result.warning = "配电箱有跨电线" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } else { + //不包含警示标识 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoWarningSign" + result.warning = "配电箱无警示标识" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } } - //结果不包含安全告知牌 - if (!detectResults.isContains(14) || - !detectResults.isContains(5) || - !detectResults.isContains(24) - ) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWarningSign" - result.warning = "未发现安全告知牌" - hiddenTroubles.add(result) + "非居用户" -> { + //结果包含灶台、灶眼 + if (detectResults.isContains(31) || detectResults.isContains(32)) { + if (!detectResults.isContains(34)) { + //不包含熄火保护装置 + val result = HiddenTroubleResult() + result.alarmCode = "" + result.warning = "未发现熄火保护装置" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!detectResults.isContains(22)) { + //不包含燃气泄漏报警装置 + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" + result.warning = "未发现燃气泄漏报警装置" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!detectResults.isContains(4)) { + //不包含切断阀 + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasNoShutoffValve" + result.warning = "未发现切断阀" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } + + //结果包含专用软管、非专用软管 + if (detectResults.isContains(2) || detectResults.isContains(49)) { + //包含接头或三通 + if (detectResults.isContains(1) || detectResults.isContains(23)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasNoHoseJoint" + result.warning = "软管有接头或三通" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } + + if (!segmentationResults.isContains(4)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasPipelineRust" + result.warning = "腐蚀、锈蚀" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!segmentationResults.isContains(0)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasHoseFlexure" + result.warning = "软管不可恢复的弯折拉伸" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } } - //结果不包含通风设备 - if (!detectResults.isContains(50) || !detectResults.isContains(51)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoAirSupply" - result.warning = "未发现通风设备" - hiddenTroubles.add(result) + "调压站" -> { + if (!segmentationResults.isContains(4)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasPipelineRust" + result.warning = "腐蚀、锈蚀" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!segmentationResults.isContains(0)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasHoseFlexure" + result.warning = "软管不可恢复的弯折拉伸" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } } - - //结果不包含井下照明设备 - if (!detectResults.isContains(33)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoLighting" - result.warning = "未发现井下照明设备" - hiddenTroubles.add(result) - } - - //结果不包含对讲设备 - if (!detectResults.isContains(18)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoIntercom" - result.warning = "未发现井下对讲设备" - hiddenTroubles.add(result) - } - - //结果不包含施工三脚架 - if (!detectResults.isContains(0)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoTripod" - result.warning = "未发现施工三脚架" - hiddenTroubles.add(result) - } - - //结果不包含气体检测仪 - if (!detectResults.isContains(25)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoGasDetector" - result.warning = "未发现气体检测仪" - hiddenTroubles.add(result) - } - } - - if (!segmentationResults.isContains(4)) { - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasPipelineRust" - result.warning = "腐蚀、锈蚀" - hiddenTroubles.add(result) - } - - if (!segmentationResults.isContains(0)) { - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasHoseFlexure" - result.warning = "软管不可恢复的弯折拉伸" - hiddenTroubles.add(result) } //结果统一回调 diff --git a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt index 2b8c2a7..c672549 100644 --- a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt @@ -7,196 +7,264 @@ class YoloTargetDetectHelper(private val callback: OnYoloResultSiftCallback) { fun siftHiddenTrouble( - segmentationResults: MutableList, detectResults: MutableList + segmentationResults: MutableList, detectResults: MutableList, + detectedTargetSet: HashSet ) { val hiddenTroubles = ArrayList() - - //结果包含配电箱 - 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 = "" - result.warning = "配电箱内部电线裸露" - hiddenTroubles.add(result) - } - - if (detectResults.isContains(41)) { - //包含跨电线 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoJumperWire" - result.warning = "配电箱有跨电线" - hiddenTroubles.add(result) - } - } else { - //不包含警示标识 - val result = HiddenTroubleResult() - result.alarmCode = "DistributionBoxHasNoWarningSign" - result.warning = "配电箱无警示标识" - hiddenTroubles.add(result) - } - } - - //结果包含头 - if (detectResults.isContains(13)) { - if (!detectResults.isContains(15)) { - //不包含安全帽 - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyHat" - result.warning = "未佩戴安全帽" - hiddenTroubles.add(result) - } - } - - //结果包含人 - if (detectResults.isContains(3)) { - if (!detectResults.isContains(20)) { - //不包含工服 - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWorkerClothes" - result.warning = "未着工服" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(17)) { - //不包含安全带、安全绳 - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyLine" - result.warning = "没有佩戴安全带、安全绳" - hiddenTroubles.add(result) - } - } - - //结果包含灶台、灶眼 - if (detectResults.isContains(31) || detectResults.isContains(32)) { - if (!detectResults.isContains(34)) { - //不包含熄火保护装置 - val result = HiddenTroubleResult() - result.alarmCode = "" - result.warning = "未发现熄火保护装置" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(22)) { - //不包含燃气泄漏报警装置 - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" - result.warning = "未发现燃气泄漏报警装置" - hiddenTroubles.add(result) - } - - if (!detectResults.isContains(4)) { - //不包含切断阀 - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasNoShutoffValve" - result.warning = "未发现切断阀" - hiddenTroubles.add(result) - } - } - - //结果包含专用软管、非专用软管 - if (detectResults.isContains(2) || detectResults.isContains(49)) { - //包含接头或三通 - if (detectResults.isContains(1) || detectResults.isContains(23)) { - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasNoHoseJoint" - result.warning = "软管有接头或三通" - hiddenTroubles.add(result) - } - } - //只有有限空间作业才筛选以下隐患 - if (RuntimeCache.sceneName == "有限空间作业") { - //结果不包含呼吸防护设备 - if (!detectResults.isContains(9)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWorkerMask" - result.warning = "未发现呼吸防护设备" - hiddenTroubles.add(result) + when (RuntimeCache.sceneName) { + "有限空间作业" -> { + //结果包含头 + if (detectResults.isContains(13)) { + if (!detectResults.isContains(15)) { + //不包含安全帽 + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyHat" + result.warning = "未佩戴安全帽" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } + + //结果包含人 + if (detectResults.isContains(3)) { + if (!detectResults.isContains(20)) { + //不包含工服 + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWorkerClothes" + result.warning = "未着工服" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!detectResults.isContains(17)) { + //不包含安全带、安全绳 + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWorkerSafelyLine" + result.warning = "没有佩戴安全带、安全绳" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } + + //结果不包含呼吸防护设备 + if (!detectResults.isContains(9)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWorkerMask" + result.warning = "未发现呼吸防护设备" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含路锥、警戒线 + if (!detectResults.isContains(42) || !detectResults.isContains(37)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoEnclosure" + result.warning = "未发现路锥、警戒线" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含安全告知牌 + if (!detectResults.isContains(14) || + !detectResults.isContains(5) || + !detectResults.isContains(24) + ) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoWarningSign" + result.warning = "未发现安全告知牌" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含通风设备 + if (!detectResults.isContains(50) || !detectResults.isContains(51)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoAirSupply" + result.warning = "未发现通风设备" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含井下照明设备 + if (!detectResults.isContains(33)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoLighting" + result.warning = "未发现井下照明设备" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含对讲设备 + if (!detectResults.isContains(18)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoIntercom" + result.warning = "未发现井下对讲设备" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含施工三脚架 + if (!detectResults.isContains(0)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoTripod" + result.warning = "未发现施工三脚架" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + //结果不包含气体检测仪 + if (!detectResults.isContains(25)) { + val result = HiddenTroubleResult() + result.alarmCode = "ConfinedSpaceHasNoGasDetector" + result.warning = "未发现气体检测仪" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } } - //结果不包含路锥、警戒线 - if (!detectResults.isContains(42) || !detectResults.isContains(37)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoEnclosure" - result.warning = "未发现路锥、警戒线" - hiddenTroubles.add(result) + "配电箱" -> { + //结果包含配电箱 + if (detectResults.isContains(44)) { + //且还包括开关 + if (detectResults.isContains(21)) { + if (!detectResults.isContains(36)) { + //不包含警示标识 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoCircuitDiagram" + result.warning = "配电箱内无电路图" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (detectResults.isContains(35)) { + //包含电线裸露 + val result = HiddenTroubleResult() + result.alarmCode = "" + result.warning = "配电箱内部电线裸露" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (detectResults.isContains(41)) { + //包含跨电线 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoJumperWire" + result.warning = "配电箱有跨电线" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } else { + //不包含警示标识 + val result = HiddenTroubleResult() + result.alarmCode = "DistributionBoxHasNoWarningSign" + result.warning = "配电箱无警示标识" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } } - //结果不包含安全告知牌 - if (!detectResults.isContains(14) || - !detectResults.isContains(5) || - !detectResults.isContains(24) - ) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoWarningSign" - result.warning = "未发现安全告知牌" - hiddenTroubles.add(result) + "非居用户" -> { + //结果包含灶台、灶眼 + if (detectResults.isContains(31) || detectResults.isContains(32)) { + if (!detectResults.isContains(34)) { + //不包含熄火保护装置 + val result = HiddenTroubleResult() + result.alarmCode = "" + result.warning = "未发现熄火保护装置" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!detectResults.isContains(22)) { + //不包含燃气泄漏报警装置 + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasNoStoveFlameoutProtection" + result.warning = "未发现燃气泄漏报警装置" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!detectResults.isContains(4)) { + //不包含切断阀 + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasNoShutoffValve" + result.warning = "未发现切断阀" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } + + //结果包含专用软管、非专用软管 + if (detectResults.isContains(2) || detectResults.isContains(49)) { + //包含接头或三通 + if (detectResults.isContains(1) || detectResults.isContains(23)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasNoHoseJoint" + result.warning = "软管有接头或三通" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + } + + if (!segmentationResults.isContains(4)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasPipelineRust" + result.warning = "腐蚀、锈蚀" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!segmentationResults.isContains(0)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasHoseFlexure" + result.warning = "软管不可恢复的弯折拉伸" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } } - //结果不包含通风设备 - if (!detectResults.isContains(50) || !detectResults.isContains(51)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoAirSupply" - result.warning = "未发现通风设备" - hiddenTroubles.add(result) + "调压站" -> { + if (!segmentationResults.isContains(4)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasPipelineRust" + result.warning = "腐蚀、锈蚀" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } + + if (!segmentationResults.isContains(0)) { + val result = HiddenTroubleResult() + result.alarmCode = "NonResidentUserHasHoseFlexure" + result.warning = "软管不可恢复的弯折拉伸" + if (!detectedTargetSet.contains(result.warning)) { + hiddenTroubles.add(result) + } + } } - - //结果不包含井下照明设备 - if (!detectResults.isContains(33)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoLighting" - result.warning = "未发现井下照明设备" - hiddenTroubles.add(result) - } - - //结果不包含对讲设备 - if (!detectResults.isContains(18)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoIntercom" - result.warning = "未发现井下对讲设备" - hiddenTroubles.add(result) - } - - //结果不包含施工三脚架 - if (!detectResults.isContains(0)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoTripod" - result.warning = "未发现施工三脚架" - hiddenTroubles.add(result) - } - - //结果不包含气体检测仪 - if (!detectResults.isContains(25)) { - val result = HiddenTroubleResult() - result.alarmCode = "ConfinedSpaceHasNoGasDetector" - result.warning = "未发现气体检测仪" - hiddenTroubles.add(result) - } - } - - if (!segmentationResults.isContains(4)) { - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasPipelineRust" - result.warning = "腐蚀、锈蚀" - hiddenTroubles.add(result) - } - - if (!segmentationResults.isContains(0)) { - val result = HiddenTroubleResult() - result.alarmCode = "NonResidentUserHasHoseFlexure" - result.warning = "软管不可恢复的弯折拉伸" - hiddenTroubles.add(result) } //结果统一回调 diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index 7135bbe..64a359d 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -6,6 +6,7 @@ import android.os.Bundle import android.os.Handler import android.os.Message +import android.util.Log import android.view.SurfaceHolder import android.view.View import android.view.WindowManager @@ -50,6 +51,9 @@ import org.opencv.core.Mat import org.opencv.osgi.OpenCVNativeLoader import java.io.File +import java.util.Stack +import java.util.Timer +import java.util.TimerTask class StartCheckByYoloActivity : KotlinBaseActivity(), SurfaceHolder.Callback, INativeCallback, Handler.Callback, OnYoloResultSiftCallback { @@ -64,11 +68,13 @@ private val weakReferenceHandler by lazy { WeakReferenceHandler(this) } private val detectResultDialog by lazy { DetectResultDialog(this) } private val detectHelper by lazy { YoloTargetDetectHelper(this) } + private val troubleStack by lazy { Stack() } private lateinit var inspectionViewModel: InspectionViewModel private lateinit var configViewModel: ConfigViewModel private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var alarmViewModel: AlarmViewModel private lateinit var result: HiddenTroubleResult + private lateinit var timer: Timer private var inspectionAddress = "" private var isDetectTarget = false @@ -132,6 +138,33 @@ ) } } + + //定时的从隐患缓存里面取一个数据去显示隐患弹框 + timer = Timer() + timer.schedule(object : TimerTask() { + override fun run() { + runOnUiThread { + if (troubleStack.isNotEmpty() && !detectResultDialog.isShowing) { + val hiddenTroubleResult = troubleStack.pop() + //显示差集的隐患 + if (mat.width() > 0 || mat.height() > 0) { + detectResultDialog.updateDialogContentView(hiddenTroubleResult, mat, + object : DetectResultDialog.OnDialogButtonClickListener { + override fun onConfirmClick( + file: File, result: HiddenTroubleResult + ) { + this@StartCheckByYoloActivity.result = hiddenTroubleResult + imageFileViewModel.uploadImage(file) + detectedTargetSet.add(hiddenTroubleResult.warning) + } + }).show() + } + } else { + Log.d(kTag, "run: 隐患缓存为空") + } + } + } + }, 1000, 10 * 1000L) } override fun initEvent() { @@ -262,36 +295,35 @@ } //实时筛选隐患结果 - detectHelper.siftHiddenTrouble(segmentationResults, detectResults) - - runOnUiThread { - detectResults.forEach { - val label = LocaleConstant.TARGET_NAMES_ARRAY[it.type] - targetSet.add(label) - if (RuntimeCache.sceneName == "有限空间作业") { - when (it.type) { - 37 -> RuntimeCache.detectResult.add(0) - 5, 14, 24 -> RuntimeCache.detectResult.add(1) - 0 -> RuntimeCache.detectResult.add(2) - 50, 51 -> RuntimeCache.detectResult.add(3) - 25 -> RuntimeCache.detectResult.add(4) - 9 -> RuntimeCache.detectResult.add(5) - 18 -> RuntimeCache.detectResult.add(6) - 33 -> RuntimeCache.detectResult.add(7) - } - } else { -// when (it.type) { -// 2 -> RuntimeCache.detectResult.add(1) -// 31, 32 -> RuntimeCache.detectResult.add(0) -// 34 -> RuntimeCache.detectResult.add(0) -// 22 -> RuntimeCache.detectResult.add(4) -// 4 -> RuntimeCache.detectResult.add(3) -// } + detectHelper.siftHiddenTrouble(segmentationResults, detectResults, detectedTargetSet) + detectResults.forEach { + val label = LocaleConstant.TARGET_NAMES_ARRAY[it.type] + targetSet.add(label) + if (RuntimeCache.sceneName == "有限空间作业") { + when (it.type) { + 37 -> RuntimeCache.detectResult.add(0) + 5, 14, 24 -> RuntimeCache.detectResult.add(1) + 0 -> RuntimeCache.detectResult.add(2) + 50, 51 -> RuntimeCache.detectResult.add(3) + 25 -> RuntimeCache.detectResult.add(4) + 9 -> RuntimeCache.detectResult.add(5) + 18 -> RuntimeCache.detectResult.add(6) + 33 -> RuntimeCache.detectResult.add(7) } - binding.tipsTagView.visibility = View.VISIBLE - binding.tipsTagView.text = "${targetSet.size}" + } else { +// when (it.type) { +// 2 -> RuntimeCache.detectResult.add(1) +// 31, 32 -> RuntimeCache.detectResult.add(0) +// 34 -> RuntimeCache.detectResult.add(0) +// 22 -> RuntimeCache.detectResult.add(4) +// 4 -> RuntimeCache.detectResult.add(3) +// } } } + runOnUiThread { + binding.tipsTagView.visibility = View.VISIBLE + binding.tipsTagView.text = "${targetSet.size}" + } } override fun onDetect(output: ArrayList) { @@ -319,15 +351,7 @@ if (results.isEmpty()) { return } - //只显示最后一个 - val troubleResult = results.last() - - //显示隐患弹框 - val message = weakReferenceHandler.obtainMessage() - message.what = 2024082902 - message.obj = troubleResult - //延迟显示 - weakReferenceHandler.sendMessageDelayed(message, 10 * 1000L) + troubleStack.push(results.first()) } override fun handleMessage(msg: Message): Boolean { @@ -361,32 +385,6 @@ } }).build().show() } - - 2024082902 -> { - //弹框 - if (detectResultDialog.isShowing) { - return true - } - - //安全转换。转换失败直接return,不影响程序运行 - val result = msg.obj as HiddenTroubleResult - if (detectedTargetSet.contains(result.warning)) { - return true - } - - //显示差集的隐患 - if (mat.width() > 0 || mat.height() > 0) { - detectResultDialog.updateDialogContentView(result, mat, - object : DetectResultDialog.OnDialogButtonClickListener { - override fun onConfirmClick(file: File, result: HiddenTroubleResult) { - //一张图里可能会包含多种隐患 - this@StartCheckByYoloActivity.result = result - imageFileViewModel.uploadImage(file) - detectedTargetSet.add(result.warning) - } - }).show() - } - } } return true }