繁体   English   中英

在检测到的面部上绘制 bitmap,将眼镜对准眼睛

[英]Drawing a bitmap on detected face, aligning glasses to the eyes

我正在使用 java 在 Android 上学习人脸检测。 我正在做一个教程,你在检测到的脸上画太阳镜。 我有脸,我可以画出 bitmap 但太阳镜没有完全对齐——它们很接近。 但更具体地说,我遇到的问题是 bitmap 的倾斜/旋转,以匹配我假设应该是来自 ZBF12E1515C25C3D8C0352F141 的 getHeadEulerAngleY() position 的内容。 我使用 Matrix 尝试用 Y 轴“倾斜”眼镜,但眼镜只向一个方向旋转——所以不一定是眼睛。 如果它是我从头部欧拉角 Y 得到的浮点数,负 bitmap 旋转是否与浮点值相对应?

我也仍然非常了解并努力学习。

许多不同的答案让我走到了这一步,但现在我被困住了。

以眼睛疲劳为例:

 if(leftEye != null && rightEye != null){
          distance = (float) Math.sqrt(
                        Math.pow(rightEye.getPosition().getX() - 
                        leftEye.getPosition().getX(), 2) +
                        Math.pow(rightEye.getPosition().getY() - 
                        leftEye.getPosition().getY(), 2)); 

rect = new Rect(
           Math.round(leftEye.getPosition().getX() - distance), 
           Math.round(leftEye.getPosition().getY() - distance), 
           Math.round(rightEye.getPosition().getX() + distance), 
           Math.round(rightEye.getPosition().getY() + distance));
 }else{
    rect = face.getBoundingBox;
}

这使眼镜与眼睛非常紧密地对齐。

但是我在执行该代码之前尝试做的是使用矩阵首先基于 Y 轴转动 bitmap:

 Matrix matrix = new Matrix();
    matrix.postRotate(face.getHeadEulerAngleY);

then apply the glasses to the canvas
      canvas.drawBitmap(sunglasses, null, rect, null);
image.setImgBitmap(mutable)

我确定我错过了一些东西。 那个眼镜公式来自一个类似的 function 让我离眼睛最近,所以我猜有一个类似的来匹配轴。 我不知道从哪里开始。

谢谢您的帮助!

我想我明白了……它很粗糙,而且 SO FAR 似乎正在工作,你不能倾斜太远,但我想你只是想要 Z 轴和 Y 轴的相反方向。 就像您将 bitmap 旋转到面轴或其他轴上一样。 像飞机轭。

所以-

如果(signum(face.Z)<0){

matrix.setRotate(Mathabs(faceZ);

}否则如果(signum(faceZ)>0{

矩阵.setRotate(-faceZ);

}else{ setrotate(0) }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM