我使用了一个 api face tracker 示例,我稍微修改了代码,看看它是否能按照我对应用程序的想法工作。我想要做的是我想在检测到面部后添加面罩。
到目前为止我所做的,我添加了一个示例蒙版可绘制,当我检测到面部而不是绘制面部点时,我在面部跟踪矩形中绘制可绘制。现在它在面部预览中显示了该蒙版,但是当我尝试捕获该图像时,它仅从相机捕获帧而不是图形叠加,我添加了蒙版。有什么方法可以从带有那个面具的相机中捕捉到?
我使用了一个 api face tracker 示例,我稍微修改了代码,看看它是否能按照我对应用程序的想法工作。我想要做的是我想在检测到面部后添加面罩。
到目前为止我所做的,我添加了一个示例蒙版可绘制,当我检测到面部而不是绘制面部点时,我在面部跟踪矩形中绘制可绘制。现在它在面部预览中显示了该蒙版,但是当我尝试捕获该图像时,它仅从相机捕获帧而不是图形叠加,我添加了蒙版。有什么方法可以从带有那个面具的相机中捕捉到?
我在过去从事的一个项目中实现了与此类似的东西,但不再可以访问该项目。
当您调用您的捕获方法时,您需要存储对面部位置的引用。
我不确定视觉 api 为您提供了多少对相机的控制,因此您可以:
拍照并在保存文件之前在返回的位图上添加掩码资源。
或者
加载保存的文件在它上面添加掩码资源。
如果有帮助,我稍后会查看一些代码。
编辑旋转位图
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
ExifInterface exif = new ExifInterface("/storage/emulated/0/Pic.jpg");
String exifOrientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
int i = Integer.parseInt(exifOrientation);
bitmap = rotateImage(bitmap, i);
//
private Bitmap rotateImage(Bitmap bm, int i) {
Matrix matrix = new Matrix();
switch (i) {
case ExifInterface.ORIENTATION_NORMAL:
return bm;
case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
matrix.setScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix.setRotate(180);
break;
case ExifInterface.ORIENTATION_FLIP_VERTICAL:
matrix.setRotate(180);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_TRANSPOSE:
matrix.setRotate(90);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_90:
matrix.setRotate(90);
break;
case ExifInterface.ORIENTATION_TRANSVERSE:
matrix.setRotate(-90);
matrix.postScale(-1, 1);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
matrix.setRotate(-90);
break;
default:
return bm;
}
try {
Bitmap bmRotated = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
bm.recycle();
return bmRotated;
} catch (OutOfMemoryError e) {
e.printStackTrace();
return null;
}
}