Android Firebase ML套件无法检测人脸

Android Firebase ML套件无法检测人脸,android,firebase,firebase-mlkit,Android,Firebase,Firebase Mlkit,我正在使用谷歌Firebase的ML工具包检测从手机摄像头捕获的图像的面部轮廓。然而,它实际上并没有检测到任何人脸。我已经通过在ImageView中显示图像来验证图像是否已从相机中正确捕获和保存。我还确保添加 <meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="face"/> 到应用程序的build.gradle 以下是Firebase代码: Fir

我正在使用谷歌Firebase的ML工具包检测从手机摄像头捕获的图像的面部轮廓。然而,它实际上并没有检测到任何人脸。我已经通过在ImageView中显示图像来验证图像是否已从相机中正确捕获和保存。我还确保添加

 <meta-data android:name="com.google.android.gms.vision.DEPENDENCIES" android:value="face"/>
到应用程序的build.gradle

以下是Firebase代码:

        FirebaseApp.initializeApp(context);
        FirebaseVisionFaceDetectorOptions realTimeOpts =
                new FirebaseVisionFaceDetectorOptions.Builder()
                        .setPerformanceMode(FirebaseVisionFaceDetectorOptions.ACCURATE)
                        .setContourMode(FirebaseVisionFaceDetectorOptions.ALL_CONTOURS)
                        .build();

        fbImage = FirebaseVisionImage.fromBitmap(portrait);


        FirebaseVisionFaceDetector detector = FirebaseVision.getInstance()
                .getVisionFaceDetector(realTimeOpts);

        Task<List<FirebaseVisionFace>> result =
                detector.detectInImage(fbImage)
                        .addOnSuccessListener(
                                new OnSuccessListener<List<FirebaseVisionFace>>() {
                                    @Override
                                    public void onSuccess(List<FirebaseVisionFace> faces) {

                                        Log.d(TAG, "No. Faces Detected: " + faces.size());


                                    }
                                })
                        .addOnFailureListener(
                                new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Log.d(TAG, e.getMessage());
                                    }
                                });
FirebaseApp.initializeApp(上下文);
FireBaseVisionFaceDetector选项实时选项=
新的FirebaseVisionFaceDetectorOptions.Builder()
.setPerformanceMode(FireBaseVisionFaceDetector选项。精确)
.setContourMode(FirebaseVisionFaceDetectorOptions.ALL_轮廓)
.build();
fbImage=FirebaseVisionImage.fromBitmap(纵向);
FirebaseVisionFaceDetector=FirebaseVision.getInstance()
.getVisionFaceDetector(实时选项);
任务结果=
检测器。检测图像(fbImage)
.addOnSuccessListener(
新OnSuccessListener(){
@凌驾
成功时的公共无效(列表面){
Log.d(标记“检测到的面数:”+Faces.size());
}
})
.addOnFailureListener(
新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
Log.d(标记,例如getMessage());
}
});

有人知道为什么这可能检测不到任何东西吗?

我最近遇到过这个问题。我的解决方案是声明特定的面孔。然后使用清单声明要识别的所有面。以下是这样做的链接:

给你

这实际上不是Firebase的问题,而是图像的问题。显然,三星旋转了拍摄图像的方向,Firebase无法检测到人脸,因为它旋转了90度。通过简单地将图像旋转回纵向来修复此问题

这就是我使用的网站,也是我获得上述代码的地方。你能说得更具体些吗?
        FirebaseApp.initializeApp(context);
        FirebaseVisionFaceDetectorOptions realTimeOpts =
                new FirebaseVisionFaceDetectorOptions.Builder()
                        .setPerformanceMode(FirebaseVisionFaceDetectorOptions.ACCURATE)
                        .setContourMode(FirebaseVisionFaceDetectorOptions.ALL_CONTOURS)
                        .build();

        fbImage = FirebaseVisionImage.fromBitmap(portrait);


        FirebaseVisionFaceDetector detector = FirebaseVision.getInstance()
                .getVisionFaceDetector(realTimeOpts);

        Task<List<FirebaseVisionFace>> result =
                detector.detectInImage(fbImage)
                        .addOnSuccessListener(
                                new OnSuccessListener<List<FirebaseVisionFace>>() {
                                    @Override
                                    public void onSuccess(List<FirebaseVisionFace> faces) {

                                        Log.d(TAG, "No. Faces Detected: " + faces.size());


                                    }
                                })
                        .addOnFailureListener(
                                new OnFailureListener() {
                                    @Override
                                    public void onFailure(@NonNull Exception e) {
                                        Log.d(TAG, e.getMessage());
                                    }
                                });