diff --git a/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java b/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java new file mode 100644 index 0000000..154d1a9 --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java @@ -0,0 +1,15 @@ +package com.casic.br.ar.app.model; + +import com.casic.br.ar.app.external.YoloResult; + +public class FreeModeYoloResult extends YoloResult { + private String warning; + + public String getWarning() { + return warning; + } + + public void setWarning(String warning) { + this.warning = warning; + } +} diff --git a/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java b/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java new file mode 100644 index 0000000..154d1a9 --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java @@ -0,0 +1,15 @@ +package com.casic.br.ar.app.model; + +import com.casic.br.ar.app.external.YoloResult; + +public class FreeModeYoloResult extends YoloResult { + private String warning; + + public String getWarning() { + return warning; + } + + public void setWarning(String warning) { + this.warning = warning; + } +} 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 4ee02aa..d278f53 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 @@ -88,7 +88,7 @@ "鼓风机" ) - val SEGMENTATION_ARRAY = arrayOf("弯折", "断裂", "烧焦", "磨损", "铁锈", "龟裂") + val SEGMENTATION_ARRAY = arrayOf("弯折", "断裂", "烧焦", "磨损", "腐蚀、铁锈", "龟裂") val HIDDEN_TROUBLE_ARRAY = arrayOf( "配电箱无警示标识", diff --git a/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java b/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java new file mode 100644 index 0000000..154d1a9 --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/model/FreeModeYoloResult.java @@ -0,0 +1,15 @@ +package com.casic.br.ar.app.model; + +import com.casic.br.ar.app.external.YoloResult; + +public class FreeModeYoloResult extends YoloResult { + private String warning; + + public String getWarning() { + return warning; + } + + public void setWarning(String warning) { + this.warning = warning; + } +} 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 4ee02aa..d278f53 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 @@ -88,7 +88,7 @@ "鼓风机" ) - val SEGMENTATION_ARRAY = arrayOf("弯折", "断裂", "烧焦", "磨损", "铁锈", "龟裂") + val SEGMENTATION_ARRAY = arrayOf("弯折", "断裂", "烧焦", "磨损", "腐蚀、铁锈", "龟裂") val HIDDEN_TROUBLE_ARRAY = arrayOf( "配电箱无警示标识", 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 09c213f..eac008d 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 @@ -10,6 +10,7 @@ import android.view.View import com.casic.br.ar.app.extensions.isContains import com.casic.br.ar.app.external.YoloResult +import com.casic.br.ar.app.model.FreeModeYoloResult import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.sp2px @@ -25,7 +26,7 @@ private val rect by lazy { Rect() } private var detectResults: MutableList = ArrayList() private var segmentationResults: MutableList = ArrayList() - private var hiddenTrouble = YoloResult() + private var hiddenTroubles: MutableList = ArrayList() private var textHeight = 0 init { @@ -49,141 +50,152 @@ ) { this.segmentationResults = segmentationResults this.detectResults = detectResults - postInvalidate() //筛选出隐患 - if (detectResults.isNotEmpty()) { - //要先判断场景。用第一个结果作为场景判断依据 - val firstTarget = LocaleConstant.CLASS_NAMES_ARRAY[detectResults.first().type] - hiddenTrouble.position = detectResults.first().position - if (LocaleConstant.DISTRIBUTION_BOX_SCENE_ARRAY.contains(firstTarget)) { + //[{"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)) { - hiddenTrouble.type = 0 - postInvalidate() - } - - if (!detectResults.isContains(36)) { - hiddenTrouble.type = 1 - postInvalidate() - } - - if (detectResults.isContains(35)) { - for (yolo in detectResults) { - if (yolo.type == 35) { - hiddenTrouble.position = yolo.position - hiddenTrouble.type = 2 - postInvalidate() + 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 } } } - - if (detectResults.isContains(41)) { - for (yolo in detectResults) { - if (yolo.type == 41) { - hiddenTrouble.position = yolo.position - hiddenTrouble.type = 3 - postInvalidate() - break - } - } + } else if (it.type == 13) { + //it此时代表头 + if (!detectResults.isContains(15)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未佩戴安全帽" + hiddenTroubles.add(result) + break } - } else if (LocaleConstant.CONFINED_SPACES_SCENE_ARRAY.contains(firstTarget)) { - if (detectResults.isContains(3)) { - if (!detectResults.isContains(15)) { - hiddenTrouble.type = 4 - postInvalidate() - } - - if (!detectResults.isContains(20)) { - hiddenTrouble.type = 5 - postInvalidate() - } - - if (!detectResults.isContains(15) && !detectResults.isContains(17)) { - hiddenTrouble.type = 6 - postInvalidate() - } + } else if (it.type == 3) { + //it此时代表人 + if (!detectResults.isContains(20)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未着工服" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(17)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "没有佩戴安全带、安全绳" + hiddenTroubles.add(result) + break } - - if (!detectResults.isContains(9)) { - hiddenTrouble.type = 7 - postInvalidate() - } - - if (!detectResults.isContains(42) && !detectResults.isContains(37)) { - hiddenTrouble.type = 8 - postInvalidate() - } - - if (!detectResults.isContains(14)) { - hiddenTrouble.type = 9 - postInvalidate() - } - - if (!detectResults.isContains(51)) { - hiddenTrouble.type = 10 - postInvalidate() - } - - if (!detectResults.isContains(33)) { - hiddenTrouble.type = 11 - postInvalidate() - } - - if (!detectResults.isContains(18)) { - hiddenTrouble.type = 12 - postInvalidate() - } - - if (!detectResults.isContains(0)) { - hiddenTrouble.type = 13 - postInvalidate() - } - - if (!detectResults.isContains(25)) { - hiddenTrouble.type = 14 - postInvalidate() - } - } else if (LocaleConstant.NON_RESIDENTIAL_SCENE_ARRAY.contains(firstTarget)) { - if (detectResults.isContains(49)) { - for (yolo in detectResults) { - if (yolo.type == 49) { - hiddenTrouble.position = yolo.position - hiddenTrouble.type = 15 - postInvalidate() - break - } - } - } - - if (detectResults.isContains(1)) { - for (yolo in detectResults) { - if (yolo.type == 1) { - hiddenTrouble.position = yolo.position - hiddenTrouble.type = 16 - postInvalidate() - break - } - } - } - - if (!detectResults.isContains(4)) { - hiddenTrouble.type = 17 - postInvalidate() - } - + } else if (it.type == 31 || it.type == 32) { + //it此时代表灶台、灶眼 if (!detectResults.isContains(34)) { - hiddenTrouble.type = 18 - postInvalidate() + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现熄火保护装置" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(22)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现燃气泄漏报警装置" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(4)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现切断阀" + hiddenTroubles.add(result) + break } - - if (!detectResults.isContains(22)) { - hiddenTrouble.type = 19 - postInvalidate() + } else if (it.type == 2 || it.type == 49) { + //it此时代表软管 + if (detectResults.isContains(1)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "软管有接头或三通" + 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)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现呼吸防护设备" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(42) || !detectResults.isContains(37)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现路锥、警戒线" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(14)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现安全告知牌" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(50) || !detectResults.isContains(51)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现通风设备" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(33)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现井下照明设备" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(18)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现井下对讲设备" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(0)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现施工三脚架" + hiddenTroubles.add(result) + break + } else if (!detectResults.isContains(25)) { + val result = FreeModeYoloResult() + result.position = it.position + result.warning = "未发现气体检测仪" + hiddenTroubles.add(result) + break } } } + this.hiddenTroubles = hiddenTroubles + + postInvalidate() } override fun onDraw(canvas: Canvas) { @@ -196,10 +208,8 @@ drawAlarmTips(canvas, it, LocaleConstant.SEGMENTATION_ARRAY[it.type]) } - if (detectResults.isNotEmpty()) { - drawAlarmTips( - canvas, hiddenTrouble, LocaleConstant.HIDDEN_TROUBLE_ARRAY[hiddenTrouble.type] - ) + hiddenTroubles.forEach { + drawAlarmTips(canvas, it, it.warning) } } @@ -214,7 +224,7 @@ (it.position[0] + textRectWidth).toInt(), (it.position[1] - textRectHeight).toInt() ) - if (label == "非专用软管") { + if (label == "非专用软管" || label == "电线暴露") { backgroundPaint.color = Color.RED } else { backgroundPaint.color = Color.GREEN @@ -236,7 +246,7 @@ it.position[2].toInt(), it.position[3].toInt() ) - if (label == "非专用软管") { + if (label == "非专用软管" || label == "电线暴露") { borderPaint.color = Color.RED } else { borderPaint.color = Color.GREEN