ML Kit
ML Kit是Google提供的机器学习SDK,包含了一系列预训练模型,可以在Android和iOS应用中快速添加机器学习功能。ML Kit工具包将谷歌在机器学习方面的专业知识带给了普通的移动应用开发者,可以借助ML Kit在几行代码中实现所需的功能。
ML Kit的功能非常全面且易于使用,提供了基于API的现有解决方案,如文字识别、条码识别、图像标签、人脸检测、对象检测等。同时,还提供了便利的API,允许在移动应用中使用自定义的TensorFlow Lite模型。
ML Kit针对移动设备进行了优化,使得机器学习套件的处理过程可以在设备上进行,保证了快速性,并解锁了处理相机输入等实时用例的能力。即使在离线状态下,也可以使用这项功能来处理需要保留在设备上的图片和文本。
MLKit人脸检测
人脸检测API可以检测图片中的人脸、识别主要的面部特征,并获取检测到的人脸的轮廓。只能用于检测人脸,不识别人脸。
借助人脸检测,可以用于(如美化自拍照和肖像,或根据用户的照片生成头像)等场景。同时支持实时执行人脸检测,可以用在视频聊天或响应玩家表情的游戏等应用场景。
mlkit:face-detection主要功能
- 「识别和定位面部特征」 获取检测到的每个人脸的眼睛、耳朵、脸颊、鼻子和嘴巴的坐标。
- 「获取面部特征的轮廓」 获取检测到的面部的轮廓及其眼睛、眉毛、嘴唇和鼻子。
- 「识别面部表情」 确定人物是在微笑还是闭着眼睛。
- 「跨视频帧跟踪人脸」 获取每个检测到的唯一身份人脸的标识符。标识符在不同调用中保持一致,因此您可以对视频流中的特定人员执行图片处理。
- 「实时处理视频帧」:人脸检测在设备上执行,其速度足以在视频处理等实时应用中使用。
- 添加依赖
dependencies {
// ...
// Use this dependency to bundle the model with your app
implementation 'com.google.mlkit:face-detection:16.1.6'
//在 Google Play 服务中使用该模型
implementation 'com.google.android.gms:play-services-mlkit-face-detection:17.1.0'
}
- 配置人脸检测器 使用的图片尺寸至少为 480x360 像素。为了机器学习套件准确检测人脸,输入图片必须包含由足够像素数据表示的人脸。在图片中检测的每张人脸应至少为 100x100 像素。如果想检测人脸的轮廓,机器学习套件需要更高的分辨率输入:每张人脸应至少为 200x200 像素。
图片
// 1、配置人脸检测器
FaceDetectorOptions faceDetectorOptions = new FaceDetectorOptions.Builder().setPerformanceMode(PERFORMANCE_MODE_FAST).build();
//2、获取人脸检测器
FaceDetector detector = FaceDetection.getClient(faceDetectorOptions);
- 加载图片资源 检测图片中的人脸,创建InputImage对象:Bitmap、media.Image、ByteBuffer、字节数组或文件。将InputImage对象传递给FaceDetector的process方法。
// 3、从资源中加载图片
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test3);
imgView.setImageBitmap(bitmap);
InputImage image = InputImage.fromBitmap(bitmap, 0);
- 调用人脸检测器
// 4、处理图片
detector.process(image).addOnSuccessListener(new OnSuccessListener>() {
@Override
public void onSuccess(List faces) {
Log.e("TAG", "onSuccess: " + 1);
imgView.setImageBitmap(drawWithRectangle(faces));
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();
}
});
- 绘制矩形边框
private Bitmap drawWithRectangle(List faces) {
//复制一个新的Bitmap
Bitmap copiedBitmap = bitmap.copy(bitmap.getConfig(), true);;
for (Face face : faces) {
//获取边界状态
Rect bounds = face.getBoundingBox();
// 初始化Paint
Paint paint = new Paint();
// 设置矩形颜色
paint.setColor(Color.BLUE);
// 设置绘制样式为轮廓绘制
paint.setStyle(Paint.Style.STROKE);
// 设置为你需要的宽度
paint.setStrokeWidth(10);
Canvas canvas = new Canvas(copiedBitmap);
canvas.drawRect(bounds, paint);
}
return copiedBitmap;
}
图片
完整示例代码:https://github.com/Reathin/Sample-Android (module_mlkit)