AWS Rekognition - создать изображение из ограничительной рамки обнаружения лиц

В настоящее время пытаются выяснить, как сделать кадрирование лица из ограничивающих рамок (из ответа обнаружения лиц) и использовать эти кадрирования для поиска в существующей коллекции с помощью API SearchFacesByImage

Это упомянуто в документации SearchFacesByImage.

Вы также можете вызвать операцию DetectFaces и использовать ограничительные рамки в ответе, чтобы сделать кадрирование лица, которое затем вы можете передать в операцию SearchFacesByImage.

Я пытаюсь сделать это в Python или Node.js в функции Lambda. Входное изображение является объектом s3.

Вся помощь высоко ценится.

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 - ответ от кода, указанного в ссылке.

Я сделал этот скрипт в 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");
Другие вопросы по тегам