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

Posted

技术标签:

【中文标题】使用视觉谷歌服务未检测到人脸【英文标题】:Face not detected using vision google service 【发布时间】:2016-03-10 21:00:51 【问题描述】:

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

我在我的应用中使用上述谷歌服务进行人脸检测。我确保我的手机具有最低的 google play 服务版本,在我的手机上是 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,这意味着它不会检测到面部……永远。顺便说一句,只是为了提供上述代码的一些上下文,我正在异步任务中执行人脸检测,因为我想在后台运行它。

【问题讨论】:

我建议检查检测器依赖项是否已准备好以及存储空间不足的情况。在此处查看示例代码中的检查:github.com/googlesamples/android-vision/blob/master/… 不,这不是问题,但感谢您的建议。我检查了它并下载了本机库,它仍然显示检测到零个面孔 日志中是否有任何错误?您可以在这里查看速度与准确性的讨论:***.com/questions/34132444/… 完全没有错误。我想也许它用来检测的位图不正确,但我也没有检查过。所以我正在对相机预览进行快照,并认为它可能完全是黑色的,但事实并非如此......当我打开图像时我看到了我的脸 尝试在您的显示器上显示图像并使用手机上的演示面部跟踪器应用程序 (github.com/googlesamples/android-vision/tree/master/…) 来查看它是否可以检测到显示的面部。如果可以,则可能是您的应用使用的图像格式、旋转或设置有问题。 【参考方案1】:

我有同样的问题,即它在nexus上运行良好,但在galaxy中却不行。我通过将位图旋转 90 度解决了这个问题,以防检测器.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;

     

检查检测器返回的人脸大小是否为零,然后应该运行下面的代码。

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


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

【讨论】:

我遇到了同样的问题,这个解决方案对我有用。【参考方案2】:

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

【讨论】:

以上是关于使用视觉谷歌服务未检测到人脸的主要内容,如果未能解决你的问题,请参考以下文章

使用位图时,Android MLKit 人脸检测未检测到人脸

Firebase 视觉人脸检测使用启发式算法 (MLK​​it) 获得人脸的紧密拟合估计

计算机视觉·OpenCV使用Haar+Cascade实现人脸检测

FPGA教程案例91机器视觉2——通过FPGA实现基于肤色模型的人脸检测,使用MATLAB辅助测试

[计算机视觉]人脸应用:人脸检测人脸对比五官检测眨眼检测活体检测疲劳检测

使用matlab机器视觉工具箱实现人脸特征的检测和定位,识别并标注眉毛,眼睛,鼻子,嘴巴