Я пытаюсь использовать 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
, чтобы он мог рисовать.