Android的Facedetector构成值始终为0 [英] Android Facedetector pose values are always 0

查看:385
本文介绍了Android的Facedetector构成值始终为0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我使用内置的 facedector 机器人探测和确定位置的面在一个位图。现在,它的工作原理,并告诉我:自信,eyesDistance和中点,但每当我试图让造成它总是返回0不管我使用的是什么形象

这是code我用得到的姿势:

  poseString =姿势:(+ getFace.pose(FaceDetector.Face.EULER_X)+,
                        + getFace.pose(FaceDetector.Face.EULER_Y)+,
                        + getFace.pose(FaceDetector.Face.EULER_Z)+);

这里是code我使用:

  arrayFaces =新FaceDetector(picWidth,picHeight,NUM_FACES);
        arrayFaces.findFaces(sourceImage,getAllFaces);        的for(int i = 0; I< getAllFaces.length;我++){
            getFace = getAllFaces [I]
            尝试{
                的PointF eyesMP =新的PointF();
                getFace.getMidPoint(eyesMP);
                poseString =姿势:(+ getFace.pose(FaceDetector.Face.EULER_X)+,
                        + getFace.pose(FaceDetector.Face.EULER_Y)+,
                        + getFace.pose(FaceDetector.Face.EULER_Z)+);
                EULER_X = getFace.EULER_X;
                EULER_Y = getFace.EULER_Y;
                EULER_Z = getFace.EULER_Z;                eyesDistance [I] = getFace.eyesDistance();
                eyesMidPts [I] = eyesMP;                如果(调试){
                    currentx = eyesMidPts [I] .X;
                    currenty = eyesMidPts [I] .Y;
                    betweeneyes = getFace.eyesDistance();                    Log.d(currentx,currentx +);
                    Log.d(currenty,currenty +);
                    Log.d(betweeneyes,betweeneyes +);
                    Log.d(欧拉,EULER_X:+ EULER_X +EULER_Y:+ EULER_Y +E​​ULER_Z:+ EULER_Z);                    Log.i(脸,我++ getFace.confidence()+
                            + getFace.eyesDistance()++姿势:(
                            + getFace.pose(FaceDetector.Face.EULER_X)+,
                            + getFace.pose(FaceDetector.Face.EULER_Y)+,
                            + getFace.pose(FaceDetector.Face.EULER_Z)+)
                            +眼睛中点:(+ eyesMidPts [I] .X +,
                            + eyesMidPts [I] .Y +));
                }
            }赶上(例外五){
                如果(调试)
                    Log.e(脸,我+为空);
            }
        }


解决方案

一个粗略的谷歌搜索显示了有关10个不同的岗位 - 有些甚至的 --oF人>同样的问题。您觉得这些?它看起来像它可能是一个错误。我建议你​​将其报告给href=\"http://$c$c.google.com/p/android/issues/list\" rel=\"nofollow\"> Android的bug跟踪系统

修改您应该的绝对的文件中的错误。看看人脸检测源$ C ​​$ C:这个源文件显示,Android将永远不会设置这些为除0。

直到这个变化,也有针对Android其他心血管选项。请查看 OpenCV的为Android 的,这是现在正式的团队的支持。

So I'm using androids built in facedector to detect and determine the position of faces in a bitmap. Right now it works and will tell me: confidence, eyesDistance and midpoint but whenever i try to get the pose it always returns 0 no matter what images i try using.

This is the code I use to get the pose:

poseString = "Pose: (" + getFace.pose(FaceDetector.Face.EULER_X) + ","
                        + getFace.pose(FaceDetector.Face.EULER_Y) + ","
                        + getFace.pose(FaceDetector.Face.EULER_Z) + ")";

And here is the code I use:

arrayFaces = new FaceDetector(picWidth, picHeight, NUM_FACES);
        arrayFaces.findFaces(sourceImage, getAllFaces);

        for (int i = 0; i < getAllFaces.length; i++) {
            getFace = getAllFaces[i];
            try {
                PointF eyesMP = new PointF();
                getFace.getMidPoint(eyesMP);
                poseString = "Pose: ("+ getFace.pose(FaceDetector.Face.EULER_X) + ","
                        + getFace.pose(FaceDetector.Face.EULER_Y) + ","
                        + getFace.pose(FaceDetector.Face.EULER_Z) + ")";
                EULER_X = getFace.EULER_X;
                EULER_Y = getFace.EULER_Y;
                EULER_Z = getFace.EULER_Z;      

                eyesDistance[i] = getFace.eyesDistance();
                eyesMidPts[i] = eyesMP;

                if (DEBUG) {
                    currentx = eyesMidPts[i].x;
                    currenty = eyesMidPts[i].y;
                    betweeneyes = getFace.eyesDistance();

                    Log.d("currentx", currentx + "");
                    Log.d("currenty", currenty + "");
                    Log.d("betweeneyes", betweeneyes + "");
                    Log.d("EULER", "EULER_X: " + EULER_X + "EULER_Y: " + EULER_Y + "EULER_Z: " + EULER_Z);

                    Log.i("Face", i + " " + getFace.confidence() + " "
                            + getFace.eyesDistance() + " " + "Pose: ("
                            + getFace.pose(FaceDetector.Face.EULER_X) + ","
                            + getFace.pose(FaceDetector.Face.EULER_Y) + ","
                            + getFace.pose(FaceDetector.Face.EULER_Z) + ")"
                            + "Eyes Midpoint: (" + eyesMidPts[i].x + ","
                            + eyesMidPts[i].y + ")");
                }
            } catch (Exception e) {
                if (DEBUG)
                    Log.e("Face", i + " is null");
            }




        }

解决方案

A cursory google search shows about 10 different posts--some even on StackOverflow--of people with the same problem. Did you find these? It looks like it might be a bug. I suggest you report it to the android bug tracker.

Edit: You should definitely file a bug. Take a look at the face detection source code: this source file shows that Android will never set these to anything but 0.

Until this changes, there are other CV options for Android. Check out OpenCV for Android, which is now officially supported by the team.

这篇关于Android的Facedetector构成值始终为0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆