diff --git a/app/src/main/java/com/casic/br/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/app/view/MainActivity.kt index 0fb34e3..17cff9d 100644 --- a/app/src/main/java/com/casic/br/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/MainActivity.kt @@ -20,8 +20,8 @@ } binding.startCheckButton.setOnClickListener { -// navigatePageTo() - navigatePageTo() + navigatePageTo() +// navigatePageTo() } binding.checkHistoryButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/app/view/MainActivity.kt index 0fb34e3..17cff9d 100644 --- a/app/src/main/java/com/casic/br/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/MainActivity.kt @@ -20,8 +20,8 @@ } binding.startCheckButton.setOnClickListener { -// navigatePageTo() - navigatePageTo() + navigatePageTo() +// navigatePageTo() } binding.checkHistoryButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt index d72fab6..940b35c 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt @@ -160,11 +160,11 @@ * */ if (it.code == 200) { if (it.result.isEmpty()) { -// binding.detectView.clearTag() + binding.detectView.clearTag() targetSet.clear() binding.tipsTagView.visibility = View.GONE } else { -// binding.detectView.updateTargetPosition(it.result) + binding.detectView.updateTargetPosition(it.result) it.result.forEach { result -> targetSet.add(result.label) } diff --git a/app/src/main/java/com/casic/br/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/app/view/MainActivity.kt index 0fb34e3..17cff9d 100644 --- a/app/src/main/java/com/casic/br/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/MainActivity.kt @@ -20,8 +20,8 @@ } binding.startCheckButton.setOnClickListener { -// navigatePageTo() - navigatePageTo() + navigatePageTo() +// navigatePageTo() } binding.checkHistoryButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt index d72fab6..940b35c 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt @@ -160,11 +160,11 @@ * */ if (it.code == 200) { if (it.result.isEmpty()) { -// binding.detectView.clearTag() + binding.detectView.clearTag() targetSet.clear() binding.tipsTagView.visibility = View.GONE } else { -// binding.detectView.updateTargetPosition(it.result) + binding.detectView.updateTargetPosition(it.result) it.result.forEach { result -> targetSet.add(result.label) } 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 f174d86..d8f7cc2 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 @@ -3,7 +3,6 @@ import android.content.Intent import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.WindowManager import androidx.activity.result.ActivityResultCallback @@ -181,7 +180,6 @@ } override fun onDetect(output: ArrayList) { - Log.d(kTag, output.toJson()) binding.detectView.updateTargetPosition(output) // if (mat.width() > 0 && mat.height() > 0) { // val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/java/com/casic/br/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/app/view/MainActivity.kt index 0fb34e3..17cff9d 100644 --- a/app/src/main/java/com/casic/br/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/MainActivity.kt @@ -20,8 +20,8 @@ } binding.startCheckButton.setOnClickListener { -// navigatePageTo() - navigatePageTo() + navigatePageTo() +// navigatePageTo() } binding.checkHistoryButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt index d72fab6..940b35c 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt @@ -160,11 +160,11 @@ * */ if (it.code == 200) { if (it.result.isEmpty()) { -// binding.detectView.clearTag() + binding.detectView.clearTag() targetSet.clear() binding.tipsTagView.visibility = View.GONE } else { -// binding.detectView.updateTargetPosition(it.result) + binding.detectView.updateTargetPosition(it.result) it.result.forEach { result -> targetSet.add(result.label) } 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 f174d86..d8f7cc2 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 @@ -3,7 +3,6 @@ import android.content.Intent import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.WindowManager import androidx.activity.result.ActivityResultCallback @@ -181,7 +180,6 @@ } override fun onDetect(output: ArrayList) { - Log.d(kTag, output.toJson()) binding.detectView.updateTargetPosition(output) // if (mat.width() > 0 && mat.height() > 0) { // val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt index 5e7f962..0ce98be 100644 --- a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt +++ b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt @@ -8,82 +8,72 @@ import android.text.TextPaint import android.util.AttributeSet import android.view.View -import com.casic.br.app.external.DetectResult +import com.casic.br.app.model.RecognizeResultModel import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.getStatusBarHeight import com.pengxh.kt.lite.extensions.sp2px class AITargetDetectView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) { private val kTag = "DetectView" private val textPaint by lazy { TextPaint() } - private val backgroundPaint by lazy { Paint() } private val borderPaint by lazy { Paint() } private val rect by lazy { Rect() } - private val classNames = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" - ) - private var results: MutableList = ArrayList() + private var viewWidth = 0 + private var viewHeight = 0 + private var resultModels: MutableList = ArrayList() init { - textPaint.color = Color.WHITE + textPaint.color = Color.RED textPaint.isAntiAlias = true textPaint.textAlign = Paint.Align.CENTER textPaint.textSize = 14f.sp2px(context) - backgroundPaint.color = Color.BLUE - backgroundPaint.style = Paint.Style.FILL - backgroundPaint.isAntiAlias = true - - borderPaint.color = Color.BLUE + borderPaint.color = Color.RED borderPaint.style = Paint.Style.STROKE borderPaint.strokeWidth = 2f.dp2px(context) //设置线宽 borderPaint.isAntiAlias = true + + viewWidth = context.getScreenWidth() + //屏幕整体高度-状态栏高度-标题栏高度 + viewHeight = context.getScreenHeight() - context.getStatusBarHeight() - 44.dp2px(context) } - fun updateTargetPosition(results: MutableList) { - this.results = results - postInvalidate() + fun updateTargetPosition(resultModels: MutableList) { + this.resultModels = resultModels + invalidate() + } + + fun clearTag() { + this.resultModels.clear() + invalidate() } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - results.forEach { - val label = classNames[it.type] - val textLength = textPaint.measureText(label) + resultModels.forEach { + if (it.box.isNotEmpty()) { + //画文字 + val textLength = textPaint.measureText(it.label) + canvas.drawText( + it.label, + (it.box[0] * viewWidth + textLength / 2).toFloat(), + (it.box[1] * viewHeight - 10).toFloat(), + textPaint + ) - //文字背景 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[0].dp2px(context) + textLength).toInt() + 10, - it.position[1].dp2px(context).toInt() - 55 - ) - canvas.drawRect(rect, backgroundPaint) - - //画文字。数值是文字左右边距,可酌情调整 - canvas.drawText( - label, - it.position[0].dp2px(context) + (textLength + 10) / 2, - it.position[1].dp2px(context) - 10, - textPaint - ) - - //画框 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[2] + it.position[0]).dp2px(context).toInt(), - (it.position[3] + it.position[1]).dp2px(context).toInt() - ) - canvas.drawRect(rect, borderPaint) + //画框 + val box = it.box + rect.set( + (box[0] * viewWidth).toInt(), + (box[1] * viewHeight).toInt(), + (box[2] * viewWidth).toInt(), + (box[3] * viewHeight).toInt() + ) + canvas.drawRect(rect, borderPaint) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/app/view/MainActivity.kt index 0fb34e3..17cff9d 100644 --- a/app/src/main/java/com/casic/br/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/MainActivity.kt @@ -20,8 +20,8 @@ } binding.startCheckButton.setOnClickListener { -// navigatePageTo() - navigatePageTo() + navigatePageTo() +// navigatePageTo() } binding.checkHistoryButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt index d72fab6..940b35c 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt @@ -160,11 +160,11 @@ * */ if (it.code == 200) { if (it.result.isEmpty()) { -// binding.detectView.clearTag() + binding.detectView.clearTag() targetSet.clear() binding.tipsTagView.visibility = View.GONE } else { -// binding.detectView.updateTargetPosition(it.result) + binding.detectView.updateTargetPosition(it.result) it.result.forEach { result -> targetSet.add(result.label) } 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 f174d86..d8f7cc2 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 @@ -3,7 +3,6 @@ import android.content.Intent import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.WindowManager import androidx.activity.result.ActivityResultCallback @@ -181,7 +180,6 @@ } override fun onDetect(output: ArrayList) { - Log.d(kTag, output.toJson()) binding.detectView.updateTargetPosition(output) // if (mat.width() > 0 && mat.height() > 0) { // val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt index 5e7f962..0ce98be 100644 --- a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt +++ b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt @@ -8,82 +8,72 @@ import android.text.TextPaint import android.util.AttributeSet import android.view.View -import com.casic.br.app.external.DetectResult +import com.casic.br.app.model.RecognizeResultModel import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.getStatusBarHeight import com.pengxh.kt.lite.extensions.sp2px class AITargetDetectView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) { private val kTag = "DetectView" private val textPaint by lazy { TextPaint() } - private val backgroundPaint by lazy { Paint() } private val borderPaint by lazy { Paint() } private val rect by lazy { Rect() } - private val classNames = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" - ) - private var results: MutableList = ArrayList() + private var viewWidth = 0 + private var viewHeight = 0 + private var resultModels: MutableList = ArrayList() init { - textPaint.color = Color.WHITE + textPaint.color = Color.RED textPaint.isAntiAlias = true textPaint.textAlign = Paint.Align.CENTER textPaint.textSize = 14f.sp2px(context) - backgroundPaint.color = Color.BLUE - backgroundPaint.style = Paint.Style.FILL - backgroundPaint.isAntiAlias = true - - borderPaint.color = Color.BLUE + borderPaint.color = Color.RED borderPaint.style = Paint.Style.STROKE borderPaint.strokeWidth = 2f.dp2px(context) //设置线宽 borderPaint.isAntiAlias = true + + viewWidth = context.getScreenWidth() + //屏幕整体高度-状态栏高度-标题栏高度 + viewHeight = context.getScreenHeight() - context.getStatusBarHeight() - 44.dp2px(context) } - fun updateTargetPosition(results: MutableList) { - this.results = results - postInvalidate() + fun updateTargetPosition(resultModels: MutableList) { + this.resultModels = resultModels + invalidate() + } + + fun clearTag() { + this.resultModels.clear() + invalidate() } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - results.forEach { - val label = classNames[it.type] - val textLength = textPaint.measureText(label) + resultModels.forEach { + if (it.box.isNotEmpty()) { + //画文字 + val textLength = textPaint.measureText(it.label) + canvas.drawText( + it.label, + (it.box[0] * viewWidth + textLength / 2).toFloat(), + (it.box[1] * viewHeight - 10).toFloat(), + textPaint + ) - //文字背景 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[0].dp2px(context) + textLength).toInt() + 10, - it.position[1].dp2px(context).toInt() - 55 - ) - canvas.drawRect(rect, backgroundPaint) - - //画文字。数值是文字左右边距,可酌情调整 - canvas.drawText( - label, - it.position[0].dp2px(context) + (textLength + 10) / 2, - it.position[1].dp2px(context) - 10, - textPaint - ) - - //画框 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[2] + it.position[0]).dp2px(context).toInt(), - (it.position[3] + it.position[1]).dp2px(context).toInt() - ) - canvas.drawRect(rect, borderPaint) + //画框 + val box = it.box + rect.set( + (box[0] * viewWidth).toInt(), + (box[1] * viewHeight).toInt(), + (box[2] * viewWidth).toInt(), + (box[3] * viewHeight).toInt() + ) + canvas.drawRect(rect, borderPaint) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt b/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt index cd73ac7..6580b77 100644 --- a/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt +++ b/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt @@ -4,8 +4,8 @@ import android.content.Context import android.os.Bundle import android.view.Gravity -import com.casic.br.app.R import com.casic.br.app.databinding.SheetCheckStandardBinding +import com.pengxh.kt.lite.R import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.resetParams diff --git a/app/src/main/java/com/casic/br/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/app/view/MainActivity.kt index 0fb34e3..17cff9d 100644 --- a/app/src/main/java/com/casic/br/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/MainActivity.kt @@ -20,8 +20,8 @@ } binding.startCheckButton.setOnClickListener { -// navigatePageTo() - navigatePageTo() + navigatePageTo() +// navigatePageTo() } binding.checkHistoryButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt index d72fab6..940b35c 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt @@ -160,11 +160,11 @@ * */ if (it.code == 200) { if (it.result.isEmpty()) { -// binding.detectView.clearTag() + binding.detectView.clearTag() targetSet.clear() binding.tipsTagView.visibility = View.GONE } else { -// binding.detectView.updateTargetPosition(it.result) + binding.detectView.updateTargetPosition(it.result) it.result.forEach { result -> targetSet.add(result.label) } 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 f174d86..d8f7cc2 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 @@ -3,7 +3,6 @@ import android.content.Intent import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.WindowManager import androidx.activity.result.ActivityResultCallback @@ -181,7 +180,6 @@ } override fun onDetect(output: ArrayList) { - Log.d(kTag, output.toJson()) binding.detectView.updateTargetPosition(output) // if (mat.width() > 0 && mat.height() > 0) { // val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt index 5e7f962..0ce98be 100644 --- a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt +++ b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt @@ -8,82 +8,72 @@ import android.text.TextPaint import android.util.AttributeSet import android.view.View -import com.casic.br.app.external.DetectResult +import com.casic.br.app.model.RecognizeResultModel import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.getStatusBarHeight import com.pengxh.kt.lite.extensions.sp2px class AITargetDetectView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) { private val kTag = "DetectView" private val textPaint by lazy { TextPaint() } - private val backgroundPaint by lazy { Paint() } private val borderPaint by lazy { Paint() } private val rect by lazy { Rect() } - private val classNames = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" - ) - private var results: MutableList = ArrayList() + private var viewWidth = 0 + private var viewHeight = 0 + private var resultModels: MutableList = ArrayList() init { - textPaint.color = Color.WHITE + textPaint.color = Color.RED textPaint.isAntiAlias = true textPaint.textAlign = Paint.Align.CENTER textPaint.textSize = 14f.sp2px(context) - backgroundPaint.color = Color.BLUE - backgroundPaint.style = Paint.Style.FILL - backgroundPaint.isAntiAlias = true - - borderPaint.color = Color.BLUE + borderPaint.color = Color.RED borderPaint.style = Paint.Style.STROKE borderPaint.strokeWidth = 2f.dp2px(context) //设置线宽 borderPaint.isAntiAlias = true + + viewWidth = context.getScreenWidth() + //屏幕整体高度-状态栏高度-标题栏高度 + viewHeight = context.getScreenHeight() - context.getStatusBarHeight() - 44.dp2px(context) } - fun updateTargetPosition(results: MutableList) { - this.results = results - postInvalidate() + fun updateTargetPosition(resultModels: MutableList) { + this.resultModels = resultModels + invalidate() + } + + fun clearTag() { + this.resultModels.clear() + invalidate() } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - results.forEach { - val label = classNames[it.type] - val textLength = textPaint.measureText(label) + resultModels.forEach { + if (it.box.isNotEmpty()) { + //画文字 + val textLength = textPaint.measureText(it.label) + canvas.drawText( + it.label, + (it.box[0] * viewWidth + textLength / 2).toFloat(), + (it.box[1] * viewHeight - 10).toFloat(), + textPaint + ) - //文字背景 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[0].dp2px(context) + textLength).toInt() + 10, - it.position[1].dp2px(context).toInt() - 55 - ) - canvas.drawRect(rect, backgroundPaint) - - //画文字。数值是文字左右边距,可酌情调整 - canvas.drawText( - label, - it.position[0].dp2px(context) + (textLength + 10) / 2, - it.position[1].dp2px(context) - 10, - textPaint - ) - - //画框 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[2] + it.position[0]).dp2px(context).toInt(), - (it.position[3] + it.position[1]).dp2px(context).toInt() - ) - canvas.drawRect(rect, borderPaint) + //画框 + val box = it.box + rect.set( + (box[0] * viewWidth).toInt(), + (box[1] * viewHeight).toInt(), + (box[2] * viewWidth).toInt(), + (box[3] * viewHeight).toInt() + ) + canvas.drawRect(rect, borderPaint) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt b/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt index cd73ac7..6580b77 100644 --- a/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt +++ b/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt @@ -4,8 +4,8 @@ import android.content.Context import android.os.Bundle import android.view.Gravity -import com.casic.br.app.R import com.casic.br.app.databinding.SheetCheckStandardBinding +import com.pengxh.kt.lite.R import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.resetParams diff --git a/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt new file mode 100644 index 0000000..cb05187 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt @@ -0,0 +1,89 @@ +package com.casic.br.app.widgets + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.Rect +import android.text.TextPaint +import android.util.AttributeSet +import android.view.View +import com.casic.br.app.external.DetectResult +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.sp2px + +class YoloTargetDetectView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) { + + private val kTag = "DetectView" + private val textPaint by lazy { TextPaint() } + private val backgroundPaint by lazy { Paint() } + private val borderPaint by lazy { Paint() } + private val rect by lazy { Rect() } + private val classNames = arrayListOf( + "三脚架", "三通", "人", "切断阀", "危险告知牌", + "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", + "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", + "对讲机", "尖头水枪", "开关", "报警装置", "接头", + "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", + "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", + "电路图", "警戒线", "调压器", "调长器", "贴纸", + "跨电线", "路锥", "软管", "过滤器", "配电箱", + "长柄阀门", "阀门", "风管" + ) + private var results: MutableList = ArrayList() + + init { + textPaint.color = Color.WHITE + textPaint.isAntiAlias = true + textPaint.textAlign = Paint.Align.CENTER + textPaint.textSize = 14f.sp2px(context) + + backgroundPaint.color = Color.BLUE + backgroundPaint.style = Paint.Style.FILL + backgroundPaint.isAntiAlias = true + + borderPaint.color = Color.BLUE + borderPaint.style = Paint.Style.STROKE + borderPaint.strokeWidth = 2f.dp2px(context) //设置线宽 + borderPaint.isAntiAlias = true + } + + fun updateTargetPosition(results: MutableList) { + this.results = results + postInvalidate() + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + results.forEach { + val label = classNames[it.type] + val textLength = textPaint.measureText(label) + + //文字背景 + rect.set( + (it.position[0].dp2px(context)).toInt(), + (it.position[1].dp2px(context)).toInt(), + (it.position[0].dp2px(context) + textLength).toInt() + 10, + it.position[1].dp2px(context).toInt() - 55 + ) + canvas.drawRect(rect, backgroundPaint) + + //画文字。数值是文字左右边距,可酌情调整 + canvas.drawText( + label, + it.position[0].dp2px(context) + (textLength + 10) / 2, + it.position[1].dp2px(context) - 10, + textPaint + ) + + //画框 + rect.set( + (it.position[0].dp2px(context)).toInt(), + (it.position[1].dp2px(context)).toInt(), + (it.position[2] + it.position[0]).dp2px(context).toInt(), + (it.position[3] + it.position[1]).dp2px(context).toInt() + ) + canvas.drawRect(rect, borderPaint) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/app/view/MainActivity.kt index 0fb34e3..17cff9d 100644 --- a/app/src/main/java/com/casic/br/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/MainActivity.kt @@ -20,8 +20,8 @@ } binding.startCheckButton.setOnClickListener { -// navigatePageTo() - navigatePageTo() + navigatePageTo() +// navigatePageTo() } binding.checkHistoryButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt index d72fab6..940b35c 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt @@ -160,11 +160,11 @@ * */ if (it.code == 200) { if (it.result.isEmpty()) { -// binding.detectView.clearTag() + binding.detectView.clearTag() targetSet.clear() binding.tipsTagView.visibility = View.GONE } else { -// binding.detectView.updateTargetPosition(it.result) + binding.detectView.updateTargetPosition(it.result) it.result.forEach { result -> targetSet.add(result.label) } 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 f174d86..d8f7cc2 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 @@ -3,7 +3,6 @@ import android.content.Intent import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.WindowManager import androidx.activity.result.ActivityResultCallback @@ -181,7 +180,6 @@ } override fun onDetect(output: ArrayList) { - Log.d(kTag, output.toJson()) binding.detectView.updateTargetPosition(output) // if (mat.width() > 0 && mat.height() > 0) { // val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt index 5e7f962..0ce98be 100644 --- a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt +++ b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt @@ -8,82 +8,72 @@ import android.text.TextPaint import android.util.AttributeSet import android.view.View -import com.casic.br.app.external.DetectResult +import com.casic.br.app.model.RecognizeResultModel import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.getStatusBarHeight import com.pengxh.kt.lite.extensions.sp2px class AITargetDetectView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) { private val kTag = "DetectView" private val textPaint by lazy { TextPaint() } - private val backgroundPaint by lazy { Paint() } private val borderPaint by lazy { Paint() } private val rect by lazy { Rect() } - private val classNames = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" - ) - private var results: MutableList = ArrayList() + private var viewWidth = 0 + private var viewHeight = 0 + private var resultModels: MutableList = ArrayList() init { - textPaint.color = Color.WHITE + textPaint.color = Color.RED textPaint.isAntiAlias = true textPaint.textAlign = Paint.Align.CENTER textPaint.textSize = 14f.sp2px(context) - backgroundPaint.color = Color.BLUE - backgroundPaint.style = Paint.Style.FILL - backgroundPaint.isAntiAlias = true - - borderPaint.color = Color.BLUE + borderPaint.color = Color.RED borderPaint.style = Paint.Style.STROKE borderPaint.strokeWidth = 2f.dp2px(context) //设置线宽 borderPaint.isAntiAlias = true + + viewWidth = context.getScreenWidth() + //屏幕整体高度-状态栏高度-标题栏高度 + viewHeight = context.getScreenHeight() - context.getStatusBarHeight() - 44.dp2px(context) } - fun updateTargetPosition(results: MutableList) { - this.results = results - postInvalidate() + fun updateTargetPosition(resultModels: MutableList) { + this.resultModels = resultModels + invalidate() + } + + fun clearTag() { + this.resultModels.clear() + invalidate() } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - results.forEach { - val label = classNames[it.type] - val textLength = textPaint.measureText(label) + resultModels.forEach { + if (it.box.isNotEmpty()) { + //画文字 + val textLength = textPaint.measureText(it.label) + canvas.drawText( + it.label, + (it.box[0] * viewWidth + textLength / 2).toFloat(), + (it.box[1] * viewHeight - 10).toFloat(), + textPaint + ) - //文字背景 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[0].dp2px(context) + textLength).toInt() + 10, - it.position[1].dp2px(context).toInt() - 55 - ) - canvas.drawRect(rect, backgroundPaint) - - //画文字。数值是文字左右边距,可酌情调整 - canvas.drawText( - label, - it.position[0].dp2px(context) + (textLength + 10) / 2, - it.position[1].dp2px(context) - 10, - textPaint - ) - - //画框 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[2] + it.position[0]).dp2px(context).toInt(), - (it.position[3] + it.position[1]).dp2px(context).toInt() - ) - canvas.drawRect(rect, borderPaint) + //画框 + val box = it.box + rect.set( + (box[0] * viewWidth).toInt(), + (box[1] * viewHeight).toInt(), + (box[2] * viewWidth).toInt(), + (box[3] * viewHeight).toInt() + ) + canvas.drawRect(rect, borderPaint) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt b/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt index cd73ac7..6580b77 100644 --- a/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt +++ b/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt @@ -4,8 +4,8 @@ import android.content.Context import android.os.Bundle import android.view.Gravity -import com.casic.br.app.R import com.casic.br.app.databinding.SheetCheckStandardBinding +import com.pengxh.kt.lite.R import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.resetParams diff --git a/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt new file mode 100644 index 0000000..cb05187 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt @@ -0,0 +1,89 @@ +package com.casic.br.app.widgets + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.Rect +import android.text.TextPaint +import android.util.AttributeSet +import android.view.View +import com.casic.br.app.external.DetectResult +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.sp2px + +class YoloTargetDetectView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) { + + private val kTag = "DetectView" + private val textPaint by lazy { TextPaint() } + private val backgroundPaint by lazy { Paint() } + private val borderPaint by lazy { Paint() } + private val rect by lazy { Rect() } + private val classNames = arrayListOf( + "三脚架", "三通", "人", "切断阀", "危险告知牌", + "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", + "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", + "对讲机", "尖头水枪", "开关", "报警装置", "接头", + "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", + "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", + "电路图", "警戒线", "调压器", "调长器", "贴纸", + "跨电线", "路锥", "软管", "过滤器", "配电箱", + "长柄阀门", "阀门", "风管" + ) + private var results: MutableList = ArrayList() + + init { + textPaint.color = Color.WHITE + textPaint.isAntiAlias = true + textPaint.textAlign = Paint.Align.CENTER + textPaint.textSize = 14f.sp2px(context) + + backgroundPaint.color = Color.BLUE + backgroundPaint.style = Paint.Style.FILL + backgroundPaint.isAntiAlias = true + + borderPaint.color = Color.BLUE + borderPaint.style = Paint.Style.STROKE + borderPaint.strokeWidth = 2f.dp2px(context) //设置线宽 + borderPaint.isAntiAlias = true + } + + fun updateTargetPosition(results: MutableList) { + this.results = results + postInvalidate() + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + results.forEach { + val label = classNames[it.type] + val textLength = textPaint.measureText(label) + + //文字背景 + rect.set( + (it.position[0].dp2px(context)).toInt(), + (it.position[1].dp2px(context)).toInt(), + (it.position[0].dp2px(context) + textLength).toInt() + 10, + it.position[1].dp2px(context).toInt() - 55 + ) + canvas.drawRect(rect, backgroundPaint) + + //画文字。数值是文字左右边距,可酌情调整 + canvas.drawText( + label, + it.position[0].dp2px(context) + (textLength + 10) / 2, + it.position[1].dp2px(context) - 10, + textPaint + ) + + //画框 + rect.set( + (it.position[0].dp2px(context)).toInt(), + (it.position[1].dp2px(context)).toInt(), + (it.position[2] + it.position[0]).dp2px(context).toInt(), + (it.position[3] + it.position[1]).dp2px(context).toInt() + ) + canvas.drawRect(rect, borderPaint) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_start_check.xml b/app/src/main/res/layout/activity_start_check.xml index 9c3a832..9336b61 100644 --- a/app/src/main/res/layout/activity_start_check.xml +++ b/app/src/main/res/layout/activity_start_check.xml @@ -84,15 +84,32 @@ android:textColor="@color/white" app:drawableTopCompat="@drawable/ic_add_hidden_trouble" /> - + android:layout_margin="@dimen/dp_10"> + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/app/view/MainActivity.kt index 0fb34e3..17cff9d 100644 --- a/app/src/main/java/com/casic/br/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/MainActivity.kt @@ -20,8 +20,8 @@ } binding.startCheckButton.setOnClickListener { -// navigatePageTo() - navigatePageTo() + navigatePageTo() +// navigatePageTo() } binding.checkHistoryButton.setOnClickListener { diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt index d72fab6..940b35c 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckActivity.kt @@ -160,11 +160,11 @@ * */ if (it.code == 200) { if (it.result.isEmpty()) { -// binding.detectView.clearTag() + binding.detectView.clearTag() targetSet.clear() binding.tipsTagView.visibility = View.GONE } else { -// binding.detectView.updateTargetPosition(it.result) + binding.detectView.updateTargetPosition(it.result) it.result.forEach { result -> targetSet.add(result.label) } 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 f174d86..d8f7cc2 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 @@ -3,7 +3,6 @@ import android.content.Intent import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.WindowManager import androidx.activity.result.ActivityResultCallback @@ -181,7 +180,6 @@ } override fun onDetect(output: ArrayList) { - Log.d(kTag, output.toJson()) binding.detectView.updateTargetPosition(output) // if (mat.width() > 0 && mat.height() > 0) { // val bitmap = Bitmap.createBitmap(mat.width(), mat.height(), Bitmap.Config.ARGB_8888) diff --git a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt index 5e7f962..0ce98be 100644 --- a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt +++ b/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt @@ -8,82 +8,72 @@ import android.text.TextPaint import android.util.AttributeSet import android.view.View -import com.casic.br.app.external.DetectResult +import com.casic.br.app.model.RecognizeResultModel import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.getStatusBarHeight import com.pengxh.kt.lite.extensions.sp2px class AITargetDetectView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) { private val kTag = "DetectView" private val textPaint by lazy { TextPaint() } - private val backgroundPaint by lazy { Paint() } private val borderPaint by lazy { Paint() } private val rect by lazy { Rect() } - private val classNames = arrayListOf( - "三脚架", "三通", "人", "切断阀", "危险告知牌", - "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", - "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", - "对讲机", "尖头水枪", "开关", "报警装置", "接头", - "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", - "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", - "电路图", "警戒线", "调压器", "调长器", "贴纸", - "跨电线", "路锥", "软管", "过滤器", "配电箱", - "长柄阀门", "阀门", "风管" - ) - private var results: MutableList = ArrayList() + private var viewWidth = 0 + private var viewHeight = 0 + private var resultModels: MutableList = ArrayList() init { - textPaint.color = Color.WHITE + textPaint.color = Color.RED textPaint.isAntiAlias = true textPaint.textAlign = Paint.Align.CENTER textPaint.textSize = 14f.sp2px(context) - backgroundPaint.color = Color.BLUE - backgroundPaint.style = Paint.Style.FILL - backgroundPaint.isAntiAlias = true - - borderPaint.color = Color.BLUE + borderPaint.color = Color.RED borderPaint.style = Paint.Style.STROKE borderPaint.strokeWidth = 2f.dp2px(context) //设置线宽 borderPaint.isAntiAlias = true + + viewWidth = context.getScreenWidth() + //屏幕整体高度-状态栏高度-标题栏高度 + viewHeight = context.getScreenHeight() - context.getStatusBarHeight() - 44.dp2px(context) } - fun updateTargetPosition(results: MutableList) { - this.results = results - postInvalidate() + fun updateTargetPosition(resultModels: MutableList) { + this.resultModels = resultModels + invalidate() + } + + fun clearTag() { + this.resultModels.clear() + invalidate() } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - results.forEach { - val label = classNames[it.type] - val textLength = textPaint.measureText(label) + resultModels.forEach { + if (it.box.isNotEmpty()) { + //画文字 + val textLength = textPaint.measureText(it.label) + canvas.drawText( + it.label, + (it.box[0] * viewWidth + textLength / 2).toFloat(), + (it.box[1] * viewHeight - 10).toFloat(), + textPaint + ) - //文字背景 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[0].dp2px(context) + textLength).toInt() + 10, - it.position[1].dp2px(context).toInt() - 55 - ) - canvas.drawRect(rect, backgroundPaint) - - //画文字。数值是文字左右边距,可酌情调整 - canvas.drawText( - label, - it.position[0].dp2px(context) + (textLength + 10) / 2, - it.position[1].dp2px(context) - 10, - textPaint - ) - - //画框 - rect.set( - (it.position[0].dp2px(context)).toInt(), - (it.position[1].dp2px(context)).toInt(), - (it.position[2] + it.position[0]).dp2px(context).toInt(), - (it.position[3] + it.position[1]).dp2px(context).toInt() - ) - canvas.drawRect(rect, borderPaint) + //画框 + val box = it.box + rect.set( + (box[0] * viewWidth).toInt(), + (box[1] * viewHeight).toInt(), + (box[2] * viewWidth).toInt(), + (box[3] * viewHeight).toInt() + ) + canvas.drawRect(rect, borderPaint) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt b/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt index cd73ac7..6580b77 100644 --- a/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt +++ b/app/src/main/java/com/casic/br/app/widgets/CheckStandardSheet.kt @@ -4,8 +4,8 @@ import android.content.Context import android.os.Bundle import android.view.Gravity -import com.casic.br.app.R import com.casic.br.app.databinding.SheetCheckStandardBinding +import com.pengxh.kt.lite.R import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.resetParams diff --git a/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt b/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt new file mode 100644 index 0000000..cb05187 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/widgets/YoloTargetDetectView.kt @@ -0,0 +1,89 @@ +package com.casic.br.app.widgets + +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.Rect +import android.text.TextPaint +import android.util.AttributeSet +import android.view.View +import com.casic.br.app.external.DetectResult +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.sp2px + +class YoloTargetDetectView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) { + + private val kTag = "DetectView" + private val textPaint by lazy { TextPaint() } + private val backgroundPaint by lazy { Paint() } + private val borderPaint by lazy { Paint() } + private val rect by lazy { Rect() } + private val classNames = arrayListOf( + "三脚架", "三通", "人", "切断阀", "危险告知牌", + "压力测试仪", "压力表", "反光衣", "呼吸面罩", "喉箍", + "圆头水枪", "安全告知牌", "安全帽", "安全标识", "安全绳", + "对讲机", "尖头水枪", "开关", "报警装置", "接头", + "施工路牌", "气体检测仪", "水带", "水带_矩形", "流量计", + "消火栓箱", "灭火器", "照明设备", "熄火保护", "电线暴露", + "电路图", "警戒线", "调压器", "调长器", "贴纸", + "跨电线", "路锥", "软管", "过滤器", "配电箱", + "长柄阀门", "阀门", "风管" + ) + private var results: MutableList = ArrayList() + + init { + textPaint.color = Color.WHITE + textPaint.isAntiAlias = true + textPaint.textAlign = Paint.Align.CENTER + textPaint.textSize = 14f.sp2px(context) + + backgroundPaint.color = Color.BLUE + backgroundPaint.style = Paint.Style.FILL + backgroundPaint.isAntiAlias = true + + borderPaint.color = Color.BLUE + borderPaint.style = Paint.Style.STROKE + borderPaint.strokeWidth = 2f.dp2px(context) //设置线宽 + borderPaint.isAntiAlias = true + } + + fun updateTargetPosition(results: MutableList) { + this.results = results + postInvalidate() + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + results.forEach { + val label = classNames[it.type] + val textLength = textPaint.measureText(label) + + //文字背景 + rect.set( + (it.position[0].dp2px(context)).toInt(), + (it.position[1].dp2px(context)).toInt(), + (it.position[0].dp2px(context) + textLength).toInt() + 10, + it.position[1].dp2px(context).toInt() - 55 + ) + canvas.drawRect(rect, backgroundPaint) + + //画文字。数值是文字左右边距,可酌情调整 + canvas.drawText( + label, + it.position[0].dp2px(context) + (textLength + 10) / 2, + it.position[1].dp2px(context) - 10, + textPaint + ) + + //画框 + rect.set( + (it.position[0].dp2px(context)).toInt(), + (it.position[1].dp2px(context)).toInt(), + (it.position[2] + it.position[0]).dp2px(context).toInt(), + (it.position[3] + it.position[1]).dp2px(context).toInt() + ) + canvas.drawRect(rect, borderPaint) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_start_check.xml b/app/src/main/res/layout/activity_start_check.xml index 9c3a832..9336b61 100644 --- a/app/src/main/res/layout/activity_start_check.xml +++ b/app/src/main/res/layout/activity_start_check.xml @@ -84,15 +84,32 @@ android:textColor="@color/white" app:drawableTopCompat="@drawable/ic_add_hidden_trouble" /> - + android:layout_margin="@dimen/dp_10"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_start_check_by_yolo.xml b/app/src/main/res/layout/activity_start_check_by_yolo.xml index db86b95..d0aa323 100644 --- a/app/src/main/res/layout/activity_start_check_by_yolo.xml +++ b/app/src/main/res/layout/activity_start_check_by_yolo.xml @@ -29,7 +29,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> -