【问题标题】:Android Facedetector pose values are always 0Android Facedetector 姿势值始终为 0
【发布时间】:2012-04-15 04:37:57
【问题描述】:

所以我使用facedector 内置的机器人来检测和确定位图中人脸的位置。现在它可以工作并且会告诉我:信心、眼睛距离和中点,但是每当我尝试获取姿势时,无论我尝试使用什么图像,它总是返回 0。

这是我用来获取姿势的代码:

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

这是我使用的代码:

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");
            }




        }

【问题讨论】:

  • 我们能看到您实际使用FaceDetector 的代码吗?据我从文档中得知,您应该传入自己的 Face[] 数组,然后直接从这些对象中读取。
  • 检查此代码,因为它也适用于我和其他人stackoverflow.com/questions/9269891/android-face-detection/…
  • @Sameer 我没有看到 Pose 在该代码中的任何地方使用。

标签: android


【解决方案1】:

粗略的谷歌搜索显示大约 10 个不同的帖子——有些甚至on StackOverflow——来自有同样问题的人。你找到这些了吗?看起来它可能是一个错误。建议您向android bug tracker举报。

编辑:您应该绝对提交一个错误。看一下人脸检测源代码:this source file 表明 Android 永远不会将这些设置为 0。

在此更改之前,还有其他适用于 Android 的 CV 选项。查看OpenCV for Android,现已获得团队正式支持。

【讨论】:

  • 谢谢,我会研究一下,我之前研究过适用于 Android 的 OpenCV,但我无法设置它并实际工作,你知道有什么好的资源吗?
  • 您在使用 Eclipse 吗?如果是,您是否尝试过我链接到您的网站提供的分步指南?
  • 是的,我是,但我看到他们的网站发生了变化,并且自从我上次尝试让它工作以来,它看起来已经更新了。我仍然想让pose 与 android facedetect 一起工作,因为我已经拥有所有其他代码。但我肯定会在未来研究 OpenCV。
  • 看看我修改后的答案,彼得——如果你想要欧拉角,你似乎必须改变你的方法。
猜你喜欢
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多