1

目前试图弄清楚如何从边界框(来自检测人脸响应)中进行人脸裁剪,并使用这些裁剪来使用 SearchFacesByImage API 搜索现有集合

SearchFacesByImage 文档中提到了这一点。

您还可以调用 DetectFaces 操作并使用响应中的边界框进行人脸裁剪,然后您可以将其传递给 SearchFacesByImage 操作

我正在尝试在 Python 或 Node.js 中的 Lambda 函数中执行此操作。输入图像是一个 s3 对象。

非常感谢所有帮助。

4

2 回答 2

1

我遇到了完全相同的问题。请参阅AWS 文档中的此链接。在这里,您将找到适用于 python 或 java 的示例代码。它将返回边界框的 Top、Lfet、Width 和 Height。请记住,左上角将被视为 (0,0)。

然后,如果您使用 python,您可以使用 cv2 或 PIL 裁剪图像。

以下是 PIL 的示例:

from PIL import Image

img = Image.open( 'my_image.png' )
cropped = img.crop( ( Left, Top, Left + Width, Top + Height ) ) 
cropped.show()

在此代码中,Top、Lfet、Width 和 Height 是来自链接中给出的代码的响应。

于 2018-07-02T09:54:13.533 回答
0

我在java中做了这个脚本,也许它有帮助

        java.awt.image.BufferedImage image = ...
    com.amazonaws.services.rekognition.model.BoundingBox target ...


    int x = (int) Math.abs((image.getWidth() * target.getLeft()));
    int y = (int) Math.abs((image.getHeight() *target.getTop()));;
    int w = (int) Math.abs((image.getWidth() * target.getWidth()));
    int h = (int) Math.abs((image.getHeight() * target.getHeight()));

    int finalX = x + w;
    int finalH = y + h;

    if (finalX > image.getWidth())
        w = image.getWidth()-x;

    if (finalH > image.getHeight())
        h = image.getHeight()-y;


    System.out.println(finalX);
    System.out.println(finalH);

    //
    //
    BufferedImage subImage = image.getSubimage(
            x, 
            y, 
            w,
            h);

    //
    //
    String base64 = ImageUtils.imgToBase64String(subImage, "jpg");
于 2019-04-16T20:15:13.293 回答