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");