【问题标题】:Android: FaceDetector doesn't work. findface always detects zero face;Android:FaceDetector 不起作用。 findface 总是检测到零人脸;
【发布时间】:2012-11-04 08:19:13
【问题描述】:

我在 Android 中使用 android.media.FaceDetector 进行人脸检测时遇到问题 我尝试使用此代码检测人脸:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig =  Bitmap.Config.RGB_565;
Bitmap b = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/myimage.jpg", options);
FaceDetector fd = new FaceDetector(b.getWidth(), b.getHeight(), 1);
Face[] face = new Face[1];
int detected_face = fd.findFaces(b, face);

detected_face 始终为 0;

我尝试使用不同的图像,但得到了相同的结果。 有人可以解释一下我的代码有什么问题吗?

问候

【问题讨论】:

    标签: android bitmap face-detection


    【解决方案1】:

    下面的代码适用于我,我记得照片上的脸必须是直立的,这意味着如果在照片中有人站在他的头上,那么你必须将位图旋转 180 度,然后再将其送入FaceDetector,否则他的脸将不会被检测到)

    private void detectFaces() {
        int max = 5;
        BitmapFactory.Options bfo = new BitmapFactory.Options();
        bfo.inPreferredConfig = Bitmap.Config.RGB_565;
        bfo.inScaled = false;
        bfo.inDither = false;
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.myphoto, bfo);
        int w = bitmap.getWidth();
        int h = bitmap.getHeight();
        FaceDetector fd = new FaceDetector(w, h, max);
        Face[] faces = new Face[max];
        int c = fd.findFaces(bitmap, faces);
        for (int i=0;i<c;i++) {
            Log.d("TAG", Float.toString(faces[i].eyesDistance()));
        }
    }
    

    【讨论】:

    • 谢谢!我的问题是图像的方向。
    • 谢谢你。我错过了转换为 565 配置的过程。
    • 图像也应该根据 EXIF 信息旋转,否则将无法正常工作
    猜你喜欢
    • 2019-11-18
    • 2013-12-04
    • 2017-05-05
    • 2011-10-24
    • 2019-02-27
    • 2013-09-24
    • 2015-08-31
    • 2013-04-13
    • 2016-02-04
    相关资源
    最近更新 更多