[英]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.