Android 应用程序中的 AWS 面部识别

AWS facial rekognition within an Android app

我正在尝试制作一个 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 到 index 特定集合中的 face

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 以 search collection by the image 已发送。我已经使用以下 AWS CLI 代码成功完成此操作。应该也是打算不用S3直接把图片发给AWS。 AWS returns 与集合中已有的面孔匹配。

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

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

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

使用 Rekognition

要实现与 CLI 相同的功能,您可以先使用 IndexFacesRequest 为集合中的面孔编制索引,或者您可以放弃此操作并通过 CLI 手动创建集合如果这是一次性操作。

要通过 image 搜索集合的面孔,您只需修改以下代码片段以传入字节 64 编码图像而不是 S3 URL. searchFacesByImage() 方法 here.

的完整文档
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);