(Android)相机的方向如何影响矩形的绘制方式?

时间:2019-01-10 04:09:36

标签: android firebase camera

我正在尝试使用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类中传递,因此可以绘制。

0 个答案:

没有答案