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

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

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

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

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

Любая помощь очень ценится.


person db46    schedule 22.03.2018    source источник
comment
Я пытаюсь сделать это на java, но пока не могу завершить это из-за проблемы с преобразованием изображения AWS в изображение java. У меня есть код в этом вопросе stackoverflow.com/questions/ 49801592 /   -  person sttaq    schedule 12.04.2018


Ответы (2)


Я столкнулся с той же проблемой. См. эту ссылку из Документации 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 являются ответом на код, указанный в ссылке.

person R. Patel    schedule 02.07.2018

Я сделал этот скрипт на 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");
person Milton Bertachini    schedule 16.04.2019