diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
-
-
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index 6eec624..f6f365b 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -8,7 +8,6 @@
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query
@@ -165,20 +164,6 @@
): String
/**
- * 获取场景
- */
- @Multipart
- @POST("/getScene")
- suspend fun getScene(@PartMap body: MutableMap): String
-
- /**
- * 获取画面识别结果
- */
- @Multipart
- @POST("/detect")
- suspend fun getRecognizeResult(@PartMap body: MutableMap): String
-
- /**
* 获取知识库分类列表
*/
@GET("/knowledge-class/list")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index 6eec624..f6f365b 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -8,7 +8,6 @@
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query
@@ -165,20 +164,6 @@
): String
/**
- * 获取场景
- */
- @Multipart
- @POST("/getScene")
- suspend fun getScene(@PartMap body: MutableMap): String
-
- /**
- * 获取画面识别结果
- */
- @Multipart
- @POST("/detect")
- suspend fun getRecognizeResult(@PartMap body: MutableMap): String
-
- /**
* 获取知识库分类列表
*/
@GET("/knowledge-class/list")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index c4edbee..eaa358a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -11,7 +11,6 @@
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
-import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
@@ -26,13 +25,6 @@
RetrofitFactory.createRetrofit(httpConfig, 20, true)
}
- private val aiApi by lazy {
- val httpConfig = SaveKeyValues.getValue(
- LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
- ) as String
- RetrofitFactory.createRetrofit(httpConfig, 20, false)
- }
-
private val gson by lazy { Gson() }
private val typeToken = object : TypeToken>>() {}.type
@@ -223,26 +215,6 @@
}
/**
- * 获取场景
- * */
- suspend fun getScene(base64: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- return aiApi.getScene(map)
- }
-
- /**
- * 获取画面识别结果
- * */
- suspend fun getRecognizeResult(base64: String, scene: String, inspectionId: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- map["scene"] = scene.toRequestBody()
- map["xunjian_id"] = inspectionId.toRequestBody()
- return aiApi.getRecognizeResult(map)
- }
-
- /**
* 获取知识库分类列表
*/
suspend fun getLibraryList(): String {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index 6eec624..f6f365b 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -8,7 +8,6 @@
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query
@@ -165,20 +164,6 @@
): String
/**
- * 获取场景
- */
- @Multipart
- @POST("/getScene")
- suspend fun getScene(@PartMap body: MutableMap): String
-
- /**
- * 获取画面识别结果
- */
- @Multipart
- @POST("/detect")
- suspend fun getRecognizeResult(@PartMap body: MutableMap): String
-
- /**
* 获取知识库分类列表
*/
@GET("/knowledge-class/list")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index c4edbee..eaa358a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -11,7 +11,6 @@
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
-import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
@@ -26,13 +25,6 @@
RetrofitFactory.createRetrofit(httpConfig, 20, true)
}
- private val aiApi by lazy {
- val httpConfig = SaveKeyValues.getValue(
- LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
- ) as String
- RetrofitFactory.createRetrofit(httpConfig, 20, false)
- }
-
private val gson by lazy { Gson() }
private val typeToken = object : TypeToken>>() {}.type
@@ -223,26 +215,6 @@
}
/**
- * 获取场景
- * */
- suspend fun getScene(base64: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- return aiApi.getScene(map)
- }
-
- /**
- * 获取画面识别结果
- * */
- suspend fun getRecognizeResult(base64: String, scene: String, inspectionId: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- map["scene"] = scene.toRequestBody()
- map["xunjian_id"] = inspectionId.toRequestBody()
- return aiApi.getRecognizeResult(map)
- }
-
- /**
* 获取知识库分类列表
*/
suspend fun getLibraryList(): String {
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index e4f25df..1e9fe47 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -7,6 +7,7 @@
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.callback.OnImageCompressListener
import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding
import com.casic.br.app.extensions.combineFilePath
import com.casic.br.app.extensions.compressImage
@@ -15,7 +16,6 @@
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.HiddenTroubleViewModel
import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.operationsite.test.callback.OnImageCompressListener
import com.pengxh.kt.lite.adapter.EditableImageAdapter
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index 6eec624..f6f365b 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -8,7 +8,6 @@
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query
@@ -165,20 +164,6 @@
): String
/**
- * 获取场景
- */
- @Multipart
- @POST("/getScene")
- suspend fun getScene(@PartMap body: MutableMap): String
-
- /**
- * 获取画面识别结果
- */
- @Multipart
- @POST("/detect")
- suspend fun getRecognizeResult(@PartMap body: MutableMap): String
-
- /**
* 获取知识库分类列表
*/
@GET("/knowledge-class/list")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index c4edbee..eaa358a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -11,7 +11,6 @@
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
-import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
@@ -26,13 +25,6 @@
RetrofitFactory.createRetrofit(httpConfig, 20, true)
}
- private val aiApi by lazy {
- val httpConfig = SaveKeyValues.getValue(
- LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
- ) as String
- RetrofitFactory.createRetrofit(httpConfig, 20, false)
- }
-
private val gson by lazy { Gson() }
private val typeToken = object : TypeToken>>() {}.type
@@ -223,26 +215,6 @@
}
/**
- * 获取场景
- * */
- suspend fun getScene(base64: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- return aiApi.getScene(map)
- }
-
- /**
- * 获取画面识别结果
- * */
- suspend fun getRecognizeResult(base64: String, scene: String, inspectionId: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- map["scene"] = scene.toRequestBody()
- map["xunjian_id"] = inspectionId.toRequestBody()
- return aiApi.getRecognizeResult(map)
- }
-
- /**
* 获取知识库分类列表
*/
suspend fun getLibraryList(): String {
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index e4f25df..1e9fe47 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -7,6 +7,7 @@
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.callback.OnImageCompressListener
import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding
import com.casic.br.app.extensions.combineFilePath
import com.casic.br.app.extensions.compressImage
@@ -15,7 +16,6 @@
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.HiddenTroubleViewModel
import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.operationsite.test.callback.OnImageCompressListener
import com.pengxh.kt.lite.adapter.EditableImageAdapter
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets
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 940b35c..bbff411 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
@@ -1,7 +1,5 @@
package com.casic.br.app.view
-import android.app.Activity
-import android.content.Intent
import android.graphics.Bitmap
import android.graphics.ImageFormat
import android.os.Build
@@ -10,9 +8,6 @@
import android.util.DisplayMetrics
import android.util.Log
import android.view.Surface
-import android.view.View
-import androidx.activity.result.ActivityResultCallback
-import androidx.activity.result.contract.ActivityResultContracts
import androidx.camera.core.AspectRatio
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraState
@@ -21,30 +16,13 @@
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
-import androidx.lifecycle.ViewModelProvider
-import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.extensions.toBitmap
-import com.casic.br.app.model.DictionaryModel
-import com.casic.br.app.utils.LocaleConstant
-import com.casic.br.app.utils.LocationManager
-import com.casic.br.app.vm.ConfigViewModel
-import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.timestampToDate
-import com.pengxh.kt.lite.extensions.timestampToTime
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.util.concurrent.ExecutionException
@@ -64,7 +42,6 @@
}
private val kTag = "StartCheckActivity"
- private val context = this
private val executor = ThreadPoolExecutor(
16,
16,
@@ -73,113 +50,14 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
- private val locationManager by lazy { LocationManager(this) }
- private val targetSet by lazy { HashSet() }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
- private lateinit var inspectionViewModel: InspectionViewModel
- private lateinit var configViewModel: ConfigViewModel
- private lateinit var imageFileViewModel: ImageFileViewModel
- private var detectedScene = ""
- private var inspectionId = ""
- private var inspectionAddress = ""
- private var isDetectingScene = false //是否正在识别场景
- private var isDetectingTarget = false //是否正在识别目标
- private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
- locationManager.getCurrentLocation(false, object : LocationManager.OnGetLocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- location?.apply {
- inspectionAddress = address
- }
- }
- })
-
- inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
- val inspectionUser = SaveKeyValues.getValue(
- LocaleConstant.ACCOUNT, ""
- ) as String
-
- val currentTimeMillis = System.currentTimeMillis()
- val inspectionDate = currentTimeMillis.timestampToDate()
- val startTime = currentTimeMillis.timestampToTime()
- inspectionViewModel.startInspection(
- context, inspectionUser, inspectionAddress, inspectionDate, startTime
- )
- inspectionViewModel.addResultModel.observe(this) {
- if (it.code == 200) {
- inspectionId = it.data
- }
- }
-
- configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
- configViewModel.getDictionaryByCode(context, "pitfallBigType")
- configViewModel.dictionary.observe(this) {
- if (it.code == 200) {
- mainDicModels = it.data
- }
- }
-
- imageFileViewModel = ViewModelProvider(this)[ImageFileViewModel::class.java]
- imageFileViewModel.sceneResult.observe(this) {
- if (it == "没有检查到任何场景") {
- isDetectingScene = false
- } else {
- AlertControlDialog.Builder().setContext(this).setTitle("提示")
- .setMessage("识别到目标场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- binding.titleView.setTitle(it)
- detectedScene = it
- }
-
- override fun onCancelClick() {
-
- }
- }).build().show()
- }
- }
-
- imageFileViewModel.recognizeResult.observe(this) {
- /**
- * {
- * "scene": "配电箱",
- * "inferneceStart": "2024-04-26 16:16:03.653",
- * "code": 200,
- * "inferneceEnd": "2024-04-26 16:16:03.774",
- * "inferneceInterval": "0:00:00.121",
- * "result": [
- *
- * ]
- * }
- * */
- if (it.code == 200) {
- if (it.result.isEmpty()) {
- binding.detectView.clearTag()
- targetSet.clear()
- binding.tipsTagView.visibility = View.GONE
- } else {
- binding.detectView.updateTargetPosition(it.result)
- it.result.forEach { result ->
- targetSet.add(result.label)
- }
- //显示角标
- binding.tipsTagView.visibility = View.VISIBLE
- binding.tipsTagView.text = "${targetSet.size}"
- }
- }
- isDetectingTarget = false
- }
-
- // Initialize our background executor
cameraExecutor = Executors.newSingleThreadExecutor()
cameraProviderFuture = ProcessCameraProvider.getInstance(this)
- // 检查 CameraProvider 可用性
cameraProviderFuture.addListener({
try {
bindPreview(cameraProviderFuture.get())
@@ -201,37 +79,36 @@
aspectRatio(outMetrics.widthPixels, outMetrics.heightPixels)
}
- // CameraSelector, 选择后置摄像头
- val cameraSelector =
- CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
+ val cameraSelector = CameraSelector.Builder()
+ .requireLensFacing(CameraSelector.LENS_FACING_BACK)
+ .build()
- // Preview
- val cameraPreViewBuilder = Preview.Builder().setTargetAspectRatio(screenAspectRatio)
- .setTargetRotation(Surface.ROTATION_0).build()
+ val cameraPreViewBuilder = Preview.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
+ .setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageCapture
- imageCapture =
- ImageCapture.Builder().setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
- .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
- .build()
+ imageCapture = ImageCapture.Builder()
+ .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
+ .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageAnalysis
- imageAnalysis = ImageAnalysis.Builder().setTargetAspectRatio(screenAspectRatio)
+ imageAnalysis = ImageAnalysis.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(Surface.ROTATION_0)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
- // Must unbind the use-cases before rebinding them
cameraProvider.unbindAll()
try {
val camera = cameraProvider.bindToLifecycle(
this, cameraSelector, imageCapture, imageAnalysis, cameraPreViewBuilder
)
- // Attach the viewfinder's surface provider to preview use case
cameraPreViewBuilder.setSurfaceProvider(binding.cameraPreView.surfaceProvider)
camera.cameraInfo.cameraState.observe(this) {
- //开始预览之后才检测
if (it.type == CameraState.Type.OPEN) {
imageAnalysis.setAnalyzer(cameraExecutor, imageAnalyzer)
}
@@ -252,19 +129,6 @@
if (bitmap != null) {
val base64 = bitmap.encodeToBase64()
- //先识别场景
- if (!isDetectingScene) {
- isDetectingScene = true
- imageFileViewModel.getScene(context, base64)
- }
-
- //再识别隐患
- if (!isDetectingTarget && detectedScene.isNotBlank()) {
- isDetectingTarget = true
- imageFileViewModel.getRecognizeResult(
- context, base64, detectedScene, inspectionId
- )
- }
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
imageProxy.close()
@@ -289,39 +153,7 @@
}
override fun initEvent() {
- binding.stopButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "巡检任务创建中,请稍后再结束任务".show(this)
- return@setOnClickListener
- }
- navigatePageTo(inspectionId)
- }
- binding.tipsButton.setOnClickListener {
- if (targetSet.isEmpty()) {
- "未识别到任何目标,无法查看检查清单".show(this)
- return@setOnClickListener
- }
- //根据识别出来的结果显示清单
- navigatePageTo(
- arrayListOf(detectedScene, targetSet.toJson())
- )
- }
-
- binding.addButton.setOnClickListener {
- navigatePageTo(mainDicModels.toJson())
- }
-
- /**
- * 根据场景查看检查清单
- * */
- binding.listButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "请先选择场景或者识别出场景再试".show(this)
- return@setOnClickListener
- }
- navigatePageTo(arrayListOf(detectedScene, inspectionId))
- }
}
override fun initViewBinding(): ActivityStartCheckBinding {
@@ -340,51 +172,15 @@
}
override fun onRightClick() {
- BottomActionSheet.Builder()
- .setContext(context)
- .setActionItemTitle(arrayListOf("手动选择场景", "重置已选场景"))
- .setItemTextColor(R.color.themeColor.convertColor(context))
- .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
- override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
- val intent = Intent(context, SelectSceneActivity::class.java)
- selectSceneLauncher.launch(intent)
- }
- 1 -> {
- binding.titleView.setTitle("")
- isDetectingScene = false
- detectedScene = ""
- "场景重置成功".show(context)
- }
- }
- }
- }).build().show()
}
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(),
- ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- detectedScene = sceneName
- }
- })
-
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
return if (abs(ratio - RATIO_4_3_VALUE) <= abs(ratio - RATIO_16_9_VALUE)) {
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
-
- override fun onDestroy() {
- super.onDestroy()
- locationManager.stopLocation()
- }
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index 6eec624..f6f365b 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -8,7 +8,6 @@
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query
@@ -165,20 +164,6 @@
): String
/**
- * 获取场景
- */
- @Multipart
- @POST("/getScene")
- suspend fun getScene(@PartMap body: MutableMap): String
-
- /**
- * 获取画面识别结果
- */
- @Multipart
- @POST("/detect")
- suspend fun getRecognizeResult(@PartMap body: MutableMap): String
-
- /**
* 获取知识库分类列表
*/
@GET("/knowledge-class/list")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index c4edbee..eaa358a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -11,7 +11,6 @@
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
-import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
@@ -26,13 +25,6 @@
RetrofitFactory.createRetrofit(httpConfig, 20, true)
}
- private val aiApi by lazy {
- val httpConfig = SaveKeyValues.getValue(
- LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
- ) as String
- RetrofitFactory.createRetrofit(httpConfig, 20, false)
- }
-
private val gson by lazy { Gson() }
private val typeToken = object : TypeToken>>() {}.type
@@ -223,26 +215,6 @@
}
/**
- * 获取场景
- * */
- suspend fun getScene(base64: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- return aiApi.getScene(map)
- }
-
- /**
- * 获取画面识别结果
- * */
- suspend fun getRecognizeResult(base64: String, scene: String, inspectionId: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- map["scene"] = scene.toRequestBody()
- map["xunjian_id"] = inspectionId.toRequestBody()
- return aiApi.getRecognizeResult(map)
- }
-
- /**
* 获取知识库分类列表
*/
suspend fun getLibraryList(): String {
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index e4f25df..1e9fe47 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -7,6 +7,7 @@
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.callback.OnImageCompressListener
import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding
import com.casic.br.app.extensions.combineFilePath
import com.casic.br.app.extensions.compressImage
@@ -15,7 +16,6 @@
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.HiddenTroubleViewModel
import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.operationsite.test.callback.OnImageCompressListener
import com.pengxh.kt.lite.adapter.EditableImageAdapter
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets
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 940b35c..bbff411 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
@@ -1,7 +1,5 @@
package com.casic.br.app.view
-import android.app.Activity
-import android.content.Intent
import android.graphics.Bitmap
import android.graphics.ImageFormat
import android.os.Build
@@ -10,9 +8,6 @@
import android.util.DisplayMetrics
import android.util.Log
import android.view.Surface
-import android.view.View
-import androidx.activity.result.ActivityResultCallback
-import androidx.activity.result.contract.ActivityResultContracts
import androidx.camera.core.AspectRatio
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraState
@@ -21,30 +16,13 @@
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
-import androidx.lifecycle.ViewModelProvider
-import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.extensions.toBitmap
-import com.casic.br.app.model.DictionaryModel
-import com.casic.br.app.utils.LocaleConstant
-import com.casic.br.app.utils.LocationManager
-import com.casic.br.app.vm.ConfigViewModel
-import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.timestampToDate
-import com.pengxh.kt.lite.extensions.timestampToTime
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.util.concurrent.ExecutionException
@@ -64,7 +42,6 @@
}
private val kTag = "StartCheckActivity"
- private val context = this
private val executor = ThreadPoolExecutor(
16,
16,
@@ -73,113 +50,14 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
- private val locationManager by lazy { LocationManager(this) }
- private val targetSet by lazy { HashSet() }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
- private lateinit var inspectionViewModel: InspectionViewModel
- private lateinit var configViewModel: ConfigViewModel
- private lateinit var imageFileViewModel: ImageFileViewModel
- private var detectedScene = ""
- private var inspectionId = ""
- private var inspectionAddress = ""
- private var isDetectingScene = false //是否正在识别场景
- private var isDetectingTarget = false //是否正在识别目标
- private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
- locationManager.getCurrentLocation(false, object : LocationManager.OnGetLocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- location?.apply {
- inspectionAddress = address
- }
- }
- })
-
- inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
- val inspectionUser = SaveKeyValues.getValue(
- LocaleConstant.ACCOUNT, ""
- ) as String
-
- val currentTimeMillis = System.currentTimeMillis()
- val inspectionDate = currentTimeMillis.timestampToDate()
- val startTime = currentTimeMillis.timestampToTime()
- inspectionViewModel.startInspection(
- context, inspectionUser, inspectionAddress, inspectionDate, startTime
- )
- inspectionViewModel.addResultModel.observe(this) {
- if (it.code == 200) {
- inspectionId = it.data
- }
- }
-
- configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
- configViewModel.getDictionaryByCode(context, "pitfallBigType")
- configViewModel.dictionary.observe(this) {
- if (it.code == 200) {
- mainDicModels = it.data
- }
- }
-
- imageFileViewModel = ViewModelProvider(this)[ImageFileViewModel::class.java]
- imageFileViewModel.sceneResult.observe(this) {
- if (it == "没有检查到任何场景") {
- isDetectingScene = false
- } else {
- AlertControlDialog.Builder().setContext(this).setTitle("提示")
- .setMessage("识别到目标场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- binding.titleView.setTitle(it)
- detectedScene = it
- }
-
- override fun onCancelClick() {
-
- }
- }).build().show()
- }
- }
-
- imageFileViewModel.recognizeResult.observe(this) {
- /**
- * {
- * "scene": "配电箱",
- * "inferneceStart": "2024-04-26 16:16:03.653",
- * "code": 200,
- * "inferneceEnd": "2024-04-26 16:16:03.774",
- * "inferneceInterval": "0:00:00.121",
- * "result": [
- *
- * ]
- * }
- * */
- if (it.code == 200) {
- if (it.result.isEmpty()) {
- binding.detectView.clearTag()
- targetSet.clear()
- binding.tipsTagView.visibility = View.GONE
- } else {
- binding.detectView.updateTargetPosition(it.result)
- it.result.forEach { result ->
- targetSet.add(result.label)
- }
- //显示角标
- binding.tipsTagView.visibility = View.VISIBLE
- binding.tipsTagView.text = "${targetSet.size}"
- }
- }
- isDetectingTarget = false
- }
-
- // Initialize our background executor
cameraExecutor = Executors.newSingleThreadExecutor()
cameraProviderFuture = ProcessCameraProvider.getInstance(this)
- // 检查 CameraProvider 可用性
cameraProviderFuture.addListener({
try {
bindPreview(cameraProviderFuture.get())
@@ -201,37 +79,36 @@
aspectRatio(outMetrics.widthPixels, outMetrics.heightPixels)
}
- // CameraSelector, 选择后置摄像头
- val cameraSelector =
- CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
+ val cameraSelector = CameraSelector.Builder()
+ .requireLensFacing(CameraSelector.LENS_FACING_BACK)
+ .build()
- // Preview
- val cameraPreViewBuilder = Preview.Builder().setTargetAspectRatio(screenAspectRatio)
- .setTargetRotation(Surface.ROTATION_0).build()
+ val cameraPreViewBuilder = Preview.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
+ .setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageCapture
- imageCapture =
- ImageCapture.Builder().setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
- .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
- .build()
+ imageCapture = ImageCapture.Builder()
+ .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
+ .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageAnalysis
- imageAnalysis = ImageAnalysis.Builder().setTargetAspectRatio(screenAspectRatio)
+ imageAnalysis = ImageAnalysis.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(Surface.ROTATION_0)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
- // Must unbind the use-cases before rebinding them
cameraProvider.unbindAll()
try {
val camera = cameraProvider.bindToLifecycle(
this, cameraSelector, imageCapture, imageAnalysis, cameraPreViewBuilder
)
- // Attach the viewfinder's surface provider to preview use case
cameraPreViewBuilder.setSurfaceProvider(binding.cameraPreView.surfaceProvider)
camera.cameraInfo.cameraState.observe(this) {
- //开始预览之后才检测
if (it.type == CameraState.Type.OPEN) {
imageAnalysis.setAnalyzer(cameraExecutor, imageAnalyzer)
}
@@ -252,19 +129,6 @@
if (bitmap != null) {
val base64 = bitmap.encodeToBase64()
- //先识别场景
- if (!isDetectingScene) {
- isDetectingScene = true
- imageFileViewModel.getScene(context, base64)
- }
-
- //再识别隐患
- if (!isDetectingTarget && detectedScene.isNotBlank()) {
- isDetectingTarget = true
- imageFileViewModel.getRecognizeResult(
- context, base64, detectedScene, inspectionId
- )
- }
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
imageProxy.close()
@@ -289,39 +153,7 @@
}
override fun initEvent() {
- binding.stopButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "巡检任务创建中,请稍后再结束任务".show(this)
- return@setOnClickListener
- }
- navigatePageTo(inspectionId)
- }
- binding.tipsButton.setOnClickListener {
- if (targetSet.isEmpty()) {
- "未识别到任何目标,无法查看检查清单".show(this)
- return@setOnClickListener
- }
- //根据识别出来的结果显示清单
- navigatePageTo(
- arrayListOf(detectedScene, targetSet.toJson())
- )
- }
-
- binding.addButton.setOnClickListener {
- navigatePageTo(mainDicModels.toJson())
- }
-
- /**
- * 根据场景查看检查清单
- * */
- binding.listButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "请先选择场景或者识别出场景再试".show(this)
- return@setOnClickListener
- }
- navigatePageTo(arrayListOf(detectedScene, inspectionId))
- }
}
override fun initViewBinding(): ActivityStartCheckBinding {
@@ -340,51 +172,15 @@
}
override fun onRightClick() {
- BottomActionSheet.Builder()
- .setContext(context)
- .setActionItemTitle(arrayListOf("手动选择场景", "重置已选场景"))
- .setItemTextColor(R.color.themeColor.convertColor(context))
- .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
- override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
- val intent = Intent(context, SelectSceneActivity::class.java)
- selectSceneLauncher.launch(intent)
- }
- 1 -> {
- binding.titleView.setTitle("")
- isDetectingScene = false
- detectedScene = ""
- "场景重置成功".show(context)
- }
- }
- }
- }).build().show()
}
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(),
- ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- detectedScene = sceneName
- }
- })
-
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
return if (abs(ratio - RATIO_4_3_VALUE) <= abs(ratio - RATIO_16_9_VALUE)) {
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
-
- override fun onDestroy() {
- super.onDestroy()
- locationManager.stopLocation()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index 394bcdf..c76af42 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -1,76 +1,21 @@
package com.casic.br.app.vm
-import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.model.ActionResultModel
-import com.casic.br.app.model.RecognizeResultModel
import com.casic.br.app.retrofit.RetrofitServiceManager
import com.google.gson.Gson
-import com.google.gson.JsonParser
import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
-import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.LoadState
import java.io.File
class ImageFileViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val sceneResult = MutableLiveData()
- val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getScene(context: Context, base64: String) = launch({
- val response = RetrofitServiceManager.getScene(base64)
- when (response.getResponseCode()) {
- 200 -> {
- /**
- * {
- * "code": 200,
- * "scene": "配电箱"
- * }
- * */
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- sceneResult.value = jsonObject.get("scene").asString
- }
-
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
-
- fun getRecognizeResult(
- context: Context, base64: String, scene: String, inspectionId: String
- ) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene, inspectionId)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
-
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
- }
- }
- }, {
- loadState.value = LoadState.Fail
- })
-
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index 6eec624..f6f365b 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -8,7 +8,6 @@
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query
@@ -165,20 +164,6 @@
): String
/**
- * 获取场景
- */
- @Multipart
- @POST("/getScene")
- suspend fun getScene(@PartMap body: MutableMap): String
-
- /**
- * 获取画面识别结果
- */
- @Multipart
- @POST("/detect")
- suspend fun getRecognizeResult(@PartMap body: MutableMap): String
-
- /**
* 获取知识库分类列表
*/
@GET("/knowledge-class/list")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index c4edbee..eaa358a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -11,7 +11,6 @@
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
-import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
@@ -26,13 +25,6 @@
RetrofitFactory.createRetrofit(httpConfig, 20, true)
}
- private val aiApi by lazy {
- val httpConfig = SaveKeyValues.getValue(
- LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
- ) as String
- RetrofitFactory.createRetrofit(httpConfig, 20, false)
- }
-
private val gson by lazy { Gson() }
private val typeToken = object : TypeToken>>() {}.type
@@ -223,26 +215,6 @@
}
/**
- * 获取场景
- * */
- suspend fun getScene(base64: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- return aiApi.getScene(map)
- }
-
- /**
- * 获取画面识别结果
- * */
- suspend fun getRecognizeResult(base64: String, scene: String, inspectionId: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- map["scene"] = scene.toRequestBody()
- map["xunjian_id"] = inspectionId.toRequestBody()
- return aiApi.getRecognizeResult(map)
- }
-
- /**
* 获取知识库分类列表
*/
suspend fun getLibraryList(): String {
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index e4f25df..1e9fe47 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -7,6 +7,7 @@
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.callback.OnImageCompressListener
import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding
import com.casic.br.app.extensions.combineFilePath
import com.casic.br.app.extensions.compressImage
@@ -15,7 +16,6 @@
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.HiddenTroubleViewModel
import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.operationsite.test.callback.OnImageCompressListener
import com.pengxh.kt.lite.adapter.EditableImageAdapter
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets
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 940b35c..bbff411 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
@@ -1,7 +1,5 @@
package com.casic.br.app.view
-import android.app.Activity
-import android.content.Intent
import android.graphics.Bitmap
import android.graphics.ImageFormat
import android.os.Build
@@ -10,9 +8,6 @@
import android.util.DisplayMetrics
import android.util.Log
import android.view.Surface
-import android.view.View
-import androidx.activity.result.ActivityResultCallback
-import androidx.activity.result.contract.ActivityResultContracts
import androidx.camera.core.AspectRatio
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraState
@@ -21,30 +16,13 @@
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
-import androidx.lifecycle.ViewModelProvider
-import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.extensions.toBitmap
-import com.casic.br.app.model.DictionaryModel
-import com.casic.br.app.utils.LocaleConstant
-import com.casic.br.app.utils.LocationManager
-import com.casic.br.app.vm.ConfigViewModel
-import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.timestampToDate
-import com.pengxh.kt.lite.extensions.timestampToTime
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.util.concurrent.ExecutionException
@@ -64,7 +42,6 @@
}
private val kTag = "StartCheckActivity"
- private val context = this
private val executor = ThreadPoolExecutor(
16,
16,
@@ -73,113 +50,14 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
- private val locationManager by lazy { LocationManager(this) }
- private val targetSet by lazy { HashSet() }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
- private lateinit var inspectionViewModel: InspectionViewModel
- private lateinit var configViewModel: ConfigViewModel
- private lateinit var imageFileViewModel: ImageFileViewModel
- private var detectedScene = ""
- private var inspectionId = ""
- private var inspectionAddress = ""
- private var isDetectingScene = false //是否正在识别场景
- private var isDetectingTarget = false //是否正在识别目标
- private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
- locationManager.getCurrentLocation(false, object : LocationManager.OnGetLocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- location?.apply {
- inspectionAddress = address
- }
- }
- })
-
- inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
- val inspectionUser = SaveKeyValues.getValue(
- LocaleConstant.ACCOUNT, ""
- ) as String
-
- val currentTimeMillis = System.currentTimeMillis()
- val inspectionDate = currentTimeMillis.timestampToDate()
- val startTime = currentTimeMillis.timestampToTime()
- inspectionViewModel.startInspection(
- context, inspectionUser, inspectionAddress, inspectionDate, startTime
- )
- inspectionViewModel.addResultModel.observe(this) {
- if (it.code == 200) {
- inspectionId = it.data
- }
- }
-
- configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
- configViewModel.getDictionaryByCode(context, "pitfallBigType")
- configViewModel.dictionary.observe(this) {
- if (it.code == 200) {
- mainDicModels = it.data
- }
- }
-
- imageFileViewModel = ViewModelProvider(this)[ImageFileViewModel::class.java]
- imageFileViewModel.sceneResult.observe(this) {
- if (it == "没有检查到任何场景") {
- isDetectingScene = false
- } else {
- AlertControlDialog.Builder().setContext(this).setTitle("提示")
- .setMessage("识别到目标场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- binding.titleView.setTitle(it)
- detectedScene = it
- }
-
- override fun onCancelClick() {
-
- }
- }).build().show()
- }
- }
-
- imageFileViewModel.recognizeResult.observe(this) {
- /**
- * {
- * "scene": "配电箱",
- * "inferneceStart": "2024-04-26 16:16:03.653",
- * "code": 200,
- * "inferneceEnd": "2024-04-26 16:16:03.774",
- * "inferneceInterval": "0:00:00.121",
- * "result": [
- *
- * ]
- * }
- * */
- if (it.code == 200) {
- if (it.result.isEmpty()) {
- binding.detectView.clearTag()
- targetSet.clear()
- binding.tipsTagView.visibility = View.GONE
- } else {
- binding.detectView.updateTargetPosition(it.result)
- it.result.forEach { result ->
- targetSet.add(result.label)
- }
- //显示角标
- binding.tipsTagView.visibility = View.VISIBLE
- binding.tipsTagView.text = "${targetSet.size}"
- }
- }
- isDetectingTarget = false
- }
-
- // Initialize our background executor
cameraExecutor = Executors.newSingleThreadExecutor()
cameraProviderFuture = ProcessCameraProvider.getInstance(this)
- // 检查 CameraProvider 可用性
cameraProviderFuture.addListener({
try {
bindPreview(cameraProviderFuture.get())
@@ -201,37 +79,36 @@
aspectRatio(outMetrics.widthPixels, outMetrics.heightPixels)
}
- // CameraSelector, 选择后置摄像头
- val cameraSelector =
- CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
+ val cameraSelector = CameraSelector.Builder()
+ .requireLensFacing(CameraSelector.LENS_FACING_BACK)
+ .build()
- // Preview
- val cameraPreViewBuilder = Preview.Builder().setTargetAspectRatio(screenAspectRatio)
- .setTargetRotation(Surface.ROTATION_0).build()
+ val cameraPreViewBuilder = Preview.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
+ .setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageCapture
- imageCapture =
- ImageCapture.Builder().setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
- .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
- .build()
+ imageCapture = ImageCapture.Builder()
+ .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
+ .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageAnalysis
- imageAnalysis = ImageAnalysis.Builder().setTargetAspectRatio(screenAspectRatio)
+ imageAnalysis = ImageAnalysis.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(Surface.ROTATION_0)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
- // Must unbind the use-cases before rebinding them
cameraProvider.unbindAll()
try {
val camera = cameraProvider.bindToLifecycle(
this, cameraSelector, imageCapture, imageAnalysis, cameraPreViewBuilder
)
- // Attach the viewfinder's surface provider to preview use case
cameraPreViewBuilder.setSurfaceProvider(binding.cameraPreView.surfaceProvider)
camera.cameraInfo.cameraState.observe(this) {
- //开始预览之后才检测
if (it.type == CameraState.Type.OPEN) {
imageAnalysis.setAnalyzer(cameraExecutor, imageAnalyzer)
}
@@ -252,19 +129,6 @@
if (bitmap != null) {
val base64 = bitmap.encodeToBase64()
- //先识别场景
- if (!isDetectingScene) {
- isDetectingScene = true
- imageFileViewModel.getScene(context, base64)
- }
-
- //再识别隐患
- if (!isDetectingTarget && detectedScene.isNotBlank()) {
- isDetectingTarget = true
- imageFileViewModel.getRecognizeResult(
- context, base64, detectedScene, inspectionId
- )
- }
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
imageProxy.close()
@@ -289,39 +153,7 @@
}
override fun initEvent() {
- binding.stopButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "巡检任务创建中,请稍后再结束任务".show(this)
- return@setOnClickListener
- }
- navigatePageTo(inspectionId)
- }
- binding.tipsButton.setOnClickListener {
- if (targetSet.isEmpty()) {
- "未识别到任何目标,无法查看检查清单".show(this)
- return@setOnClickListener
- }
- //根据识别出来的结果显示清单
- navigatePageTo(
- arrayListOf(detectedScene, targetSet.toJson())
- )
- }
-
- binding.addButton.setOnClickListener {
- navigatePageTo(mainDicModels.toJson())
- }
-
- /**
- * 根据场景查看检查清单
- * */
- binding.listButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "请先选择场景或者识别出场景再试".show(this)
- return@setOnClickListener
- }
- navigatePageTo(arrayListOf(detectedScene, inspectionId))
- }
}
override fun initViewBinding(): ActivityStartCheckBinding {
@@ -340,51 +172,15 @@
}
override fun onRightClick() {
- BottomActionSheet.Builder()
- .setContext(context)
- .setActionItemTitle(arrayListOf("手动选择场景", "重置已选场景"))
- .setItemTextColor(R.color.themeColor.convertColor(context))
- .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
- override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
- val intent = Intent(context, SelectSceneActivity::class.java)
- selectSceneLauncher.launch(intent)
- }
- 1 -> {
- binding.titleView.setTitle("")
- isDetectingScene = false
- detectedScene = ""
- "场景重置成功".show(context)
- }
- }
- }
- }).build().show()
}
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(),
- ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- detectedScene = sceneName
- }
- })
-
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
return if (abs(ratio - RATIO_4_3_VALUE) <= abs(ratio - RATIO_16_9_VALUE)) {
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
-
- override fun onDestroy() {
- super.onDestroy()
- locationManager.stopLocation()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index 394bcdf..c76af42 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -1,76 +1,21 @@
package com.casic.br.app.vm
-import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.model.ActionResultModel
-import com.casic.br.app.model.RecognizeResultModel
import com.casic.br.app.retrofit.RetrofitServiceManager
import com.google.gson.Gson
-import com.google.gson.JsonParser
import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
-import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.LoadState
import java.io.File
class ImageFileViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val sceneResult = MutableLiveData()
- val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getScene(context: Context, base64: String) = launch({
- val response = RetrofitServiceManager.getScene(base64)
- when (response.getResponseCode()) {
- 200 -> {
- /**
- * {
- * "code": 200,
- * "scene": "配电箱"
- * }
- * */
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- sceneResult.value = jsonObject.get("scene").asString
- }
-
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
-
- fun getRecognizeResult(
- context: Context, base64: String, scene: String, inspectionId: String
- ) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene, inspectionId)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
-
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
- }
- }
- }, {
- loadState.value = LoadState.Fail
- })
-
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
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
deleted file mode 100644
index 0ce98be..0000000
--- a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt
+++ /dev/null
@@ -1,79 +0,0 @@
-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.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 borderPaint by lazy { Paint() }
- private val rect by lazy { Rect() }
- private var viewWidth = 0
- private var viewHeight = 0
- private var resultModels: MutableList = ArrayList()
-
- init {
- textPaint.color = Color.RED
- textPaint.isAntiAlias = true
- textPaint.textAlign = Paint.Align.CENTER
- textPaint.textSize = 14f.sp2px(context)
-
- 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(resultModels: MutableList) {
- this.resultModels = resultModels
- invalidate()
- }
-
- fun clearTag() {
- this.resultModels.clear()
- invalidate()
- }
-
- override fun onDraw(canvas: Canvas) {
- super.onDraw(canvas)
- 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
- )
-
- //画框
- 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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index 6eec624..f6f365b 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -8,7 +8,6 @@
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query
@@ -165,20 +164,6 @@
): String
/**
- * 获取场景
- */
- @Multipart
- @POST("/getScene")
- suspend fun getScene(@PartMap body: MutableMap): String
-
- /**
- * 获取画面识别结果
- */
- @Multipart
- @POST("/detect")
- suspend fun getRecognizeResult(@PartMap body: MutableMap): String
-
- /**
* 获取知识库分类列表
*/
@GET("/knowledge-class/list")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index c4edbee..eaa358a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -11,7 +11,6 @@
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
-import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
@@ -26,13 +25,6 @@
RetrofitFactory.createRetrofit(httpConfig, 20, true)
}
- private val aiApi by lazy {
- val httpConfig = SaveKeyValues.getValue(
- LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
- ) as String
- RetrofitFactory.createRetrofit(httpConfig, 20, false)
- }
-
private val gson by lazy { Gson() }
private val typeToken = object : TypeToken>>() {}.type
@@ -223,26 +215,6 @@
}
/**
- * 获取场景
- * */
- suspend fun getScene(base64: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- return aiApi.getScene(map)
- }
-
- /**
- * 获取画面识别结果
- * */
- suspend fun getRecognizeResult(base64: String, scene: String, inspectionId: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- map["scene"] = scene.toRequestBody()
- map["xunjian_id"] = inspectionId.toRequestBody()
- return aiApi.getRecognizeResult(map)
- }
-
- /**
* 获取知识库分类列表
*/
suspend fun getLibraryList(): String {
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index e4f25df..1e9fe47 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -7,6 +7,7 @@
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.callback.OnImageCompressListener
import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding
import com.casic.br.app.extensions.combineFilePath
import com.casic.br.app.extensions.compressImage
@@ -15,7 +16,6 @@
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.HiddenTroubleViewModel
import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.operationsite.test.callback.OnImageCompressListener
import com.pengxh.kt.lite.adapter.EditableImageAdapter
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets
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 940b35c..bbff411 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
@@ -1,7 +1,5 @@
package com.casic.br.app.view
-import android.app.Activity
-import android.content.Intent
import android.graphics.Bitmap
import android.graphics.ImageFormat
import android.os.Build
@@ -10,9 +8,6 @@
import android.util.DisplayMetrics
import android.util.Log
import android.view.Surface
-import android.view.View
-import androidx.activity.result.ActivityResultCallback
-import androidx.activity.result.contract.ActivityResultContracts
import androidx.camera.core.AspectRatio
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraState
@@ -21,30 +16,13 @@
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
-import androidx.lifecycle.ViewModelProvider
-import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.extensions.toBitmap
-import com.casic.br.app.model.DictionaryModel
-import com.casic.br.app.utils.LocaleConstant
-import com.casic.br.app.utils.LocationManager
-import com.casic.br.app.vm.ConfigViewModel
-import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.timestampToDate
-import com.pengxh.kt.lite.extensions.timestampToTime
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.util.concurrent.ExecutionException
@@ -64,7 +42,6 @@
}
private val kTag = "StartCheckActivity"
- private val context = this
private val executor = ThreadPoolExecutor(
16,
16,
@@ -73,113 +50,14 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
- private val locationManager by lazy { LocationManager(this) }
- private val targetSet by lazy { HashSet() }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
- private lateinit var inspectionViewModel: InspectionViewModel
- private lateinit var configViewModel: ConfigViewModel
- private lateinit var imageFileViewModel: ImageFileViewModel
- private var detectedScene = ""
- private var inspectionId = ""
- private var inspectionAddress = ""
- private var isDetectingScene = false //是否正在识别场景
- private var isDetectingTarget = false //是否正在识别目标
- private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
- locationManager.getCurrentLocation(false, object : LocationManager.OnGetLocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- location?.apply {
- inspectionAddress = address
- }
- }
- })
-
- inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
- val inspectionUser = SaveKeyValues.getValue(
- LocaleConstant.ACCOUNT, ""
- ) as String
-
- val currentTimeMillis = System.currentTimeMillis()
- val inspectionDate = currentTimeMillis.timestampToDate()
- val startTime = currentTimeMillis.timestampToTime()
- inspectionViewModel.startInspection(
- context, inspectionUser, inspectionAddress, inspectionDate, startTime
- )
- inspectionViewModel.addResultModel.observe(this) {
- if (it.code == 200) {
- inspectionId = it.data
- }
- }
-
- configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
- configViewModel.getDictionaryByCode(context, "pitfallBigType")
- configViewModel.dictionary.observe(this) {
- if (it.code == 200) {
- mainDicModels = it.data
- }
- }
-
- imageFileViewModel = ViewModelProvider(this)[ImageFileViewModel::class.java]
- imageFileViewModel.sceneResult.observe(this) {
- if (it == "没有检查到任何场景") {
- isDetectingScene = false
- } else {
- AlertControlDialog.Builder().setContext(this).setTitle("提示")
- .setMessage("识别到目标场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- binding.titleView.setTitle(it)
- detectedScene = it
- }
-
- override fun onCancelClick() {
-
- }
- }).build().show()
- }
- }
-
- imageFileViewModel.recognizeResult.observe(this) {
- /**
- * {
- * "scene": "配电箱",
- * "inferneceStart": "2024-04-26 16:16:03.653",
- * "code": 200,
- * "inferneceEnd": "2024-04-26 16:16:03.774",
- * "inferneceInterval": "0:00:00.121",
- * "result": [
- *
- * ]
- * }
- * */
- if (it.code == 200) {
- if (it.result.isEmpty()) {
- binding.detectView.clearTag()
- targetSet.clear()
- binding.tipsTagView.visibility = View.GONE
- } else {
- binding.detectView.updateTargetPosition(it.result)
- it.result.forEach { result ->
- targetSet.add(result.label)
- }
- //显示角标
- binding.tipsTagView.visibility = View.VISIBLE
- binding.tipsTagView.text = "${targetSet.size}"
- }
- }
- isDetectingTarget = false
- }
-
- // Initialize our background executor
cameraExecutor = Executors.newSingleThreadExecutor()
cameraProviderFuture = ProcessCameraProvider.getInstance(this)
- // 检查 CameraProvider 可用性
cameraProviderFuture.addListener({
try {
bindPreview(cameraProviderFuture.get())
@@ -201,37 +79,36 @@
aspectRatio(outMetrics.widthPixels, outMetrics.heightPixels)
}
- // CameraSelector, 选择后置摄像头
- val cameraSelector =
- CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
+ val cameraSelector = CameraSelector.Builder()
+ .requireLensFacing(CameraSelector.LENS_FACING_BACK)
+ .build()
- // Preview
- val cameraPreViewBuilder = Preview.Builder().setTargetAspectRatio(screenAspectRatio)
- .setTargetRotation(Surface.ROTATION_0).build()
+ val cameraPreViewBuilder = Preview.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
+ .setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageCapture
- imageCapture =
- ImageCapture.Builder().setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
- .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
- .build()
+ imageCapture = ImageCapture.Builder()
+ .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
+ .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageAnalysis
- imageAnalysis = ImageAnalysis.Builder().setTargetAspectRatio(screenAspectRatio)
+ imageAnalysis = ImageAnalysis.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(Surface.ROTATION_0)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
- // Must unbind the use-cases before rebinding them
cameraProvider.unbindAll()
try {
val camera = cameraProvider.bindToLifecycle(
this, cameraSelector, imageCapture, imageAnalysis, cameraPreViewBuilder
)
- // Attach the viewfinder's surface provider to preview use case
cameraPreViewBuilder.setSurfaceProvider(binding.cameraPreView.surfaceProvider)
camera.cameraInfo.cameraState.observe(this) {
- //开始预览之后才检测
if (it.type == CameraState.Type.OPEN) {
imageAnalysis.setAnalyzer(cameraExecutor, imageAnalyzer)
}
@@ -252,19 +129,6 @@
if (bitmap != null) {
val base64 = bitmap.encodeToBase64()
- //先识别场景
- if (!isDetectingScene) {
- isDetectingScene = true
- imageFileViewModel.getScene(context, base64)
- }
-
- //再识别隐患
- if (!isDetectingTarget && detectedScene.isNotBlank()) {
- isDetectingTarget = true
- imageFileViewModel.getRecognizeResult(
- context, base64, detectedScene, inspectionId
- )
- }
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
imageProxy.close()
@@ -289,39 +153,7 @@
}
override fun initEvent() {
- binding.stopButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "巡检任务创建中,请稍后再结束任务".show(this)
- return@setOnClickListener
- }
- navigatePageTo(inspectionId)
- }
- binding.tipsButton.setOnClickListener {
- if (targetSet.isEmpty()) {
- "未识别到任何目标,无法查看检查清单".show(this)
- return@setOnClickListener
- }
- //根据识别出来的结果显示清单
- navigatePageTo(
- arrayListOf(detectedScene, targetSet.toJson())
- )
- }
-
- binding.addButton.setOnClickListener {
- navigatePageTo(mainDicModels.toJson())
- }
-
- /**
- * 根据场景查看检查清单
- * */
- binding.listButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "请先选择场景或者识别出场景再试".show(this)
- return@setOnClickListener
- }
- navigatePageTo(arrayListOf(detectedScene, inspectionId))
- }
}
override fun initViewBinding(): ActivityStartCheckBinding {
@@ -340,51 +172,15 @@
}
override fun onRightClick() {
- BottomActionSheet.Builder()
- .setContext(context)
- .setActionItemTitle(arrayListOf("手动选择场景", "重置已选场景"))
- .setItemTextColor(R.color.themeColor.convertColor(context))
- .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
- override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
- val intent = Intent(context, SelectSceneActivity::class.java)
- selectSceneLauncher.launch(intent)
- }
- 1 -> {
- binding.titleView.setTitle("")
- isDetectingScene = false
- detectedScene = ""
- "场景重置成功".show(context)
- }
- }
- }
- }).build().show()
}
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(),
- ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- detectedScene = sceneName
- }
- })
-
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
return if (abs(ratio - RATIO_4_3_VALUE) <= abs(ratio - RATIO_16_9_VALUE)) {
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
-
- override fun onDestroy() {
- super.onDestroy()
- locationManager.stopLocation()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index 394bcdf..c76af42 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -1,76 +1,21 @@
package com.casic.br.app.vm
-import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.model.ActionResultModel
-import com.casic.br.app.model.RecognizeResultModel
import com.casic.br.app.retrofit.RetrofitServiceManager
import com.google.gson.Gson
-import com.google.gson.JsonParser
import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
-import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.LoadState
import java.io.File
class ImageFileViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val sceneResult = MutableLiveData()
- val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getScene(context: Context, base64: String) = launch({
- val response = RetrofitServiceManager.getScene(base64)
- when (response.getResponseCode()) {
- 200 -> {
- /**
- * {
- * "code": 200,
- * "scene": "配电箱"
- * }
- * */
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- sceneResult.value = jsonObject.get("scene").asString
- }
-
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
-
- fun getRecognizeResult(
- context: Context, base64: String, scene: String, inspectionId: String
- ) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene, inspectionId)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
-
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
- }
- }
- }, {
- loadState.value = LoadState.Fail
- })
-
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
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
deleted file mode 100644
index 0ce98be..0000000
--- a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt
+++ /dev/null
@@ -1,79 +0,0 @@
-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.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 borderPaint by lazy { Paint() }
- private val rect by lazy { Rect() }
- private var viewWidth = 0
- private var viewHeight = 0
- private var resultModels: MutableList = ArrayList()
-
- init {
- textPaint.color = Color.RED
- textPaint.isAntiAlias = true
- textPaint.textAlign = Paint.Align.CENTER
- textPaint.textSize = 14f.sp2px(context)
-
- 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(resultModels: MutableList) {
- this.resultModels = resultModels
- invalidate()
- }
-
- fun clearTag() {
- this.resultModels.clear()
- invalidate()
- }
-
- override fun onDraw(canvas: Canvas) {
- super.onDraw(canvas)
- 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
- )
-
- //画框
- 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/DetectResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt
index ac54f29..30b82a4 100644
--- a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt
+++ b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt
@@ -5,9 +5,9 @@
import android.graphics.Bitmap
import android.os.Bundle
import android.util.Log
+import com.casic.br.app.callback.OnImageCompressListener
import com.casic.br.app.databinding.DialogDetectResultBinding
import com.casic.br.app.extensions.compressImage
-import com.casic.br.operationsite.test.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.binding
import com.pengxh.kt.lite.extensions.createImageFileDir
import com.pengxh.kt.lite.extensions.initDialogLayoutParams
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0c514bc..d02d2cb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -59,7 +59,6 @@
-
result;
-
- public String getScene() {
- return scene;
- }
-
- public void setScene(String scene) {
- this.scene = scene;
- }
-
- public String getInferneceStart() {
- return inferneceStart;
- }
-
- public void setInferneceStart(String inferneceStart) {
- this.inferneceStart = inferneceStart;
- }
-
- public int getCode() {
- return code;
- }
-
- public void setCode(int code) {
- this.code = code;
- }
-
- public String getInferneceEnd() {
- return inferneceEnd;
- }
-
- public void setInferneceEnd(String inferneceEnd) {
- this.inferneceEnd = inferneceEnd;
- }
-
- public String getInferneceInterval() {
- return inferneceInterval;
- }
-
- public void setInferneceInterval(String inferneceInterval) {
- this.inferneceInterval = inferneceInterval;
- }
-
- public List getResult() {
- return result;
- }
-
- public void setResult(List result) {
- this.result = result;
- }
-
- public static class ResultModel {
- private String label;
- private double conf;
- private List box;
-
- public String getLabel() {
- return label;
- }
-
- public void setLabel(String label) {
- this.label = label;
- }
-
- public double getConf() {
- return conf;
- }
-
- public void setConf(double conf) {
- this.conf = conf;
- }
-
- public List getBox() {
- return box;
- }
-
- public void setBox(List box) {
- this.box = box;
- }
- }
-}
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
index 6eec624..f6f365b 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitService.kt
@@ -8,7 +8,6 @@
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
-import retrofit2.http.PartMap
import retrofit2.http.Path
import retrofit2.http.Query
@@ -165,20 +164,6 @@
): String
/**
- * 获取场景
- */
- @Multipart
- @POST("/getScene")
- suspend fun getScene(@PartMap body: MutableMap): String
-
- /**
- * 获取画面识别结果
- */
- @Multipart
- @POST("/detect")
- suspend fun getRecognizeResult(@PartMap body: MutableMap): String
-
- /**
* 获取知识库分类列表
*/
@GET("/knowledge-class/list")
diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
index c4edbee..eaa358a 100644
--- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
+++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt
@@ -11,7 +11,6 @@
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
-import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.asRequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.io.File
@@ -26,13 +25,6 @@
RetrofitFactory.createRetrofit(httpConfig, 20, true)
}
- private val aiApi by lazy {
- val httpConfig = SaveKeyValues.getValue(
- LocaleConstant.AI_SERVER_CONFIG, LocaleConstant.AI_BASE_URL
- ) as String
- RetrofitFactory.createRetrofit(httpConfig, 20, false)
- }
-
private val gson by lazy { Gson() }
private val typeToken = object : TypeToken>>() {}.type
@@ -223,26 +215,6 @@
}
/**
- * 获取场景
- * */
- suspend fun getScene(base64: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- return aiApi.getScene(map)
- }
-
- /**
- * 获取画面识别结果
- * */
- suspend fun getRecognizeResult(base64: String, scene: String, inspectionId: String): String {
- val map: MutableMap = mutableMapOf()
- map["img"] = "data:image/png;base64,${base64}".toRequestBody()
- map["scene"] = scene.toRequestBody()
- map["xunjian_id"] = inspectionId.toRequestBody()
- return aiApi.getRecognizeResult(map)
- }
-
- /**
* 获取知识库分类列表
*/
suspend fun getLibraryList(): String {
diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
index e4f25df..1e9fe47 100644
--- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
+++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt
@@ -7,6 +7,7 @@
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.lifecycle.ViewModelProvider
+import com.casic.br.app.callback.OnImageCompressListener
import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding
import com.casic.br.app.extensions.combineFilePath
import com.casic.br.app.extensions.compressImage
@@ -15,7 +16,6 @@
import com.casic.br.app.vm.ConfigViewModel
import com.casic.br.app.vm.HiddenTroubleViewModel
import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.operationsite.test.callback.OnImageCompressListener
import com.pengxh.kt.lite.adapter.EditableImageAdapter
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets
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 940b35c..bbff411 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
@@ -1,7 +1,5 @@
package com.casic.br.app.view
-import android.app.Activity
-import android.content.Intent
import android.graphics.Bitmap
import android.graphics.ImageFormat
import android.os.Build
@@ -10,9 +8,6 @@
import android.util.DisplayMetrics
import android.util.Log
import android.view.Surface
-import android.view.View
-import androidx.activity.result.ActivityResultCallback
-import androidx.activity.result.contract.ActivityResultContracts
import androidx.camera.core.AspectRatio
import androidx.camera.core.CameraSelector
import androidx.camera.core.CameraState
@@ -21,30 +16,13 @@
import androidx.camera.core.Preview
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
-import androidx.lifecycle.ViewModelProvider
-import com.amap.api.location.AMapLocation
import com.casic.br.app.R
import com.casic.br.app.databinding.ActivityStartCheckBinding
import com.casic.br.app.extensions.initImmersionBar
import com.casic.br.app.extensions.toBitmap
-import com.casic.br.app.model.DictionaryModel
-import com.casic.br.app.utils.LocaleConstant
-import com.casic.br.app.utils.LocationManager
-import com.casic.br.app.vm.ConfigViewModel
-import com.casic.br.app.vm.ImageFileViewModel
-import com.casic.br.app.vm.InspectionViewModel
import com.google.common.util.concurrent.ListenableFuture
import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.convertColor
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.timestampToDate
-import com.pengxh.kt.lite.extensions.timestampToTime
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.TitleBarView
-import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
-import com.pengxh.kt.lite.widget.dialog.BottomActionSheet
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.util.concurrent.ExecutionException
@@ -64,7 +42,6 @@
}
private val kTag = "StartCheckActivity"
- private val context = this
private val executor = ThreadPoolExecutor(
16,
16,
@@ -73,113 +50,14 @@
LinkedBlockingQueue(1024),
ThreadPoolExecutor.AbortPolicy()
)
- private val locationManager by lazy { LocationManager(this) }
- private val targetSet by lazy { HashSet() }
private lateinit var cameraExecutor: ExecutorService
private lateinit var cameraProviderFuture: ListenableFuture
private lateinit var imageCapture: ImageCapture
private lateinit var imageAnalysis: ImageAnalysis
- private lateinit var inspectionViewModel: InspectionViewModel
- private lateinit var configViewModel: ConfigViewModel
- private lateinit var imageFileViewModel: ImageFileViewModel
- private var detectedScene = ""
- private var inspectionId = ""
- private var inspectionAddress = ""
- private var isDetectingScene = false //是否正在识别场景
- private var isDetectingTarget = false //是否正在识别目标
- private var mainDicModels: MutableList = ArrayList()
override fun initOnCreate(savedInstanceState: Bundle?) {
- locationManager.getCurrentLocation(false, object : LocationManager.OnGetLocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- location?.apply {
- inspectionAddress = address
- }
- }
- })
-
- inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java]
- val inspectionUser = SaveKeyValues.getValue(
- LocaleConstant.ACCOUNT, ""
- ) as String
-
- val currentTimeMillis = System.currentTimeMillis()
- val inspectionDate = currentTimeMillis.timestampToDate()
- val startTime = currentTimeMillis.timestampToTime()
- inspectionViewModel.startInspection(
- context, inspectionUser, inspectionAddress, inspectionDate, startTime
- )
- inspectionViewModel.addResultModel.observe(this) {
- if (it.code == 200) {
- inspectionId = it.data
- }
- }
-
- configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java]
- configViewModel.getDictionaryByCode(context, "pitfallBigType")
- configViewModel.dictionary.observe(this) {
- if (it.code == 200) {
- mainDicModels = it.data
- }
- }
-
- imageFileViewModel = ViewModelProvider(this)[ImageFileViewModel::class.java]
- imageFileViewModel.sceneResult.observe(this) {
- if (it == "没有检查到任何场景") {
- isDetectingScene = false
- } else {
- AlertControlDialog.Builder().setContext(this).setTitle("提示")
- .setMessage("识别到目标场景,是否开始排查该场景的隐患?")
- .setNegativeButton("稍后")
- .setPositiveButton("好的").setOnDialogButtonClickListener(object :
- AlertControlDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
- binding.titleView.setTitle(it)
- detectedScene = it
- }
-
- override fun onCancelClick() {
-
- }
- }).build().show()
- }
- }
-
- imageFileViewModel.recognizeResult.observe(this) {
- /**
- * {
- * "scene": "配电箱",
- * "inferneceStart": "2024-04-26 16:16:03.653",
- * "code": 200,
- * "inferneceEnd": "2024-04-26 16:16:03.774",
- * "inferneceInterval": "0:00:00.121",
- * "result": [
- *
- * ]
- * }
- * */
- if (it.code == 200) {
- if (it.result.isEmpty()) {
- binding.detectView.clearTag()
- targetSet.clear()
- binding.tipsTagView.visibility = View.GONE
- } else {
- binding.detectView.updateTargetPosition(it.result)
- it.result.forEach { result ->
- targetSet.add(result.label)
- }
- //显示角标
- binding.tipsTagView.visibility = View.VISIBLE
- binding.tipsTagView.text = "${targetSet.size}"
- }
- }
- isDetectingTarget = false
- }
-
- // Initialize our background executor
cameraExecutor = Executors.newSingleThreadExecutor()
cameraProviderFuture = ProcessCameraProvider.getInstance(this)
- // 检查 CameraProvider 可用性
cameraProviderFuture.addListener({
try {
bindPreview(cameraProviderFuture.get())
@@ -201,37 +79,36 @@
aspectRatio(outMetrics.widthPixels, outMetrics.heightPixels)
}
- // CameraSelector, 选择后置摄像头
- val cameraSelector =
- CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
+ val cameraSelector = CameraSelector.Builder()
+ .requireLensFacing(CameraSelector.LENS_FACING_BACK)
+ .build()
- // Preview
- val cameraPreViewBuilder = Preview.Builder().setTargetAspectRatio(screenAspectRatio)
- .setTargetRotation(Surface.ROTATION_0).build()
+ val cameraPreViewBuilder = Preview.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
+ .setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageCapture
- imageCapture =
- ImageCapture.Builder().setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
- .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
- .build()
+ imageCapture = ImageCapture.Builder()
+ .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
+ .setTargetAspectRatio(screenAspectRatio).setTargetRotation(Surface.ROTATION_0)
+ .build()
// ImageAnalysis
- imageAnalysis = ImageAnalysis.Builder().setTargetAspectRatio(screenAspectRatio)
+ imageAnalysis = ImageAnalysis.Builder()
+ .setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(Surface.ROTATION_0)
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
- // Must unbind the use-cases before rebinding them
cameraProvider.unbindAll()
try {
val camera = cameraProvider.bindToLifecycle(
this, cameraSelector, imageCapture, imageAnalysis, cameraPreViewBuilder
)
- // Attach the viewfinder's surface provider to preview use case
cameraPreViewBuilder.setSurfaceProvider(binding.cameraPreView.surfaceProvider)
camera.cameraInfo.cameraState.observe(this) {
- //开始预览之后才检测
if (it.type == CameraState.Type.OPEN) {
imageAnalysis.setAnalyzer(cameraExecutor, imageAnalyzer)
}
@@ -252,19 +129,6 @@
if (bitmap != null) {
val base64 = bitmap.encodeToBase64()
- //先识别场景
- if (!isDetectingScene) {
- isDetectingScene = true
- imageFileViewModel.getScene(context, base64)
- }
-
- //再识别隐患
- if (!isDetectingTarget && detectedScene.isNotBlank()) {
- isDetectingTarget = true
- imageFileViewModel.getRecognizeResult(
- context, base64, detectedScene, inspectionId
- )
- }
}
//检测完之后close就会继续生成下一帧图片,否则就会被阻塞不会继续生成下一帧
imageProxy.close()
@@ -289,39 +153,7 @@
}
override fun initEvent() {
- binding.stopButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "巡检任务创建中,请稍后再结束任务".show(this)
- return@setOnClickListener
- }
- navigatePageTo(inspectionId)
- }
- binding.tipsButton.setOnClickListener {
- if (targetSet.isEmpty()) {
- "未识别到任何目标,无法查看检查清单".show(this)
- return@setOnClickListener
- }
- //根据识别出来的结果显示清单
- navigatePageTo(
- arrayListOf(detectedScene, targetSet.toJson())
- )
- }
-
- binding.addButton.setOnClickListener {
- navigatePageTo(mainDicModels.toJson())
- }
-
- /**
- * 根据场景查看检查清单
- * */
- binding.listButton.setOnClickListener {
- if (inspectionId.isBlank()) {
- "请先选择场景或者识别出场景再试".show(this)
- return@setOnClickListener
- }
- navigatePageTo(arrayListOf(detectedScene, inspectionId))
- }
}
override fun initViewBinding(): ActivityStartCheckBinding {
@@ -340,51 +172,15 @@
}
override fun onRightClick() {
- BottomActionSheet.Builder()
- .setContext(context)
- .setActionItemTitle(arrayListOf("手动选择场景", "重置已选场景"))
- .setItemTextColor(R.color.themeColor.convertColor(context))
- .setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
- override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
- val intent = Intent(context, SelectSceneActivity::class.java)
- selectSceneLauncher.launch(intent)
- }
- 1 -> {
- binding.titleView.setTitle("")
- isDetectingScene = false
- detectedScene = ""
- "场景重置成功".show(context)
- }
- }
- }
- }).build().show()
}
})
}
- private val selectSceneLauncher = registerForActivityResult(
- ActivityResultContracts.StartActivityForResult(),
- ActivityResultCallback {
- if (it.resultCode == Activity.RESULT_OK) {
- val data = it.data ?: return@ActivityResultCallback
- val sceneName = data.getStringExtra("sceneName").toString()
- binding.titleView.setTitle(sceneName)
- detectedScene = sceneName
- }
- })
-
private fun aspectRatio(width: Int, height: Int): Int {
val ratio = width.coerceAtLeast(height).toDouble() / width.coerceAtMost(height)
return if (abs(ratio - RATIO_4_3_VALUE) <= abs(ratio - RATIO_16_9_VALUE)) {
AspectRatio.RATIO_4_3
} else AspectRatio.RATIO_16_9
}
-
- override fun onDestroy() {
- super.onDestroy()
- locationManager.stopLocation()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
index 394bcdf..c76af42 100644
--- a/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
+++ b/app/src/main/java/com/casic/br/app/vm/ImageFileViewModel.kt
@@ -1,76 +1,21 @@
package com.casic.br.app.vm
-import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.casic.br.app.extensions.getResponseCode
import com.casic.br.app.model.ActionResultModel
-import com.casic.br.app.model.RecognizeResultModel
import com.casic.br.app.retrofit.RetrofitServiceManager
import com.google.gson.Gson
-import com.google.gson.JsonParser
import com.google.gson.reflect.TypeToken
import com.pengxh.kt.lite.base.BaseViewModel
import com.pengxh.kt.lite.extensions.launch
-import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.LoadState
import java.io.File
class ImageFileViewModel : BaseViewModel() {
private val gson by lazy { Gson() }
- val sceneResult = MutableLiveData()
- val recognizeResult = MutableLiveData()
val resultModel = MutableLiveData()
- fun getScene(context: Context, base64: String) = launch({
- val response = RetrofitServiceManager.getScene(base64)
- when (response.getResponseCode()) {
- 200 -> {
- /**
- * {
- * "code": 200,
- * "scene": "配电箱"
- * }
- * */
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- sceneResult.value = jsonObject.get("scene").asString
- }
-
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- }
- }
- }, {
- it.printStackTrace()
- })
-
- fun getRecognizeResult(
- context: Context, base64: String, scene: String, inspectionId: String
- ) = launch({
- loadState.value = LoadState.Loading
- val response = RetrofitServiceManager.getRecognizeResult(base64, scene, inspectionId)
- when (response.getResponseCode()) {
- 200 -> {
- loadState.value = LoadState.Success
- recognizeResult.value = gson.fromJson(
- response, object : TypeToken() {}.type
- )
- }
-
- else -> {
- val element = JsonParser.parseString(response)
- val jsonObject = element.asJsonObject
- jsonObject.get("result").asString.show(context)
- loadState.value = LoadState.Fail
- }
- }
- }, {
- loadState.value = LoadState.Fail
- })
-
fun uploadImage(image: File) = launch({
loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
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
deleted file mode 100644
index 0ce98be..0000000
--- a/app/src/main/java/com/casic/br/app/widgets/AITargetDetectView.kt
+++ /dev/null
@@ -1,79 +0,0 @@
-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.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 borderPaint by lazy { Paint() }
- private val rect by lazy { Rect() }
- private var viewWidth = 0
- private var viewHeight = 0
- private var resultModels: MutableList = ArrayList()
-
- init {
- textPaint.color = Color.RED
- textPaint.isAntiAlias = true
- textPaint.textAlign = Paint.Align.CENTER
- textPaint.textSize = 14f.sp2px(context)
-
- 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(resultModels: MutableList) {
- this.resultModels = resultModels
- invalidate()
- }
-
- fun clearTag() {
- this.resultModels.clear()
- invalidate()
- }
-
- override fun onDraw(canvas: Canvas) {
- super.onDraw(canvas)
- 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
- )
-
- //画框
- 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/DetectResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt
index ac54f29..30b82a4 100644
--- a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt
+++ b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt
@@ -5,9 +5,9 @@
import android.graphics.Bitmap
import android.os.Bundle
import android.util.Log
+import com.casic.br.app.callback.OnImageCompressListener
import com.casic.br.app.databinding.DialogDetectResultBinding
import com.casic.br.app.extensions.compressImage
-import com.casic.br.operationsite.test.callback.OnImageCompressListener
import com.pengxh.kt.lite.extensions.binding
import com.pengxh.kt.lite.extensions.createImageFileDir
import com.pengxh.kt.lite.extensions.initDialogLayoutParams
diff --git a/app/src/main/res/layout/activity_start_check.xml b/app/src/main/res/layout/activity_start_check.xml
index 9336b61..8646f7d 100644
--- a/app/src/main/res/layout/activity_start_check.xml
+++ b/app/src/main/res/layout/activity_start_check.xml
@@ -20,96 +20,9 @@
app:tbv_text_color="@color/white"
app:tbv_text_size="@dimen/sp_18" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_weight="1" />
\ No newline at end of file