diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60684eb..84afa26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen" android:usesCleartextTraffic="true"> @@ -57,6 +57,9 @@ + @@ -57,6 +57,9 @@ + @@ -57,6 +57,9 @@ + @@ -57,6 +57,9 @@ + (), - EasyPermissions.PermissionCallbacks { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" - private val yolov8ncnn by lazy { Yolov8ncnn() } private val context = this private val qrManager by lazy { QrManager.getInstance().init(QrConfigCreator.create(this)) @@ -43,25 +33,9 @@ private lateinit var userViewModel: UserViewModel override fun initOnCreate(savedInstanceState: Bundle?) { - if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { - EasyPermissions.requestPermissions( - this, resources.getString(R.string.app_name) + "需要获取必要权限", - LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS - ) - } - binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) - //协程预加载算法模型 - lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) - } - - //初始化OpenCV - OpenCVLoader.initLocal() - authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] authenticateViewModel.keyModel.observe(this) { keyModel -> if (keyModel.code == 200) { @@ -151,21 +125,4 @@ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) window.decorView.systemUiVisibility = uiOptions } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { - //先把定位隐私政策声明,后面会用到 -// MapsInitializer.updatePrivacyShow(this, true, true) -// MapsInitializer.updatePrivacyAgree(this, true) - } - - override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { - - } } \ No newline at end of file diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60684eb..84afa26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen" android:usesCleartextTraffic="true"> @@ -57,6 +57,9 @@ + (), - EasyPermissions.PermissionCallbacks { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" - private val yolov8ncnn by lazy { Yolov8ncnn() } private val context = this private val qrManager by lazy { QrManager.getInstance().init(QrConfigCreator.create(this)) @@ -43,25 +33,9 @@ private lateinit var userViewModel: UserViewModel override fun initOnCreate(savedInstanceState: Bundle?) { - if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { - EasyPermissions.requestPermissions( - this, resources.getString(R.string.app_name) + "需要获取必要权限", - LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS - ) - } - binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) - //协程预加载算法模型 - lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) - } - - //初始化OpenCV - OpenCVLoader.initLocal() - authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] authenticateViewModel.keyModel.observe(this) { keyModel -> if (keyModel.code == 200) { @@ -151,21 +125,4 @@ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) window.decorView.systemUiVisibility = uiOptions } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { - //先把定位隐私政策声明,后面会用到 -// MapsInitializer.updatePrivacyShow(this, true, true) -// MapsInitializer.updatePrivacyAgree(this, true) - } - - override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { - - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt index 0bacdfb..ab45deb 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt @@ -6,13 +6,19 @@ import android.os.Message import android.view.KeyEvent import android.view.View +import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityMainBinding +import com.casic.br.ar.app.external.YoloStateConst +import com.casic.br.ar.app.external.Yolov8ncnn import com.casic.br.ar.app.service.WebSocketMessageService import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.opencv.android.OpenCVLoader class MainActivity : KotlinBaseActivity(), Handler.Callback { @@ -21,6 +27,8 @@ lateinit var weakReferenceHandler: WeakReferenceHandler } + private val yolov8ncnn by lazy { Yolov8ncnn() } + override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this) @@ -53,6 +61,15 @@ override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) + //协程预加载算法模型 + lifecycleScope.launch(Dispatchers.IO) { + yolov8ncnn.loadModel(assets, 2, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) + } + + //初始化OpenCV + OpenCVLoader.initLocal() + startService(Intent(this, WebSocketMessageService::class.java)) } diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60684eb..84afa26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen" android:usesCleartextTraffic="true"> @@ -57,6 +57,9 @@ + (), - EasyPermissions.PermissionCallbacks { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" - private val yolov8ncnn by lazy { Yolov8ncnn() } private val context = this private val qrManager by lazy { QrManager.getInstance().init(QrConfigCreator.create(this)) @@ -43,25 +33,9 @@ private lateinit var userViewModel: UserViewModel override fun initOnCreate(savedInstanceState: Bundle?) { - if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { - EasyPermissions.requestPermissions( - this, resources.getString(R.string.app_name) + "需要获取必要权限", - LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS - ) - } - binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) - //协程预加载算法模型 - lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) - } - - //初始化OpenCV - OpenCVLoader.initLocal() - authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] authenticateViewModel.keyModel.observe(this) { keyModel -> if (keyModel.code == 200) { @@ -151,21 +125,4 @@ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) window.decorView.systemUiVisibility = uiOptions } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { - //先把定位隐私政策声明,后面会用到 -// MapsInitializer.updatePrivacyShow(this, true, true) -// MapsInitializer.updatePrivacyAgree(this, true) - } - - override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { - - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt index 0bacdfb..ab45deb 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt @@ -6,13 +6,19 @@ import android.os.Message import android.view.KeyEvent import android.view.View +import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityMainBinding +import com.casic.br.ar.app.external.YoloStateConst +import com.casic.br.ar.app.external.Yolov8ncnn import com.casic.br.ar.app.service.WebSocketMessageService import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.opencv.android.OpenCVLoader class MainActivity : KotlinBaseActivity(), Handler.Callback { @@ -21,6 +27,8 @@ lateinit var weakReferenceHandler: WeakReferenceHandler } + private val yolov8ncnn by lazy { Yolov8ncnn() } + override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this) @@ -53,6 +61,15 @@ override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) + //协程预加载算法模型 + lifecycleScope.launch(Dispatchers.IO) { + yolov8ncnn.loadModel(assets, 2, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) + } + + //初始化OpenCV + OpenCVLoader.initLocal() + startService(Intent(this, WebSocketMessageService::class.java)) } diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt new file mode 100644 index 0000000..bc223ba --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt @@ -0,0 +1,71 @@ +package com.casic.br.ar.app.view + +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ar.app.R +import com.casic.br.ar.app.databinding.ActivityPermissionBinding +import com.casic.br.ar.app.utils.LocaleConstant +import com.casic.br.ar.app.vm.UserViewModel +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + + private val kTag = "PermissionActivity" + private lateinit var userViewModel: UserViewModel + + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS + ) + } + + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.getUserLoginState() + userViewModel.userStateResult.observe(this) { + if (it) { + navigatePageTo() + } else { + navigatePageTo() + } + finish() + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) + window.decorView.systemUiVisibility = uiOptions + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60684eb..84afa26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen" android:usesCleartextTraffic="true"> @@ -57,6 +57,9 @@ + (), - EasyPermissions.PermissionCallbacks { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" - private val yolov8ncnn by lazy { Yolov8ncnn() } private val context = this private val qrManager by lazy { QrManager.getInstance().init(QrConfigCreator.create(this)) @@ -43,25 +33,9 @@ private lateinit var userViewModel: UserViewModel override fun initOnCreate(savedInstanceState: Bundle?) { - if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { - EasyPermissions.requestPermissions( - this, resources.getString(R.string.app_name) + "需要获取必要权限", - LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS - ) - } - binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) - //协程预加载算法模型 - lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) - } - - //初始化OpenCV - OpenCVLoader.initLocal() - authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] authenticateViewModel.keyModel.observe(this) { keyModel -> if (keyModel.code == 200) { @@ -151,21 +125,4 @@ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) window.decorView.systemUiVisibility = uiOptions } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { - //先把定位隐私政策声明,后面会用到 -// MapsInitializer.updatePrivacyShow(this, true, true) -// MapsInitializer.updatePrivacyAgree(this, true) - } - - override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { - - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt index 0bacdfb..ab45deb 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt @@ -6,13 +6,19 @@ import android.os.Message import android.view.KeyEvent import android.view.View +import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityMainBinding +import com.casic.br.ar.app.external.YoloStateConst +import com.casic.br.ar.app.external.Yolov8ncnn import com.casic.br.ar.app.service.WebSocketMessageService import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.opencv.android.OpenCVLoader class MainActivity : KotlinBaseActivity(), Handler.Callback { @@ -21,6 +27,8 @@ lateinit var weakReferenceHandler: WeakReferenceHandler } + private val yolov8ncnn by lazy { Yolov8ncnn() } + override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this) @@ -53,6 +61,15 @@ override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) + //协程预加载算法模型 + lifecycleScope.launch(Dispatchers.IO) { + yolov8ncnn.loadModel(assets, 2, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) + } + + //初始化OpenCV + OpenCVLoader.initLocal() + startService(Intent(this, WebSocketMessageService::class.java)) } diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt new file mode 100644 index 0000000..bc223ba --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt @@ -0,0 +1,71 @@ +package com.casic.br.ar.app.view + +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ar.app.R +import com.casic.br.ar.app.databinding.ActivityPermissionBinding +import com.casic.br.ar.app.utils.LocaleConstant +import com.casic.br.ar.app.vm.UserViewModel +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + + private val kTag = "PermissionActivity" + private lateinit var userViewModel: UserViewModel + + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS + ) + } + + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.getUserLoginState() + userViewModel.userStateResult.observe(this) { + if (it) { + navigatePageTo() + } else { + navigatePageTo() + } + finish() + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) + window.decorView.systemUiVisibility = uiOptions + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt index ab45003..746655e 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt @@ -2,20 +2,15 @@ import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.View import android.view.WindowManager import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityStartCheckBinding -import com.casic.br.ar.app.extensions.getSceneByTarget import com.casic.br.ar.app.external.INativeCallback import com.casic.br.ar.app.external.YoloResult -import com.casic.br.ar.app.external.YoloStateConst import com.casic.br.ar.app.external.Yolov8ncnn -import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.opencv.core.Mat @@ -26,15 +21,8 @@ private val kTag = "StartCheckActivity" private val context = this - - /** - * 需要和训练出来的模型里面类别顺序保持一致 - * */ - private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房") private val yolov8ncnn by lazy { Yolov8ncnn() } private val mat by lazy { Mat() } - private val targetSet by lazy { HashSet() } - private var isShowing = false private var detectedScene = "" override fun initOnCreate(savedInstanceState: Bundle?) { @@ -74,52 +62,7 @@ } override fun onClassify(possibles: FloatArray) { - if (isShowing) { - return - } - //找出最大值的下标 - var max = possibles[0] - var maxIndex = 0 - possibles.forEachIndexed { index, fl -> - if (fl > max) { - max = fl - maxIndex = index - } - } - - try { - lifecycleScope.launch(Dispatchers.Main) { - isShowing = true - if (classArray[maxIndex] == classArray[2]) { - //非居 - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?") - .setNegativeButton("稍后") - .setPositiveButton("好的").setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - //需要同时调用分割和检测模型 - - } - - override fun onCancelClick() { - isShowing = false - } - }).build().show() - } else { - if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) { - //需要调用检测模型 - loadModelFromAssets(2) - yolov8ncnn.updateYoloState(YoloStateConst.DETECT) - } - } - } - } catch (e: ArrayIndexOutOfBoundsException) { - e.printStackTrace() - } } override fun onPartition(output: ArrayList) { @@ -127,11 +70,6 @@ } override fun onDetect(output: YoloResult) { - //需要根据检测结果反推属于什么场景 - val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] - - targetSet.add(label) - detectedScene = label.getSceneByTarget() lifecycleScope.launch(Dispatchers.Main) { binding.titleView.text = detectedScene } @@ -148,14 +86,4 @@ super.onPause() yolov8ncnn.closeCamera() } - - /** - * index对应 JNI 里面定义的数组角标 - * */ - private fun loadModelFromAssets(index: Int) { - val result = yolov8ncnn.loadModel(assets, index, 0) - if (!result) { - Log.d(kTag, "reload: yolov8ncnn loadModel failed") - } - } } \ No newline at end of file diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60684eb..84afa26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen" android:usesCleartextTraffic="true"> @@ -57,6 +57,9 @@ + (), - EasyPermissions.PermissionCallbacks { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" - private val yolov8ncnn by lazy { Yolov8ncnn() } private val context = this private val qrManager by lazy { QrManager.getInstance().init(QrConfigCreator.create(this)) @@ -43,25 +33,9 @@ private lateinit var userViewModel: UserViewModel override fun initOnCreate(savedInstanceState: Bundle?) { - if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { - EasyPermissions.requestPermissions( - this, resources.getString(R.string.app_name) + "需要获取必要权限", - LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS - ) - } - binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) - //协程预加载算法模型 - lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) - } - - //初始化OpenCV - OpenCVLoader.initLocal() - authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] authenticateViewModel.keyModel.observe(this) { keyModel -> if (keyModel.code == 200) { @@ -151,21 +125,4 @@ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) window.decorView.systemUiVisibility = uiOptions } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { - //先把定位隐私政策声明,后面会用到 -// MapsInitializer.updatePrivacyShow(this, true, true) -// MapsInitializer.updatePrivacyAgree(this, true) - } - - override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { - - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt index 0bacdfb..ab45deb 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt @@ -6,13 +6,19 @@ import android.os.Message import android.view.KeyEvent import android.view.View +import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityMainBinding +import com.casic.br.ar.app.external.YoloStateConst +import com.casic.br.ar.app.external.Yolov8ncnn import com.casic.br.ar.app.service.WebSocketMessageService import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.opencv.android.OpenCVLoader class MainActivity : KotlinBaseActivity(), Handler.Callback { @@ -21,6 +27,8 @@ lateinit var weakReferenceHandler: WeakReferenceHandler } + private val yolov8ncnn by lazy { Yolov8ncnn() } + override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this) @@ -53,6 +61,15 @@ override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) + //协程预加载算法模型 + lifecycleScope.launch(Dispatchers.IO) { + yolov8ncnn.loadModel(assets, 2, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) + } + + //初始化OpenCV + OpenCVLoader.initLocal() + startService(Intent(this, WebSocketMessageService::class.java)) } diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt new file mode 100644 index 0000000..bc223ba --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt @@ -0,0 +1,71 @@ +package com.casic.br.ar.app.view + +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ar.app.R +import com.casic.br.ar.app.databinding.ActivityPermissionBinding +import com.casic.br.ar.app.utils.LocaleConstant +import com.casic.br.ar.app.vm.UserViewModel +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + + private val kTag = "PermissionActivity" + private lateinit var userViewModel: UserViewModel + + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS + ) + } + + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.getUserLoginState() + userViewModel.userStateResult.observe(this) { + if (it) { + navigatePageTo() + } else { + navigatePageTo() + } + finish() + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) + window.decorView.systemUiVisibility = uiOptions + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt index ab45003..746655e 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt @@ -2,20 +2,15 @@ import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.View import android.view.WindowManager import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityStartCheckBinding -import com.casic.br.ar.app.extensions.getSceneByTarget import com.casic.br.ar.app.external.INativeCallback import com.casic.br.ar.app.external.YoloResult -import com.casic.br.ar.app.external.YoloStateConst import com.casic.br.ar.app.external.Yolov8ncnn -import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.opencv.core.Mat @@ -26,15 +21,8 @@ private val kTag = "StartCheckActivity" private val context = this - - /** - * 需要和训练出来的模型里面类别顺序保持一致 - * */ - private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房") private val yolov8ncnn by lazy { Yolov8ncnn() } private val mat by lazy { Mat() } - private val targetSet by lazy { HashSet() } - private var isShowing = false private var detectedScene = "" override fun initOnCreate(savedInstanceState: Bundle?) { @@ -74,52 +62,7 @@ } override fun onClassify(possibles: FloatArray) { - if (isShowing) { - return - } - //找出最大值的下标 - var max = possibles[0] - var maxIndex = 0 - possibles.forEachIndexed { index, fl -> - if (fl > max) { - max = fl - maxIndex = index - } - } - - try { - lifecycleScope.launch(Dispatchers.Main) { - isShowing = true - if (classArray[maxIndex] == classArray[2]) { - //非居 - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?") - .setNegativeButton("稍后") - .setPositiveButton("好的").setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - //需要同时调用分割和检测模型 - - } - - override fun onCancelClick() { - isShowing = false - } - }).build().show() - } else { - if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) { - //需要调用检测模型 - loadModelFromAssets(2) - yolov8ncnn.updateYoloState(YoloStateConst.DETECT) - } - } - } - } catch (e: ArrayIndexOutOfBoundsException) { - e.printStackTrace() - } } override fun onPartition(output: ArrayList) { @@ -127,11 +70,6 @@ } override fun onDetect(output: YoloResult) { - //需要根据检测结果反推属于什么场景 - val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] - - targetSet.add(label) - detectedScene = label.getSceneByTarget() lifecycleScope.launch(Dispatchers.Main) { binding.titleView.text = detectedScene } @@ -148,14 +86,4 @@ super.onPause() yolov8ncnn.closeCamera() } - - /** - * index对应 JNI 里面定义的数组角标 - * */ - private fun loadModelFromAssets(index: Int) { - val result = yolov8ncnn.loadModel(assets, index, 0) - if (!result) { - Log.d(kTag, "reload: yolov8ncnn loadModel failed") - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt index 61bf8fd..918f630 100644 --- a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt @@ -18,6 +18,7 @@ private val gson by lazy { Gson() } val loginResult = MutableLiveData() + val userStateResult = MutableLiveData() val outResult = MutableLiveData() fun login(context: Context, sid: String, account: String, secretKey: String) = launch({ @@ -38,6 +39,12 @@ it.printStackTrace() }) + fun getUserLoginState() = launch({ + val response = RetrofitServiceManager.getUserDetail() + val responseCode = response.getResponseCode() + userStateResult.value = responseCode == 200 + }) + fun loginOut(context: Context) = launch({ val response = RetrofitServiceManager.loginOut() val responseCode = response.getResponseCode() diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60684eb..84afa26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen" android:usesCleartextTraffic="true"> @@ -57,6 +57,9 @@ + (), - EasyPermissions.PermissionCallbacks { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" - private val yolov8ncnn by lazy { Yolov8ncnn() } private val context = this private val qrManager by lazy { QrManager.getInstance().init(QrConfigCreator.create(this)) @@ -43,25 +33,9 @@ private lateinit var userViewModel: UserViewModel override fun initOnCreate(savedInstanceState: Bundle?) { - if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { - EasyPermissions.requestPermissions( - this, resources.getString(R.string.app_name) + "需要获取必要权限", - LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS - ) - } - binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) - //协程预加载算法模型 - lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) - } - - //初始化OpenCV - OpenCVLoader.initLocal() - authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] authenticateViewModel.keyModel.observe(this) { keyModel -> if (keyModel.code == 200) { @@ -151,21 +125,4 @@ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) window.decorView.systemUiVisibility = uiOptions } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { - //先把定位隐私政策声明,后面会用到 -// MapsInitializer.updatePrivacyShow(this, true, true) -// MapsInitializer.updatePrivacyAgree(this, true) - } - - override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { - - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt index 0bacdfb..ab45deb 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt @@ -6,13 +6,19 @@ import android.os.Message import android.view.KeyEvent import android.view.View +import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityMainBinding +import com.casic.br.ar.app.external.YoloStateConst +import com.casic.br.ar.app.external.Yolov8ncnn import com.casic.br.ar.app.service.WebSocketMessageService import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.opencv.android.OpenCVLoader class MainActivity : KotlinBaseActivity(), Handler.Callback { @@ -21,6 +27,8 @@ lateinit var weakReferenceHandler: WeakReferenceHandler } + private val yolov8ncnn by lazy { Yolov8ncnn() } + override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this) @@ -53,6 +61,15 @@ override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) + //协程预加载算法模型 + lifecycleScope.launch(Dispatchers.IO) { + yolov8ncnn.loadModel(assets, 2, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) + } + + //初始化OpenCV + OpenCVLoader.initLocal() + startService(Intent(this, WebSocketMessageService::class.java)) } diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt new file mode 100644 index 0000000..bc223ba --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt @@ -0,0 +1,71 @@ +package com.casic.br.ar.app.view + +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ar.app.R +import com.casic.br.ar.app.databinding.ActivityPermissionBinding +import com.casic.br.ar.app.utils.LocaleConstant +import com.casic.br.ar.app.vm.UserViewModel +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + + private val kTag = "PermissionActivity" + private lateinit var userViewModel: UserViewModel + + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS + ) + } + + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.getUserLoginState() + userViewModel.userStateResult.observe(this) { + if (it) { + navigatePageTo() + } else { + navigatePageTo() + } + finish() + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) + window.decorView.systemUiVisibility = uiOptions + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt index ab45003..746655e 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt @@ -2,20 +2,15 @@ import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.View import android.view.WindowManager import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityStartCheckBinding -import com.casic.br.ar.app.extensions.getSceneByTarget import com.casic.br.ar.app.external.INativeCallback import com.casic.br.ar.app.external.YoloResult -import com.casic.br.ar.app.external.YoloStateConst import com.casic.br.ar.app.external.Yolov8ncnn -import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.opencv.core.Mat @@ -26,15 +21,8 @@ private val kTag = "StartCheckActivity" private val context = this - - /** - * 需要和训练出来的模型里面类别顺序保持一致 - * */ - private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房") private val yolov8ncnn by lazy { Yolov8ncnn() } private val mat by lazy { Mat() } - private val targetSet by lazy { HashSet() } - private var isShowing = false private var detectedScene = "" override fun initOnCreate(savedInstanceState: Bundle?) { @@ -74,52 +62,7 @@ } override fun onClassify(possibles: FloatArray) { - if (isShowing) { - return - } - //找出最大值的下标 - var max = possibles[0] - var maxIndex = 0 - possibles.forEachIndexed { index, fl -> - if (fl > max) { - max = fl - maxIndex = index - } - } - - try { - lifecycleScope.launch(Dispatchers.Main) { - isShowing = true - if (classArray[maxIndex] == classArray[2]) { - //非居 - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?") - .setNegativeButton("稍后") - .setPositiveButton("好的").setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - //需要同时调用分割和检测模型 - - } - - override fun onCancelClick() { - isShowing = false - } - }).build().show() - } else { - if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) { - //需要调用检测模型 - loadModelFromAssets(2) - yolov8ncnn.updateYoloState(YoloStateConst.DETECT) - } - } - } - } catch (e: ArrayIndexOutOfBoundsException) { - e.printStackTrace() - } } override fun onPartition(output: ArrayList) { @@ -127,11 +70,6 @@ } override fun onDetect(output: YoloResult) { - //需要根据检测结果反推属于什么场景 - val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] - - targetSet.add(label) - detectedScene = label.getSceneByTarget() lifecycleScope.launch(Dispatchers.Main) { binding.titleView.text = detectedScene } @@ -148,14 +86,4 @@ super.onPause() yolov8ncnn.closeCamera() } - - /** - * index对应 JNI 里面定义的数组角标 - * */ - private fun loadModelFromAssets(index: Int) { - val result = yolov8ncnn.loadModel(assets, index, 0) - if (!result) { - Log.d(kTag, "reload: yolov8ncnn loadModel failed") - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt index 61bf8fd..918f630 100644 --- a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt @@ -18,6 +18,7 @@ private val gson by lazy { Gson() } val loginResult = MutableLiveData() + val userStateResult = MutableLiveData() val outResult = MutableLiveData() fun login(context: Context, sid: String, account: String, secretKey: String) = launch({ @@ -38,6 +39,12 @@ it.printStackTrace() }) + fun getUserLoginState() = launch({ + val response = RetrofitServiceManager.getUserDetail() + val responseCode = response.getResponseCode() + userStateResult.value = responseCode == 200 + }) + fun loginOut(context: Context) = launch({ val response = RetrofitServiceManager.loginOut() val responseCode = response.getResponseCode() diff --git a/app/src/main/res/layout/activity_check_history_detail.xml b/app/src/main/res/layout/activity_check_history_detail.xml index 5e95a8b..a2b0a37 100644 --- a/app/src/main/res/layout/activity_check_history_detail.xml +++ b/app/src/main/res/layout/activity_check_history_detail.xml @@ -48,7 +48,7 @@ @@ -74,7 +74,7 @@ diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60684eb..84afa26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen" android:usesCleartextTraffic="true"> @@ -57,6 +57,9 @@ + (), - EasyPermissions.PermissionCallbacks { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" - private val yolov8ncnn by lazy { Yolov8ncnn() } private val context = this private val qrManager by lazy { QrManager.getInstance().init(QrConfigCreator.create(this)) @@ -43,25 +33,9 @@ private lateinit var userViewModel: UserViewModel override fun initOnCreate(savedInstanceState: Bundle?) { - if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { - EasyPermissions.requestPermissions( - this, resources.getString(R.string.app_name) + "需要获取必要权限", - LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS - ) - } - binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) - //协程预加载算法模型 - lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) - } - - //初始化OpenCV - OpenCVLoader.initLocal() - authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] authenticateViewModel.keyModel.observe(this) { keyModel -> if (keyModel.code == 200) { @@ -151,21 +125,4 @@ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) window.decorView.systemUiVisibility = uiOptions } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { - //先把定位隐私政策声明,后面会用到 -// MapsInitializer.updatePrivacyShow(this, true, true) -// MapsInitializer.updatePrivacyAgree(this, true) - } - - override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { - - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt index 0bacdfb..ab45deb 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt @@ -6,13 +6,19 @@ import android.os.Message import android.view.KeyEvent import android.view.View +import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityMainBinding +import com.casic.br.ar.app.external.YoloStateConst +import com.casic.br.ar.app.external.Yolov8ncnn import com.casic.br.ar.app.service.WebSocketMessageService import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.opencv.android.OpenCVLoader class MainActivity : KotlinBaseActivity(), Handler.Callback { @@ -21,6 +27,8 @@ lateinit var weakReferenceHandler: WeakReferenceHandler } + private val yolov8ncnn by lazy { Yolov8ncnn() } + override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this) @@ -53,6 +61,15 @@ override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) + //协程预加载算法模型 + lifecycleScope.launch(Dispatchers.IO) { + yolov8ncnn.loadModel(assets, 2, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) + } + + //初始化OpenCV + OpenCVLoader.initLocal() + startService(Intent(this, WebSocketMessageService::class.java)) } diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt new file mode 100644 index 0000000..bc223ba --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt @@ -0,0 +1,71 @@ +package com.casic.br.ar.app.view + +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ar.app.R +import com.casic.br.ar.app.databinding.ActivityPermissionBinding +import com.casic.br.ar.app.utils.LocaleConstant +import com.casic.br.ar.app.vm.UserViewModel +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + + private val kTag = "PermissionActivity" + private lateinit var userViewModel: UserViewModel + + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS + ) + } + + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.getUserLoginState() + userViewModel.userStateResult.observe(this) { + if (it) { + navigatePageTo() + } else { + navigatePageTo() + } + finish() + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) + window.decorView.systemUiVisibility = uiOptions + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt index ab45003..746655e 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt @@ -2,20 +2,15 @@ import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.View import android.view.WindowManager import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityStartCheckBinding -import com.casic.br.ar.app.extensions.getSceneByTarget import com.casic.br.ar.app.external.INativeCallback import com.casic.br.ar.app.external.YoloResult -import com.casic.br.ar.app.external.YoloStateConst import com.casic.br.ar.app.external.Yolov8ncnn -import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.opencv.core.Mat @@ -26,15 +21,8 @@ private val kTag = "StartCheckActivity" private val context = this - - /** - * 需要和训练出来的模型里面类别顺序保持一致 - * */ - private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房") private val yolov8ncnn by lazy { Yolov8ncnn() } private val mat by lazy { Mat() } - private val targetSet by lazy { HashSet() } - private var isShowing = false private var detectedScene = "" override fun initOnCreate(savedInstanceState: Bundle?) { @@ -74,52 +62,7 @@ } override fun onClassify(possibles: FloatArray) { - if (isShowing) { - return - } - //找出最大值的下标 - var max = possibles[0] - var maxIndex = 0 - possibles.forEachIndexed { index, fl -> - if (fl > max) { - max = fl - maxIndex = index - } - } - - try { - lifecycleScope.launch(Dispatchers.Main) { - isShowing = true - if (classArray[maxIndex] == classArray[2]) { - //非居 - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?") - .setNegativeButton("稍后") - .setPositiveButton("好的").setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - //需要同时调用分割和检测模型 - - } - - override fun onCancelClick() { - isShowing = false - } - }).build().show() - } else { - if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) { - //需要调用检测模型 - loadModelFromAssets(2) - yolov8ncnn.updateYoloState(YoloStateConst.DETECT) - } - } - } - } catch (e: ArrayIndexOutOfBoundsException) { - e.printStackTrace() - } } override fun onPartition(output: ArrayList) { @@ -127,11 +70,6 @@ } override fun onDetect(output: YoloResult) { - //需要根据检测结果反推属于什么场景 - val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] - - targetSet.add(label) - detectedScene = label.getSceneByTarget() lifecycleScope.launch(Dispatchers.Main) { binding.titleView.text = detectedScene } @@ -148,14 +86,4 @@ super.onPause() yolov8ncnn.closeCamera() } - - /** - * index对应 JNI 里面定义的数组角标 - * */ - private fun loadModelFromAssets(index: Int) { - val result = yolov8ncnn.loadModel(assets, index, 0) - if (!result) { - Log.d(kTag, "reload: yolov8ncnn loadModel failed") - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt index 61bf8fd..918f630 100644 --- a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt @@ -18,6 +18,7 @@ private val gson by lazy { Gson() } val loginResult = MutableLiveData() + val userStateResult = MutableLiveData() val outResult = MutableLiveData() fun login(context: Context, sid: String, account: String, secretKey: String) = launch({ @@ -38,6 +39,12 @@ it.printStackTrace() }) + fun getUserLoginState() = launch({ + val response = RetrofitServiceManager.getUserDetail() + val responseCode = response.getResponseCode() + userStateResult.value = responseCode == 200 + }) + fun loginOut(context: Context) = launch({ val response = RetrofitServiceManager.loginOut() val responseCode = response.getResponseCode() diff --git a/app/src/main/res/layout/activity_check_history_detail.xml b/app/src/main/res/layout/activity_check_history_detail.xml index 5e95a8b..a2b0a37 100644 --- a/app/src/main/res/layout/activity_check_history_detail.xml +++ b/app/src/main/res/layout/activity_check_history_detail.xml @@ -48,7 +48,7 @@ @@ -74,7 +74,7 @@ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index cf9506c..7a427f7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -74,7 +74,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_20" android:fontFamily="sans-serif-black" - android:text="巡查记录" + android:text="检查记录" android:textColor="@color/white" android:textSize="@dimen/sp_22" /> diff --git a/.gitignore b/.gitignore index aa724b7..f8b794a 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ .externalNativeBuild .cxx local.properties +/sdk/build diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 60684eb..84afa26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,7 +46,7 @@ android:theme="@style/Theme.SafetyAuxiliary.NoTitleBar.Fullscreen" android:usesCleartextTraffic="true"> @@ -57,6 +57,9 @@ + (), - EasyPermissions.PermissionCallbacks { +class LoginActivity : KotlinBaseActivity() { private val kTag = "LoginActivity" - private val yolov8ncnn by lazy { Yolov8ncnn() } private val context = this private val qrManager by lazy { QrManager.getInstance().init(QrConfigCreator.create(this)) @@ -43,25 +33,9 @@ private lateinit var userViewModel: UserViewModel override fun initOnCreate(savedInstanceState: Bundle?) { - if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { - EasyPermissions.requestPermissions( - this, resources.getString(R.string.app_name) + "需要获取必要权限", - LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS - ) - } - binding.userNameView.setText(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String) binding.passwordView.setText(SaveKeyValues.getValue(LocaleConstant.PASSWORD, "") as String) - //协程预加载算法模型 - lifecycleScope.launch(Dispatchers.IO) { - yolov8ncnn.loadModel(assets, 1, 0) - yolov8ncnn.updateYoloState(YoloStateConst.CLASSIFY) - } - - //初始化OpenCV - OpenCVLoader.initLocal() - authenticateViewModel = ViewModelProvider(this)[AuthenticateViewModel::class.java] authenticateViewModel.keyModel.observe(this) { keyModel -> if (keyModel.code == 200) { @@ -151,21 +125,4 @@ val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) window.decorView.systemUiVisibility = uiOptions } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) - } - - override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { - //先把定位隐私政策声明,后面会用到 -// MapsInitializer.updatePrivacyShow(this, true, true) -// MapsInitializer.updatePrivacyAgree(this, true) - } - - override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { - - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt index 0bacdfb..ab45deb 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/MainActivity.kt @@ -6,13 +6,19 @@ import android.os.Message import android.view.KeyEvent import android.view.View +import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityMainBinding +import com.casic.br.ar.app.external.YoloStateConst +import com.casic.br.ar.app.external.Yolov8ncnn import com.casic.br.ar.app.service.WebSocketMessageService import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.opencv.android.OpenCVLoader class MainActivity : KotlinBaseActivity(), Handler.Callback { @@ -21,6 +27,8 @@ lateinit var weakReferenceHandler: WeakReferenceHandler } + private val yolov8ncnn by lazy { Yolov8ncnn() } + override fun handleMessage(msg: Message): Boolean { when (msg.what) { LocaleConstant.WEBSOCKET_CONNECTED_CODE -> "WebSocket连接成功".show(this) @@ -53,6 +61,15 @@ override fun initOnCreate(savedInstanceState: Bundle?) { weakReferenceHandler = WeakReferenceHandler(this) + //协程预加载算法模型 + lifecycleScope.launch(Dispatchers.IO) { + yolov8ncnn.loadModel(assets, 2, 0) + yolov8ncnn.updateYoloState(YoloStateConst.DETECT) + } + + //初始化OpenCV + OpenCVLoader.initLocal() + startService(Intent(this, WebSocketMessageService::class.java)) } diff --git a/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt new file mode 100644 index 0000000..bc223ba --- /dev/null +++ b/app/src/main/java/com/casic/br/ar/app/view/PermissionActivity.kt @@ -0,0 +1,71 @@ +package com.casic.br.ar.app.view + +import android.os.Bundle +import android.view.View +import androidx.lifecycle.ViewModelProvider +import com.casic.br.ar.app.R +import com.casic.br.ar.app.databinding.ActivityPermissionBinding +import com.casic.br.ar.app.utils.LocaleConstant +import com.casic.br.ar.app.vm.UserViewModel +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + + private val kTag = "PermissionActivity" + private lateinit var userViewModel: UserViewModel + + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (!EasyPermissions.hasPermissions(this, *LocaleConstant.USER_PERMISSIONS)) { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + LocaleConstant.PERMISSIONS_CODE, *LocaleConstant.USER_PERMISSIONS + ) + } + + userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + userViewModel.getUserLoginState() + userViewModel.userStateResult.observe(this) { + if (it) { + navigatePageTo() + } else { + navigatePageTo() + } + finish() + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN) + window.decorView.systemUiVisibility = uiOptions + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt index ab45003..746655e 100644 --- a/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt +++ b/app/src/main/java/com/casic/br/ar/app/view/StartCheckActivity.kt @@ -2,20 +2,15 @@ import android.graphics.PixelFormat import android.os.Bundle -import android.util.Log import android.view.SurfaceHolder import android.view.View import android.view.WindowManager import androidx.lifecycle.lifecycleScope import com.casic.br.ar.app.databinding.ActivityStartCheckBinding -import com.casic.br.ar.app.extensions.getSceneByTarget import com.casic.br.ar.app.external.INativeCallback import com.casic.br.ar.app.external.YoloResult -import com.casic.br.ar.app.external.YoloStateConst import com.casic.br.ar.app.external.Yolov8ncnn -import com.casic.br.ar.app.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.opencv.core.Mat @@ -26,15 +21,8 @@ private val kTag = "StartCheckActivity" private val context = this - - /** - * 需要和训练出来的模型里面类别顺序保持一致 - * */ - private val classArray = arrayOf("电线整洁", "电线杂乱", "餐馆厨房") private val yolov8ncnn by lazy { Yolov8ncnn() } private val mat by lazy { Mat() } - private val targetSet by lazy { HashSet() } - private var isShowing = false private var detectedScene = "" override fun initOnCreate(savedInstanceState: Bundle?) { @@ -74,52 +62,7 @@ } override fun onClassify(possibles: FloatArray) { - if (isShowing) { - return - } - //找出最大值的下标 - var max = possibles[0] - var maxIndex = 0 - possibles.forEachIndexed { index, fl -> - if (fl > max) { - max = fl - maxIndex = index - } - } - - try { - lifecycleScope.launch(Dispatchers.Main) { - isShowing = true - if (classArray[maxIndex] == classArray[2]) { - //非居 - AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("识别到${classArray[maxIndex]}场景,是否开始排查该场景的隐患?") - .setNegativeButton("稍后") - .setPositiveButton("好的").setOnDialogButtonClickListener(object : - AlertControlDialog.OnDialogButtonClickListener { - override fun onConfirmClick() { - //需要同时调用分割和检测模型 - - } - - override fun onCancelClick() { - isShowing = false - } - }).build().show() - } else { - if (yolov8ncnn.getYoloCurrentState() != YoloStateConst.DETECT) { - //需要调用检测模型 - loadModelFromAssets(2) - yolov8ncnn.updateYoloState(YoloStateConst.DETECT) - } - } - } - } catch (e: ArrayIndexOutOfBoundsException) { - e.printStackTrace() - } } override fun onPartition(output: ArrayList) { @@ -127,11 +70,6 @@ } override fun onDetect(output: YoloResult) { - //需要根据检测结果反推属于什么场景 - val label = LocaleConstant.CLASS_NAMES_ARRAY[output.type] - - targetSet.add(label) - detectedScene = label.getSceneByTarget() lifecycleScope.launch(Dispatchers.Main) { binding.titleView.text = detectedScene } @@ -148,14 +86,4 @@ super.onPause() yolov8ncnn.closeCamera() } - - /** - * index对应 JNI 里面定义的数组角标 - * */ - private fun loadModelFromAssets(index: Int) { - val result = yolov8ncnn.loadModel(assets, index, 0) - if (!result) { - Log.d(kTag, "reload: yolov8ncnn loadModel failed") - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt index 61bf8fd..918f630 100644 --- a/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt +++ b/app/src/main/java/com/casic/br/ar/app/vm/UserViewModel.kt @@ -18,6 +18,7 @@ private val gson by lazy { Gson() } val loginResult = MutableLiveData() + val userStateResult = MutableLiveData() val outResult = MutableLiveData() fun login(context: Context, sid: String, account: String, secretKey: String) = launch({ @@ -38,6 +39,12 @@ it.printStackTrace() }) + fun getUserLoginState() = launch({ + val response = RetrofitServiceManager.getUserDetail() + val responseCode = response.getResponseCode() + userStateResult.value = responseCode == 200 + }) + fun loginOut(context: Context) = launch({ val response = RetrofitServiceManager.loginOut() val responseCode = response.getResponseCode() diff --git a/app/src/main/res/layout/activity_check_history_detail.xml b/app/src/main/res/layout/activity_check_history_detail.xml index 5e95a8b..a2b0a37 100644 --- a/app/src/main/res/layout/activity_check_history_detail.xml +++ b/app/src/main/res/layout/activity_check_history_detail.xml @@ -48,7 +48,7 @@ @@ -74,7 +74,7 @@ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index cf9506c..7a427f7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -74,7 +74,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_20" android:fontFamily="sans-serif-black" - android:text="巡查记录" + android:text="检查记录" android:textColor="@color/white" android:textSize="@dimen/sp_22" /> diff --git a/app/src/main/res/layout/activity_permission.xml b/app/src/main/res/layout/activity_permission.xml new file mode 100644 index 0000000..d432ee8 --- /dev/null +++ b/app/src/main/res/layout/activity_permission.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file