【问题标题】:Google Vision API Capture image with graphic overlayGoogle Vision API 捕获带有图形叠加的图像
【发布时间】:2016-06-14 10:21:20
【问题描述】:

我正在使用其中一个 api face tracker 示例,并且我稍微修改了代码以查看它是否可以根据我对应用程序的想法工作。我想要做的是我想在检测到面部后添加面罩。

到目前为止,我已经添加了一个可绘制的示例蒙版,当我检测到面部而不是绘制面部点时,我在面部跟踪矩形中绘制了可绘制对象。现在它在面部预览中显示了该蒙版,但是当我尝试捕获该图像时,它仅从相机捕获帧而不是图形叠加,我添加了蒙版。有什么方法可以从带有那个面具的相机中捕捉到?

Image being saved

image being displayed on mobile screen

【问题讨论】:

  • 我也在尝试同样的事情。如果你实现了,请告诉我?

标签: android google-api google-vision


【解决方案1】:

我在过去参与的项目中取得了类似的成就,但不再有权访问该项目。

当您调用您的捕获方法时,您需要存储对面部位置的引用。

我不确定视觉 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;
    }
}

【讨论】:

  • 谢谢,是的,我已经做了类似的事情。但是这样做的时候有很多问题。某些设备的相机在我拍摄时会给出旋转甚至倒置的图像。
  • @UsmanGhauri 我有同样的问题。图像的旋转。我已经在我测试过的所有设备上添加了解决这个问题的代码。
  • 我尝试了你的代码,但它给出了黑色图像,因为它是表面视图。您对此有任何其他解决方案吗...?
  • @mVJ 你有什么异常吗?上面的代码对图像没有任何作用(将其应用于表面视图)只是修复了方向
  • @drojokef 正如我在答案中提到的,我不再从事这个项目。
猜你喜欢
  • 2013-07-05
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2012-01-11
  • 2015-08-30
相关资源
最近更新 更多