|
@@ -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) {
|
|
|
|