package com.yw.sdkdemo.face; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import com.yw.face.FaceLiveManager; import com.yw.face.FaceLiveResult; import com.yw.face.FaceManager; import com.yw.face.IFaceLiveResultBack; import com.yw.face.IFaceResultBack; import com.yw.face.RecognizeResult; import com.yw.face.RegisterResult; import com.yw.sdkdemo.R; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by xushuang on 2024/5/10 * E-mail: mitgic92@gmail.com * Description: */ public class FaceActivity extends AppCompatActivity implements View.OnClickListener, IFaceResultBack, IFaceLiveResultBack { private Button bt_register; private Button bt_recognize; private Button bt_stop_recognize; private Button bt_register_recognize; private Button bt_face_live; private Button bt_face_live_stop; ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); private static final String TAG = FaceActivity.class.getSimpleName(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_face); initView(); initListener(); FaceManager.getInstance().init(this); FaceManager.getInstance().registerListen(this); FaceLiveManager.getInstance().init(this); FaceLiveManager.getInstance().registerListen(this); } private void initView() { bt_register = (Button) findViewById(R.id.bt_register); bt_recognize = (Button) findViewById(R.id.bt_recognize); bt_register_recognize = (Button) findViewById(R.id.bt_register_recognize); bt_stop_recognize = (Button) findViewById(R.id.bt_stop_recognize); bt_face_live = (Button) findViewById(R.id.bt_face_live); bt_face_live_stop = (Button) findViewById(R.id.bt_face_live_stop); } private void initListener() { bt_register.setOnClickListener(this); bt_recognize.setOnClickListener(this); bt_register_recognize.setOnClickListener(this); bt_stop_recognize.setOnClickListener(this); bt_face_live.setOnClickListener(this); bt_face_live_stop.setOnClickListener(this); } @Override protected void onDestroy() { super.onDestroy(); FaceManager.getInstance().unRegisterListen(this); FaceLiveManager.getInstance().unRegisterListen(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_register: FaceManager.getInstance().startRegister("sdcard/pnd/certificate/"); break; case R.id.bt_recognize: FaceManager.getInstance().startRecognize(0);//参数为camera id break; case R.id.bt_stop_recognize: FaceManager.getInstance().stopRecognize(); break; case R.id.bt_register_recognize: FaceManager.getInstance().startRegAndRec(0, "sdcard/pnd/certificate/"); break; case R.id.bt_face_live: FaceLiveManager.getInstance().startFaceLive(0);//cameraID break; case R.id.bt_face_live_stop: FaceLiveManager.getInstance().stopDetectFaceLive();//cameraID break; } } @Override public void recognizeFace(RecognizeResult result) { runOnUiThread(new Runnable() { @Override public void run() { String text = ""; if (result.isSuccess) { text = "识别成功,识别人:" + result.name + ",相似度:" + result.similar; } else { text = "识别失败"; } Toast.makeText(FaceActivity.this, text, Toast.LENGTH_SHORT).show(); } }); } @Override public void faceNumber(int num, List list) { runOnUiThread(new Runnable() { @Override public void run() { String text = ""; if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { RecognizeResult recognizeResult = list.get(i); text = text + "姓名:" + recognizeResult.name + ",相似度:" + recognizeResult.similar; } text = "识别到:" + list.size() + "个人," + text; } if (!TextUtils.isEmpty(text)) { Toast.makeText(FaceActivity.this, text, Toast.LENGTH_SHORT).show(); } } }); } @Override public void registerFace(RegisterResult result) { runOnUiThread(new Runnable() { @Override public void run() { if (result != null) { Log.d(TAG, "registerFace: " + result.toString()); String date = ""; Map registerResults = result.registerResults; for (Map.Entry entry : registerResults.entrySet()) { String key = entry.getKey();//姓名 Boolean value = entry.getValue();//是否注册成功 if (!value) { date = date + "," + key; } } if (TextUtils.isEmpty(date)) { Toast.makeText(FaceActivity.this, " 注册完成", Toast.LENGTH_LONG).show(); } else { Toast.makeText(FaceActivity.this, " 注册完成,其中 (" + date + " )注册失败", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(FaceActivity.this, " 注册异常", Toast.LENGTH_LONG).show(); } } }); } @Override public void detectFaceLiveResult(FaceLiveResult faceLiveResult) { cachedThreadPool.execute(new Runnable() { @Override public void run() { StringBuilder resultStr = new StringBuilder(" 活体结果: "); Log.d(TAG, "detectFaceLiveResult: " + faceLiveResult.toString()); if (faceLiveResult.liveType == 0) { resultStr.append("非活体"); } else if (faceLiveResult.liveType == 1) { resultStr.append("活体"); } else if (faceLiveResult.liveType == 2) { resultStr.append("无效"); } resultStr.append("====人脸结果 "); if (faceLiveResult.retCode == 0) { resultStr.append("left=" + faceLiveResult.leftName+": score:"+faceLiveResult.leftScore + " , right:" + faceLiveResult.rightName+": score:"+faceLiveResult.rightScore); } else if (faceLiveResult.retCode == 1) { resultStr.append("未注册人脸信息"); } else if (faceLiveResult.retCode == 2) { resultStr.append("未检测到人脸"); } runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(FaceActivity.this, resultStr.toString(), Toast.LENGTH_LONG).show(); } }); } }); } }