物体检测
包名:com.miex.swust.rectsDetect 类名:MiexSwustRectsDetect
1. 导入模块
- 通过开发软件的import Module导入rectsDetect包
- 添加build.gradle依赖
implementation project(path:":rectsDetect")
implementation 'com.google.android.gms:play-services-tasks:17.2.1'
implementation 'com.google.mlkit:face-detection:16.1.2'
2. 创建一个实例
通过以下方式创建一个实例: MiexSwustRectsDetect msrd=new MiexSwustRectsDetect(model_name);; model_name:在使用物体检测时,你可以选择不同效果和性能的模型,当然不同模型的运算结果也是不同的,建议开发时始终保持指定的模型,现在可选的model_name: "face":一个检测人脸的检测器 比如创建一个人脸检测: MiexSwustRectsDetect msrd=new MiexSwustRectsDetect("face");;
3. 获取人脸检测结果
//使用实例进行face检测
Task<List<Face>> result= msrd.mlkitLocation(bitmap).addOnSuccessListener(
new OnSuccessListener<List<Face>>() {
@Override
public void onSuccess(List<Face> faces) {
// Task completed successfully
for(Face face:faces){
Rect bounds = face.getBoundingBox();
// bounds:描述了包含人脸的矩形框信息
}
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
}
});
特征提取
包名:com.miex.swust.tensorFeature 类名:MiexSwustTensorFeature
1. 导入模块
- 通过开发软件的import Module导入tensorFeature包
- 添加build.gradle依赖
implementation project(path:":tensorFeature")
implementation 'com.google.android.gms:play-services-tasks:17.2.1'
2. 创建一个实例
通过以下方式创建一个实例: MiexSwustTensorFeature mstf = new MiexSwustTensorFeature(context, model_name); model_name:在使用特征提取时,你可以选择不同效果和性能的模型,当然不同模型的运算结果也是不同的,建议开发时始终保持指定的模型,现在可选的model_name: "he-face-feature-low-128t":该模型将返回128维数组,在ifw数据集达到98%精度
比如创建一个人脸特征的对象: MiexSwustTensorFeature mstf = new MiexSwustTensorFeature(MainActivity.this, "he-face-feature-low-128t");
3. 获取人脸特征数据
MiexSwustTensorFeature提供了三种方式获取人脸特征数据:
float[] features=mstf.getFeature_rt(bitmap)
mstf.getFeature_callback(bitmap,new CompletionCallback(){
@Override
public void onCompletion(int statusCode,float[] features,String msg){
// statusCode:300 failed;200 success
// features:face features
}
});
mstf.getFeature_task(bitmap)
.addOnSuccessListener(new OnSuccessListener<float[]>() {
@Override
public void onSuccess(@NonNull @NotNull float[] features) {
// onSuccess
}})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull @NotNull Exception e) {
// onFailure
}});
上述三种方法都需要传入一个bitmap参数,该bitmap是一个包含人脸的图像数据,因为是获取人脸特征,所以为了精度该bitmap应该仅包括含人脸的区域。
表情识别
包名:com.miex.swust.tensoremotions 类名:MiexSwustTensorEmotions
1. 导入模块
- 通过开发软件的import Module导入tensorEmotions包
- 添加build.gradle依赖
implementation project(path:":tensorEmotions")
implementation 'com.google.android.gms:play-services-tasks:17.2.1'
2. 创建一个实例
通过以下方式创建一个实例: MiexSwustTensorEmotions mste = new MiexSwustTensorEmotions(context, model_name); model_name:在使用人脸表情识别时,你可以选择不同效果和性能的模型,当然不同模型的运算结果也是不同的,建议开发时始终保持指定的模型,现在可选的model_name: "he-face-feature-low-128t":该模型将返回128维数组,在ifw数据集达到98%精度
比如创建一个人脸特征的对象: MiexSwustTensorFeature mstf = new MiexSwustTensorFeature(MainActivity.this, "he-face-feature-low-128t");
3. 获取人脸表情识别结果
MiexSwustTensorEmotions:
float[] results=mste.getEmotions_rt(bitmap);
mste.getEmotions_task(bitmap)
.addOnSuccessListener(new OnSuccessListener<float[]>() {
@Override
public void onSuccess(float[] results) {
// onSuccess
}})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// onFailure
}});
上述两种方法都需要传入一个bitmap参数,该bitmap是一个包含人脸的图像数据,因为是获取人脸特征,所以为了精度该bitmap应该仅包括含人脸的区域。
人脸关键点
包名:com.miex.swust.tensorkeypoints 类名:MiexSwustTensorKeypoints
1. 导入模块
- 通过开发软件的import Module导入tensorKeypoints包
- 添加build.gradle依赖
implementation project(path:":tensorKeypoints")
implementation 'com.google.android.gms:play-services-tasks:17.2.1'
2. 创建一个实例
通过以下方式创建一个实例: MiexSwustTensorKeypoints mstk = new MiexSwustTensorKeypoints(context, model_name); model_name:在使用人脸表情识别时,你可以选择不同效果和性能的模型,当然不同模型的运算结果也是不同的,建议开发时始终保持指定的模型,现在可选的model_name: "he-face-landmark-low-136t":该模型将返回136个整数,表示共68个关键点
比如创建一个人脸特征的对象:
MiexSwustTensorKeypoints mstk=new MiexSwustTensorKeypoints(MainActivity_landmark.this,"he-face-landmark-low-136t");
3. 获取人脸关键点位置
int[] results=mstk.getKeypoints_rt(bitmap);
mstk.getKeypoints_task(bitmap)
.addOnSuccessListener(new OnSuccessListener<int[]>() {
@Override
public void onSuccess(int[] results) {
Log.e("","");
// onSuccess
}})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// onFailure
}});
上述两种方法都需要传入一个bitmap参数,该bitmap是一个包含人脸的图像数据,为了精度该bitmap应该仅包括含人脸的区域。
|