调整了人脸识别背景及提示位置

This commit is contained in:
zxj
2025-08-11 17:13:48 +08:00
parent fc326a8f42
commit fde2cd0544
5 changed files with 53 additions and 9 deletions
@@ -5,15 +5,12 @@ import android.graphics.Outline
import android.graphics.Typeface
import android.hardware.display.DisplayManager
import android.net.Uri
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.view.ViewOutlineProvider
import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector
import androidx.camera.core.ImageAnalysis
import androidx.camera.core.ImageCapture
@@ -36,7 +33,6 @@ import com.sw.dualscreen.presentation.SecondaryScreenPresentation
import com.sw.dualscreen.sdk.SensorScaleUtils
import com.sw.dualscreen.utils.GlideUtils
import com.sw.dualscreen.view.CustomBottomSheetDialog
import com.sw.dualscreen.view.CustomDialog
import com.sw.dualscreen.viewmodel.BaseViewModel
import com.sw.dualscreen.viewmodel.UserViewModel
import com.sw.plate.utils.ToastUtils
@@ -79,7 +79,7 @@ class SecondaryScreenPresentation(
private val debouncer = Debouncer(500)
private var recognitionTime: Long = 0L // 人脸识别时的时间
private var recognitionWeight: Double = 0.0 // 人脸识别时的重量
private var lastFaceTrackId: Int = 0 // 上一次的人脸信息
private var lastFaceTrackId: Int = -1 // 上一次的人脸信息
private var mealPickupMode: Int = 0 // 取餐模式 0 即放即取 1 余量取餐
// 当前步骤
@@ -176,6 +176,7 @@ class SecondaryScreenPresentation(
binding.flPreview.visibility = View.VISIBLE
binding.ivImg.visibility = View.VISIBLE
binding.flFace.visibility = View.INVISIBLE
binding.tvFaceTip.visibility = View.GONE
pauseCamera()
binding.tvBottomTip.visibility = View.VISIBLE
itemUserNutritionBinding.clNutritionData.visibility = View.GONE
@@ -750,7 +751,7 @@ class SecondaryScreenPresentation(
* @param facePreviewInfoList RGB画面的实时人脸信息
*/
private fun drawPreviewInfo(facePreviewInfoList: MutableList<FacePreviewInfo?>) {
// Timber.d("drawPreviewInfo facePreviewInfoList = ${facePreviewInfoList.size}, rgbFaceRectTransformer = ${rgbFaceRectTransformer != null}")
Timber.d("drawPreviewInfo facePreviewInfoList = ${facePreviewInfoList.size}, rgbFaceRectTransformer = ${rgbFaceRectTransformer != null}")
if (rgbFaceRectTransformer != null) {
val rgbDrawInfoList: MutableList<DrawInfo?>? = recognizeViewModel.getDrawInfo(
facePreviewInfoList,
@@ -762,9 +763,9 @@ class SecondaryScreenPresentation(
}
if (facePreviewInfoList.isEmpty() || (lastFaceTrackId != facePreviewInfoList[0]!!.trackId)) {
if (lastFaceTrackId != 0) {
if (lastFaceTrackId != -1) {
Timber.i("$lastFaceTrackId 用户离开")
lastFaceTrackId = 0
lastFaceTrackId = -1
postUserData()
if (mealPickupMode == 0) {
step1()
@@ -0,0 +1,47 @@
package com.sw.dualscreen.utils
import android.content.Context
import android.util.DisplayMetrics
import android.view.WindowManager
import timber.log.Timber
import kotlin.math.sqrt
object ScreenUtils {
fun printScreenInfo(context: Context, tag: String) {
val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val displayMetrics = DisplayMetrics()
// 方法 1:获取应用可用区域(排除系统装饰,如状态栏)
windowManager.defaultDisplay.getMetrics(displayMetrics)
// 方法 2:获取整个屏幕的物理尺寸(包括状态栏和导航栏)
// windowManager.defaultDisplay.getRealMetrics(displayMetrics)
val screenWidthPx = displayMetrics.widthPixels // 屏幕宽度(像素)
val screenHeightPx = displayMetrics.heightPixels // 屏幕高度(像素)
val density = displayMetrics.density // 逻辑密度(1.0 = mdpi, 2.0 = xhdpi
val densityDpi = displayMetrics.densityDpi // 屏幕 DPI 分类(160 = mdpi, 320 = xhdpi
val xdpi = displayMetrics.xdpi // 物理水平 DPI
val ydpi = displayMetrics.ydpi // 物理垂直 DPI
// 打印信息
Timber.d("$tag 屏幕信息")
Timber.d("屏幕分辨率(像素): ${screenWidthPx}x${screenHeightPx}")
Timber.d("逻辑密度: $density")
Timber.d("DPI 分类: $densityDpi")
Timber.d("物理 DPI (x/y): $xdpi / $ydpi")
// 计算屏幕物理尺寸(英寸)
val screenWidthInches = screenWidthPx / xdpi
val screenHeightInches = screenHeightPx / ydpi
val diagonalInches = sqrt(
(screenWidthInches * screenWidthInches + screenHeightInches * screenHeightInches).toDouble()
)
Timber.d(
"屏幕物理尺寸(英寸): %.1f x %.1f (对角线: %.1f\")".format(
screenWidthInches, screenHeightInches, diagonalInches
)
)
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 KiB

After

Width:  |  Height:  |  Size: 172 KiB

@@ -82,7 +82,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="566dp"
android:layout_marginTop="586dp"
android:text="请正视屏幕"
android:textColor="#ffece7d0"
android:textSize="24sp"