2

我正在尝试制作一个Android 应用程序,它可以将 Android 平板电脑上的相机拍摄的图像发送到 AWS Rekognition。其目的是将图片直接发送到AWS Rekognition服务,而不需要S3 存储桶。图片本身不需要保存在云端。只有面部元数据需要存储在 AWS 上的集合中。之后的最终目标是让一个人能够再次捕捉到他的脸,AWS 表示在该集合中与之前的一张脸相匹配。

互联网上有很多信息。但大多数情况下,AWS 建议使用 Amplify 框架。而且我真的不知道在这种简单的情况下是否有必要这样做。

我已经完成了 AWS CLI 中的所有步骤(以及这些工作),但我没有成功在 Android Studio 中执行这些步骤。下面我描述了我在 AWS CLI 中完成的步骤。我会在 Android Studio 中执行这些步骤,但我不是编程这种语言的专家。(我已经在 AWS CLI 中创建了一个集合。)

首先,我将 AWS 可以找到的人脸索引到图片中。在我的 AWS CLI 代码中,我使用 S3 作为示例。应该是我可以将图片直接发送到 AWS Rekognition 的意图。只有在有人专门按下按钮时才需要执行此操作。因此,拍摄一张照片并将其发送到 AWS Rekognition 以索引特定集合中的人脸。

aws rekognition index-faces --image '{"S3Object":{"Bucket":"bucketName","Name":"picture1.jpg"}}' --collection-id "collectionName" --max-faces 1 --quality-filter "AUTO" --detection-attributes "DEFAULT" --external-image-id "picture1.jpg"

然后,当用户按下另一个按钮时,它需要再次拍照,并且需要将其发送到 AWS Rekognition 以通过发送的图像搜索集合。我已经使用以下 AWS CLI 代码成功了。也应该是打算直接将图片发送到AWS而不需要S3。AWS 返回与集合中已有人脸的匹配项。

aws rekognition search-faces-by-image --image '{"S3Object":{"Bucket":"bucketName","Name":"picture.jpg"}}' --collection-id "collectionName"

同样,我不是 Android 工作室的专业人士,所以如果有人有一个非常简单的解决方案,那就太好了。如果有人能告诉我 Amplify 框架是否真的有必要,那也太好了。提前致谢!

4

1 回答 1

2

您不必使用 Amplify,您可以通过AWS Java SDK使用 Rekognition 。

为了实现与 CLI 相同的功能,您可以首先使用IndexFacesRequest对集合中的人脸进行索引,或者如果这是一次性操作,您可以放弃此操作并通过 CLI 手动创建集合。

要按图像搜索集合的面孔,您只需修改以下代码片段以传入字节 64 编码的图像而不是 S3 URL。searchFacesByImage()该方法的完整文档在这里

AmazonRekognition client = AmazonRekognitionClientBuilder.standard().build();
SearchFacesByImageRequest request = new SearchFacesByImageRequest().withCollectionId("myphotos")
        .withImage(new Image().withS3Object(new S3Object().withBucket("mybucket").withName("myphoto"))).withMaxFaces(5).withFaceMatchThreshold(95f);
SearchFacesByImageResult response = client.searchFacesByImage(request);
于 2020-02-24T20:09:57.300 回答