AWS Rekognition - 从detect-faces边界框创建图像

时间:2018-03-22 14:19:43

标签: aws-lambda face-detection amazon-rekognition

目前正试图弄清楚如何使用边界框(来自detect-faces响应)制作面部裁剪,并使用这些裁剪使用SearchFacesByImage API搜索现有集合

SearchFacesByImage文档中提到了这一点。

  

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

我试图在Python或Node.js中使用Lambda函数执行此操作。输入图像是s3对象。

所有人都非常感谢。

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题。请参阅AWS文档中的this link。在这里,您将找到python或java的示例代码。它将返回边界框的顶部,底部,宽度和高度。请记住,左上角将被视为(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()

在此代码的顶部,底部,宽度和高度是链接中给出的代码的响应。

答案 1 :(得分: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");