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<RecognizeResult> 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<String, Boolean> registerResults = result.registerResults;
|
for (Map.Entry<String, Boolean> 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();
|
}
|
});
|
}
|
});
|
|
}
|
}
|