فهرست منبع

:seedling: 整合人脸SDK

everywindchase 10 ماه پیش
والد
کامیت
9f8e9178a4
1فایلهای تغییر یافته به همراه49 افزوده شده و 4 حذف شده
  1. 49 4
      app/src/main/java/com/ethan/psbc/ui/dialogs/DialogValidateFace.kt

+ 49 - 4
app/src/main/java/com/ethan/psbc/ui/dialogs/DialogValidateFace.kt

@@ -7,19 +7,20 @@ import android.util.Log
 import android.view.View
 import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
-import androidx.camera.core.Camera
-import androidx.camera.core.CameraSelector
-import androidx.camera.core.ImageCapture
-import androidx.camera.core.Preview
+import androidx.camera.core.*
 import androidx.camera.lifecycle.ProcessCameraProvider
 import androidx.core.app.ActivityCompat
 import androidx.core.content.ContextCompat
 import androidx.lifecycle.lifecycleScope
+import cn.face.sdk.FaceDetTrack
+import cn.face.sdk.FaceInterface
+import cn.face.sdk.FaceParam
 import com.ethan.psbc.R
 import com.ethan.psbc.commons.IViewOnNoDoubleClickListener
 import com.ethan.psbc.databinding.DialogValidateFaceBinding
 import com.lxj.xpopup.impl.PartShadowPopupView
 import kotlinx.coroutines.launch
+import java.nio.ByteBuffer
 import java.util.concurrent.ExecutorService
 import java.util.concurrent.Executors
 
@@ -42,6 +43,9 @@ class DialogValidateFace( val mContext: Context) : PartShadowPopupView(mContext)
     private var preview: Preview? = null
     private var imageCamera: ImageCapture? = null
     private lateinit var camera: Camera //相机对象
+    private lateinit   var imageAnalysis:ImageAnalysis
+
+    private val licence="NDYyNzA5NGE3MTUwN2RlOTdkYWFmNDU1MjkzOWE5NDU1ZTcxOTJjd2F1dGhvcml6Zdzn5ebj5+fk/OXm5+fg5ef15efn5+bj4Mfl4OXm5uvliObm6+Xm5uuR5ebm6+Xm5qLr5ebm6+Xmrubg5ufr5+v95+vn4OTk59Dk5ubr5+vn9uvn5+fn4uX+5A=="
 
 
     override fun onCreate() {
@@ -62,6 +66,9 @@ class DialogValidateFace( val mContext: Context) : PartShadowPopupView(mContext)
       val  cameraSelector: CameraSelector =CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build()
 
 
+
+
+
         cameraExecutor = Executors.newSingleThreadExecutor()
         val cameraProviderFuture = ProcessCameraProvider.getInstance(mContext)
         cameraProviderFuture.addListener({
@@ -77,6 +84,43 @@ class DialogValidateFace( val mContext: Context) : PartShadowPopupView(mContext)
                 .build()
 
 
+         imageAnalysis = ImageAnalysis.Builder()
+                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
+                .build()
+
+
+            imageAnalysis.setAnalyzer(cameraExecutor) { imageProxy ->
+                val planes: Array<ImageProxy.PlaneProxy> = imageProxy.planes
+                val buffer: ByteBuffer = planes[0].buffer;
+                val data: ByteArray = ByteArray(buffer.capacity())
+                buffer.rewind()
+                buffer.get(data)
+
+
+
+                Log.d("demo", "正在识别图像信息")
+                FaceDetTrack.getInstance()
+                val ret: Int = FaceDetTrack.cwCreateDetHandle("", licence)
+                if (ret >= FaceInterface.cw_errcode_t.CW_UNKNOWN_ERR) {
+                    Log.d("demo", "启用识别程序SDK失败")
+                } else {
+                    Log.d("demo", "启用识别程序SDK成功")
+                    val faceParam = FaceParam()
+                    FaceDetTrack.cwGetFaceParam(ret, faceParam)
+                    faceParam.minSize = 30
+                    faceParam.maxSize = 400;
+                    FaceDetTrack.cwSetFaceParam(ret, faceParam, "");
+
+                }
+
+
+
+
+                imageProxy.close()
+            }
+
+
+
             try {
                 cameraProvider?.unbindAll()//先解绑所有用例
                 camera = cameraProvider?.bindToLifecycle(
@@ -84,6 +128,7 @@ class DialogValidateFace( val mContext: Context) : PartShadowPopupView(mContext)
                     cameraSelector,
                     preview,
                     imageCamera,
+                    imageAnalysis
                 )!!//绑定用例
             } catch (e: Exception) {