搭載Google MLKit,Android應(yīng)用快速實(shí)現(xiàn)人臉檢測(cè)功能
ML Kit
ML Kit是Google提供的機(jī)器學(xué)習(xí)SDK,包含了一系列預(yù)訓(xùn)練模型,可以在Android和iOS應(yīng)用中快速添加機(jī)器學(xué)習(xí)功能。ML Kit工具包將谷歌在機(jī)器學(xué)習(xí)方面的專業(yè)知識(shí)帶給了普通的移動(dòng)應(yīng)用開發(fā)者,可以借助ML Kit在幾行代碼中實(shí)現(xiàn)所需的功能。
ML Kit的功能非常全面且易于使用,提供了基于API的現(xiàn)有解決方案,如文字識(shí)別、條碼識(shí)別、圖像標(biāo)簽、人臉檢測(cè)、對(duì)象檢測(cè)等。同時(shí),還提供了便利的API,允許在移動(dòng)應(yīng)用中使用自定義的TensorFlow Lite模型。
ML Kit針對(duì)移動(dòng)設(shè)備進(jìn)行了優(yōu)化,使得機(jī)器學(xué)習(xí)套件的處理過程可以在設(shè)備上進(jìn)行,保證了快速性,并解鎖了處理相機(jī)輸入等實(shí)時(shí)用例的能力。即使在離線狀態(tài)下,也可以使用這項(xiàng)功能來處理需要保留在設(shè)備上的圖片和文本。
MLKit人臉檢測(cè)
人臉檢測(cè)API可以檢測(cè)圖片中的人臉、識(shí)別主要的面部特征,并獲取檢測(cè)到的人臉的輪廓。只能用于檢測(cè)人臉,不識(shí)別人臉。
借助人臉檢測(cè),可以用于(如美化自拍照和肖像,或根據(jù)用戶的照片生成頭像)等場(chǎng)景。同時(shí)支持實(shí)時(shí)執(zhí)行人臉檢測(cè),可以用在視頻聊天或響應(yīng)玩家表情的游戲等應(yīng)用場(chǎng)景。
mlkit:face-detection主要功能
- 「識(shí)別和定位面部特征」 獲取檢測(cè)到的每個(gè)人臉的眼睛、耳朵、臉頰、鼻子和嘴巴的坐標(biāo)。
- 「獲取面部特征的輪廓」 獲取檢測(cè)到的面部的輪廓及其眼睛、眉毛、嘴唇和鼻子。
- 「識(shí)別面部表情」 確定人物是在微笑還是閉著眼睛。
- 「跨視頻幀跟蹤人臉」 獲取每個(gè)檢測(cè)到的唯一身份人臉的標(biāo)識(shí)符。標(biāo)識(shí)符在不同調(diào)用中保持一致,因此您可以對(duì)視頻流中的特定人員執(zhí)行圖片處理。
- 「實(shí)時(shí)處理視頻幀」:人臉檢測(cè)在設(shè)備上執(zhí)行,其速度足以在視頻處理等實(shí)時(shí)應(yīng)用中使用。
- 添加依賴
dependencies {
// ...
// Use this dependency to bundle the model with your app
implementation 'com.google.mlkit:face-detection:16.1.6'
//在 Google Play 服務(wù)中使用該模型
implementation 'com.google.android.gms:play-services-mlkit-face-detection:17.1.0'
}
- 配置人臉檢測(cè)器 使用的圖片尺寸至少為 480x360 像素。為了機(jī)器學(xué)習(xí)套件準(zhǔn)確檢測(cè)人臉,輸入圖片必須包含由足夠像素?cái)?shù)據(jù)表示的人臉。在圖片中檢測(cè)的每張人臉應(yīng)至少為 100x100 像素。如果想檢測(cè)人臉的輪廓,機(jī)器學(xué)習(xí)套件需要更高的分辨率輸入:每張人臉應(yīng)至少為 200x200 像素。
圖片
// 1、配置人臉檢測(cè)器
FaceDetectorOptions faceDetectorOptions = new FaceDetectorOptions.Builder().setPerformanceMode(PERFORMANCE_MODE_FAST).build();
//2、獲取人臉檢測(cè)器
FaceDetector detector = FaceDetection.getClient(faceDetectorOptions);
- 加載圖片資源 檢測(cè)圖片中的人臉,創(chuàng)建InputImage對(duì)象:Bitmap、media.Image、ByteBuffer、字節(jié)數(shù)組或文件。將InputImage對(duì)象傳遞給FaceDetector的process方法。
// 3、從資源中加載圖片
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test3);
imgView.setImageBitmap(bitmap);
InputImage image = InputImage.fromBitmap(bitmap, 0);
- 調(diào)用人臉檢測(cè)器
// 4、處理圖片
detector.process(image).addOnSuccessListener(new OnSuccessListener<List<Face>>() {
@Override
public void onSuccess(List<Face> faces) {
Log.e("TAG", "onSuccess: " + 1);
imgView.setImageBitmap(drawWithRectangle(faces));
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(this, "識(shí)別失敗", Toast.LENGTH_SHORT).show();
}
});
- 繪制矩形邊框
private Bitmap drawWithRectangle(List<Face> faces) {
//復(fù)制一個(gè)新的Bitmap
Bitmap copiedBitmap = bitmap.copy(bitmap.getConfig(), true);;
for (Face face : faces) {
//獲取邊界狀態(tài)
Rect bounds = face.getBoundingBox();
// 初始化Paint
Paint paint = new Paint();
// 設(shè)置矩形顏色
paint.setColor(Color.BLUE);
// 設(shè)置繪制樣式為輪廓繪制
paint.setStyle(Paint.Style.STROKE);
// 設(shè)置為你需要的寬度
paint.setStrokeWidth(10);
Canvas canvas = new Canvas(copiedBitmap);
canvas.drawRect(bounds, paint);
}
return copiedBitmap;
}
圖片
完整示例代碼:https://github.com/Reathin/Sample-Android (module_mlkit)