超简单 CameraX 人脸识别效果封装
项目代码在最后面!!!!跳转到最后
本项目基于Google免费开源人脸识别库和CameraX封装实现,各Android机型兼容。
识别效果
单人脸识别效果:
- 支持识别进度,可通过参数修改识别可信度,也是识别灵敏度
- 识别进度监听,支持修改识别进度条颜色
- 提供Dialog直接调用
- 识别位置人脸框绘制
- 进度加载完成可拿到识别结果,识别结果以base64返回
多人脸识别效果:
- 支持识别进度,可通过参数修改识别可信度,也是识别灵敏度
- 支持修改识别的最大人脸数量 默认10
- 提供Dialog,Fragment调用
- 识别位置人脸框绘制
- 点击识别列表可拿到识别结果,识别结果以base64返回
项目依赖库所需要的依赖
//OCR
implementation 'com.rmtheis:tess-two:9.1.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
// CameraX core library
implementation "androidx.camera:camera-core:1.1.0-beta03"
// CameraX Camera2 extensions
implementation "androidx.camera:camera-camera2:1.1.0-beta03"
// CameraX Lifecycle library
implementation "androidx.camera:camera-lifecycle:1.1.0-beta03"
// CameraX View class
implementation "androidx.camera:camera-view:1.1.0-beta03"
//工具类
implementation 'com.blankj:utilcodex:1.31.0'
//权限
implementation 'com.github.getActivity:XXPermissions:13.6'
项目依赖库所需要的权限
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
简单调用
在git下载项目Demo代码后,可参考下方方式依赖代码进行人脸识别的调用:
使用方式和Dialog一致
单人脸Dialog调用
FaceChooseDialog faceChooseDialog=new FaceChooseDialog();
faceChooseDialog.setGetFace(new FaceChooseDialog.GetFace() {
@Override
public void getPhoto(String base64) {
Bitmap resultbitmap= Base64Utils.base64ToBitmap(base64);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
result_img.setImageBitmap(resultbitmap);
}
});
}
@Override
public void error(String msg) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(requireActivity(),msg,Toast.LENGTH_SHORT).show();
}
});
}
});
}
faceChooseDialog.show(getParentFragmentManager(),"faceChooseDialog");//这里的fragmentmanger根据实际情况传入,不要照抄
多人脸Dialog调用
FaceMultiChooseDialog faceMultiChooseDialog=new FaceMultiChooseDialog();
faceMultiChooseDialog.setGetFace(new FaceMultiChooseDialog.GetFace() {
@Override
public void getPhoto(String base64) {
Log.e("TEST","getPhoto"+base64);
Bitmap resultbitmap= Base64Utils.base64ToBitmap(base64);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
result_img.setImageBitmap(resultbitmap);
}
});
}
@Override
public void error(String msg) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(requireActivity(),msg,Toast.LENGTH_SHORT).show();
}
});
}
});
}
faceMultiChooseDialog.show(requireFragmentManager(),"faceMultiChooseDialog");//这里的fragmentmanger根据实际情况传入,不要照抄
具体实现逻辑可参阅下方项目代码
项目代码仓库
如果直接复制可能会出现代码缺陷,完整代码请去仓库下载
如果觉得还行,耽误您几秒钟的时间去我的仓库点点star,万一以后用到了呢?