目前试图弄清楚如何从边界框(来自检测人脸响应)中进行人脸裁剪,并使用这些裁剪来使用 SearchFacesByImage API 搜索现有集合
SearchFacesByImage 文档中提到了这一点。
您还可以调用 DetectFaces 操作并使用响应中的边界框进行人脸裁剪,然后您可以将其传递给 SearchFacesByImage 操作
我正在尝试在 Python 或 Node.js 中的 Lambda 函数中执行此操作。输入图像是一个 s3 对象。
非常感谢所有帮助。
目前试图弄清楚如何从边界框(来自检测人脸响应)中进行人脸裁剪,并使用这些裁剪来使用 SearchFacesByImage API 搜索现有集合
SearchFacesByImage 文档中提到了这一点。
您还可以调用 DetectFaces 操作并使用响应中的边界框进行人脸裁剪,然后您可以将其传递给 SearchFacesByImage 操作
我正在尝试在 Python 或 Node.js 中的 Lambda 函数中执行此操作。输入图像是一个 s3 对象。
非常感谢所有帮助。
我遇到了完全相同的问题。请参阅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");