首页 > 解决方案 > ListCollections 未在 Android 应用程序中列出正确的集合 - AWS Rekognition

问题描述

好的,所以我已经被困在这里大约一个多星期了,我知道这是一个愚蠢的错误。就是想不通。我正在开发一个可用于两个平台的项目,Android 和 iOS。它是一种面部识别应用程序。当我尝试从 iOS 应用程序和 python 脚本创建/访问集合时,它们都从我的 AWS 账户访问同一个集合。

但是当我尝试从 Android 应用程序访问时,它会创建/访问它自己的集合。Android 应用程序创建的集合在除此 Android 应用程序之外的任何地方都无法访问,此 Android 应用程序也无法访问由 iOS 应用程序或 python 脚本创建的集合。

我已经尝试在所有这三个平台上列出集合。iOS 和 Python 列出完全相同的集合,而 Android 应用程序列出的集合是仅由 android 应用程序创建的集合。

这是我用来在 android 上列出集合的代码:

        mCredentialsProvider = new CognitoCachingCredentialsProvider(
                mContext.getApplicationContext(),
                "us-east-2:4xbx0x6x-9xbx-xax7-x9xf-x5x0xexfx1xb", // Identity pool ID
                Regions.US_EAST_2 // Region
        );

        mAmazonRekognitionClient = new AmazonRekognitionClient(mCredentialsProvider);

        ListCollectionsResult listCollectionsResult = mAmazonRekognitionClient.listCollections(new ListCollectionsRequest().withMaxResults(20));
        Log.i(TAG, listCollectionsResult.getCollectionIds().toString());

这是日志结果:

[i_facesbxyxuxqxbxvxlxwx6x7xex5xmxfx,i_facestxnxaxoxoxqxaxwx4xtxuxwxoxrx,root_faces_data]

这是我用来列出集合的 python 代码:

import boto3
client = boto3.client('rekognition')
response = client.list_collections()
print(response['CollectionIds'])

这是结果:

['i_facesbxyxuxqxbxvxlxwx6x7xex5xmxfx','root_faces_data']

而已。没有其他的。就这一段代码。您可以看到一个显示 3 个集合,而另一个显示两个。我在 iOS 应用程序中使用完全相同的区域和身份池 ID,它列出了与 python 中相同的集合。我认为iOS应用程序很好的原因是iOS和python列出的集合是相同的。我有什么需要改变的吗?我需要做任何额外的设置才能让它工作吗?请告诉我。谢谢。

标签: androidamazon-web-servicesaws-sdkamazon-cognitoamazon-rekognition

解决方案


所以像大多数时候一样,我拯救了自己。事实证明,当我们将 cognito 凭据传递给 Android 中的 Rekognition 客户端时,它不使用与 Cognito 相同的区域。因此,我们还必须明确设置 Rekognition 客户端的区域。像这样:

mAmazonRekognitionClient.setRegion(Region.getRegion(Regions.US_EAST_2));

就这样。


推荐阅读