(Android) Как ориентация камеры влияет на способ рисования прямоугольника? - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь использовать firebase и View, чтобы нарисовать прямоугольник вокруг обнаруженных лиц, но я не совсем уверен, как ориентация камеры и ось вращения лица влияет на то, как firebase обнаруживает лицо. Проблема, с которой я столкнулся сейчас, заключается в том, что, когда я поверну голову вправо, перед камерой, обращенной влево, коробка сместится влево. Когда я немного поверну телефон вправо, коробка переместится вправо, даже если моя голова двигается влево на экране камеры. Направление, в котором коробка перемещается относительно лица при использовании задней камеры, также отличается. Однако, когда я наклоняю голову вверх, нарисованный прямоугольник может следовать правильно.

Как принять во внимание ориентацию телефона, используемую камеру и поворот на голове и телефоне?

Пока у меня есть несколько методов.

    public void draw(Canvas canvas) {
    RectF rectF = new RectF(rect);
    rectF.left = translateX(rectF.left);
    rectF.right = translateX(rectF.right);
    rectF.top = translateY(rectF.top);
    rectF.bottom = translateY(rectF.bottom);

    canvas.drawRect(rectF,rectPaint);

}

У меня есть метод обработки данных лица

    public static void process(List<FirebaseVisionFace> faces, GraphicOverlay graphicOverlay) {
    int count = 0;
    for (FirebaseVisionFace face : faces) {
        Rect bounds = face.getBoundingBox();

        //draw rectangle
        RectOverlay rect = new RectOverlay(graphicOverlay, bounds);
        graphicOverlay.add(rect);
        FirebaseVisionFaceLandmark leftEyeLandmark = face.getLandmark(FirebaseVisionFaceLandmark.LEFT_EYE);
        FirebaseVisionPoint leftEyePoint = leftEyeLandmark.getPosition();
        Rect leftEyeRect = new Rect(Math.round(leftEyePoint.getX() - 10), Math.round(leftEyePoint.getY() + 10)
                , Math.round(leftEyePoint.getX() + 10), Math.round(leftEyePoint.getY() - 10));
        graphicOverlay.add(new RectOverlay(graphicOverlay, leftEyeRect));

        count++;
    }
}

У меня также есть GraphicOverlay, который передается в классе RectOverlay, чтобы он мог рисовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...