使用视觉谷歌服务未检测到脸部

时间:2015-12-06 03:09:39

标签: android face-detection vision

https://developers.google.com/android/reference/com/google/android/gms/vision/face/FaceDetector.Builder

我在我的应用中使用上述Google服务进行人脸检测。我确保我的手机有最低限度的谷歌播放服务版本,在我的手机上是8.3,但我仍然无法让脸部检测工作!我通过在我的eclipse项目中导入google play库来导入库....这是代码:

           @Override
        protected void onPreExecute() 
        {
            detector = new FaceDetector.Builder(MainContext)
            .setTrackingEnabled(false)
            //.setProminentFaceOnly(true)
            .setLandmarkType(FaceDetector.ALL_LANDMARKS) //required
            .build();   
        }

private void detectTheFace(Bitmap converted) 
            {

                Frame frame = new Frame.Builder().setBitmap(converted).build();
                faces = detector.detect(frame);
             }   

我不知道是否有必要转换用于检测面部的位图必须是RGB_565配置,但无论如何我都做了。我尝试使用和不更改RGB配置,它产生相同的结果。基本上,面部稀疏数组的大小为0意味着它不会检测到面部....顺便提一下上面的代码,我正在异步任务中执行面部检测,因为我想在后台运行它。

2 个答案:

答案 0 :(得分:2)

我有同样的问题,即。它在nexus上工作得很好但在星系中却没有。我通过将位图旋转到90度解决了这个问题,如果detect.detect()方法给出零大小的面。所以在调用detector.detect()后最大重试次数是3次,因为第4次旋转会给你相同的位图。

Bitmap rotateBitmap(Bitmap bitmapToRotate) {

        Matrix matrix = new Matrix();

        matrix.postRotate(90);

        Bitmap rotatedBitmap = Bitmap.createBitmap(bitmapToRotate, 0, 0,
                bitmapToRotate.getWidth(), bitmapToRotate.getHeight(), matrix,
                true);
        return rotatedBitmap;

    } 

检查通过detector.detect()返回的面是否为零,然后运行下面的代码。

if(!faces.size()>0){
if (rotationCounter < 3) {
                    rotationCounter++;
                   bitmap= rotateBitmap(bitmapToRotate);
//again call detector.detect() here
                                    }

}

您无需编写上述代码即可检查是否需要旋转位图。从您的原始代码开始,代码尝试以横向模式捕获图像,或者只是将图像旋转到90度并捕获它。

答案 1 :(得分:-1)

要解决此问题,请使用照片EXIF中的方向指定。