Procházet zdrojové kódy

:seedling: 整合人脸SDK

everywindchase před 10 měsíci
rodič
revize
641a964fbf

+ 1 - 1
app/build.gradle

@@ -10,7 +10,7 @@ android {
         applicationId "com.ethan.psbc"
         minSdk libs.versions.minSdk.get().toInteger()
         targetSdk libs.versions.compileSdk.get().toInteger()
-        versionCode 47
+        versionCode 50
         versionName "1.1.6"
         setProperty('archivesBaseName', "PSBC-$versionName-$versionCode-" + (new Date()).format('yyyyMMdd'))
         ndk { abiFilters    "armeabi","x86","x86_64","armeabi-v7a","arm64-v8a" }

+ 4 - 2
app/src/main/assets/CWModels/_configs_frontend_x86_arm.xml

@@ -1,6 +1,8 @@
 <?xml version="1.0"?>
 <opencv_storage>
+
     <VIP_Frontend>
+
         <Face_INIT_Params>
 
             <Worker_Num>3</Worker_Num>
@@ -49,9 +51,9 @@
 
             <Image_Preprocess_Mode>0</Image_Preprocess_Mode>
 
-            <ImgAligned_Color_Mode>2</ImgAligned_Color_Mode>
+            <ImgAligned_Color_Mode>1</ImgAligned_Color_Mode>
 
-            <Fake_Face_Filter_Aggregate>0</Fake_Face_Filter_Aggregate>
+            <Fake_Face_Filter_Aggregate>0.</Fake_Face_Filter_Aggregate>
 
             <face_filter_over_small>1</face_filter_over_small>
 

+ 1 - 1
app/src/main/java/com/ethan/psbc/managers/impls/ImplPreferencesManager.kt

@@ -14,7 +14,7 @@ internal class ImplPreferencesManager : IPreferencesManager, KoinComponent {
     private val context: Context by inject()
     private val defaultSharedPreferences: SharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context)
     override var serverIp: String
-        get() = defaultSharedPreferences.getString("serverIp", "172.16.10.34")!!
+        get() = defaultSharedPreferences.getString("serverIp", "172.16.10.42")!!
         set(value) = defaultSharedPreferences.edit().putString("serverIp", value).apply()
 
     override var serverPort: Int

+ 42 - 24
app/src/main/java/com/ethan/psbc/managers/impls/retrofit/INetworkMain.kt

@@ -1,31 +1,14 @@
 package com.ethan.psbc.managers.impls.retrofit
 
 import com.ethan.psbc.managers.impls.retrofit.enums.NetworkMainEnumType
-import com.ethan.psbc.managers.impls.retrofit.requests.NetworkMainRequestBusinessFlowEscortTaskAdd
-import com.ethan.psbc.managers.impls.retrofit.requests.NetworkMainRequestBusinessFlowEscortTaskHandoverCurrentNode
-import com.ethan.psbc.managers.impls.retrofit.requests.NetworkMainRequestBusinessFlowEscortTaskQueryCurrentNode
-import com.ethan.psbc.managers.impls.retrofit.requests.NetworkMainRequestBusinessFlowEscortTaskQueryCurrentProcessor
-import com.ethan.psbc.managers.impls.retrofit.requests.NetworkMainRequestLogin
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseBusinessBoxInfoByBoxNo
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseBusinessBoxInfoForDept
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseBusinessFlowEscortTask
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseBusinessFlowEscortTaskFinishHandover
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseBusinessFlowEscortTaskList
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseBusinessFlowEscortTaskQueryCurrentProcessor
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseBusinessFlowEscortTaskWaitHandover
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseEmpty
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseInfo
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseLogin
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseUserDeliverList
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseUserRefreshToken
-import com.ethan.psbc.managers.impls.retrofit.responses.NetworkMainResponseVersionInfo
+import com.ethan.psbc.managers.impls.retrofit.requests.*
+import com.ethan.psbc.managers.impls.retrofit.responses.*
+import com.google.gson.annotations.SerializedName
 import io.reactivex.rxjava3.core.Single
-import retrofit2.http.Body
-import retrofit2.http.GET
-import retrofit2.http.Headers
-import retrofit2.http.POST
-import retrofit2.http.Path
-import retrofit2.http.Query
+import okhttp3.ResponseBody
+import retrofit2.Call
+import retrofit2.http.*
+import java.io.Serializable
 
 interface INetworkMain {
 
@@ -133,4 +116,39 @@ interface INetworkMain {
     @Headers(value = ["charset: UTF-8", "Content-Type: application/json"])
     fun businessFlowEscortTaskQueryTaskMsg(@Query("taskType") taskType: NetworkMainEnumType): Single<NetworkMainResponseEmpty>
 
+    @GET(value = "/system/userFaceStore/list")
+    @Headers(value = ["charset: UTF-8", "Content-Type: application/json"])
+    fun userFaceStoreList(@Query("id") id:Int):Single<UserFaceStoreListResp>
+
+    @Streaming
+   @GET(value = "{imageUrl}")
+    fun userFaceImage(@Path(value = "imageUrl", encoded = true) imageUrl:String):Call<ResponseBody>
+
+
+
+    data class UserFaceStoreListResp(
+        @SerializedName("total")
+        var total: Int,
+        @SerializedName("rows")
+        var rows: List<RowsData>,
+        @SerializedName("code")
+        var code: Int,
+        @SerializedName("msg")
+        var msg: String
+    ){
+
+        data class RowsData(
+            @SerializedName("id")
+            var id: Int,
+            @SerializedName("userId")
+            var userId: Int,
+            @SerializedName("userName")
+            var userName: String,
+            @SerializedName("aligneddata")
+            var aligneddata: String,
+            @SerializedName("alignedpic")
+            var alignedpic: String
+        ): Serializable
+
+    }
 }

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 9 - 0
app/src/main/java/com/ethan/psbc/ui/dialogs/DialogValidateFace.kt


+ 125 - 0
app/src/main/java/com/ethan/psbc/ui/widget/CameraFocusView.kt

@@ -0,0 +1,125 @@
+package com.ethan.psbc.ui.widget
+
+import android.content.Context
+import android.graphics.Canvas
+import android.graphics.Color
+import android.graphics.Paint
+import android.graphics.RectF
+import android.os.Handler
+import android.util.AttributeSet
+import android.util.TypedValue
+import android.view.View
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.qmuiteam.qmui.util.QMUIDisplayHelper.getDisplayMetrics
+
+
+class CameraFocusView(context: Context?,attrs: AttributeSet?) : View(context,attrs) {
+
+    private var focusSize = 0 //焦点框的大小
+    private var focusColor = 0 //焦点框的颜色
+    private var focusTime = 0 //焦点框显示的时长
+    private var focusStrokeSize = 0 //焦点框线条的尺寸
+    private var cornerSize = 0 //焦点框圆角尺寸
+    private var handler: Handler? = null
+    private var runnable: Runnable? = null
+    private var mPaint: Paint? = null
+    private var rect: RectF? = null
+
+
+
+    init {
+        if (context != null) {
+            init(context)
+        }
+}
+
+
+
+
+
+
+    private fun init(context: Context) {
+        handler = Handler()
+        mPaint = Paint(Paint.ANTI_ALIAS_FLAG)
+        rect = RectF()
+        runnable = Runnable {
+            hideFocusView()
+        }
+    }
+
+    fun setParam(
+        focusViewSize: Int, focusViewColor: Int, focusViewTime: Int,
+        focusViewStrokeSize: Int, cornerViewSize: Int
+    ) {
+        if (focusViewSize == -1) {
+            this.focusSize = dp2px(context, 60F)
+        } else {
+            this.focusSize = focusViewSize
+        }
+
+        if (focusViewColor == -1) {
+            this.focusColor = Color.GREEN
+        } else {
+            this.focusColor = focusViewColor
+        }
+        this.focusTime = focusViewTime
+
+        if (focusViewStrokeSize == -1) {
+            this.focusStrokeSize = dp2px(context, 2F)
+        } else {
+            this.focusStrokeSize = focusViewStrokeSize
+        }
+
+        if (cornerViewSize == -1) {
+            this.cornerSize = focusSize / 5
+        } else {
+            this.cornerSize = cornerViewSize
+        }
+
+        mPaint!!.style = Paint.Style.STROKE
+        mPaint!!.strokeWidth = focusStrokeSize.toFloat()
+        mPaint!!.color = focusColor
+        rect!!.top = 0f
+        rect!!.left = rect!!.top
+        rect!!.bottom = focusSize.toFloat()
+        rect!!.right = rect!!.bottom
+    }
+
+    fun showFocusView(x: Int, y: Int) {
+        visibility = VISIBLE
+        val layoutParams = layoutParams as ConstraintLayout.LayoutParams
+        layoutParams.leftMargin = x - focusSize / 2
+        layoutParams.topMargin = y - focusSize / 2
+        setLayoutParams(layoutParams)
+        invalidate()
+        runnable?.let { handler?.postDelayed(it, (focusTime * 1000).toLong()) }
+    }
+
+    fun hideFocusView() {
+        visibility = GONE
+        runnable?.let { handler?.removeCallbacks(it) }
+    }
+
+    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+        setMeasuredDimension(focusSize, focusSize)
+    }
+
+    override fun onDraw(canvas: Canvas) {
+        super.onDraw(canvas)
+        canvas.drawRoundRect(rect!!, cornerSize.toFloat(), cornerSize.toFloat(), mPaint!!)
+    }
+
+    override fun onDetachedFromWindow() {
+        runnable?.let { handler?.removeCallbacks(it) }
+        super.onDetachedFromWindow()
+    }
+
+
+
+    fun dp2px(mContext:Context,   dipValue:Float) : Int {
+        return  TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, getDisplayMetrics(mContext)).toInt()
+    }
+
+
+
+}

+ 11 - 0
app/src/main/res/layout/dialog_validate_face.xml

@@ -17,6 +17,17 @@
         android:background="@color/qmui_s_transparent"  >
 
 
+        <!--显示焦点的框-->
+        <com.ethan.psbc.ui.widget.CameraFocusView
+            android:id="@+id/focus_view"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:visibility="gone"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <!--相机预览界面-->
         <androidx.camera.view.PreviewView
             android:id="@+id/mPreviewView"
             android:layout_width="0dp"

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů