android - 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列出的集合是相同的。我有什么需要改变的吗?我需要做任何额外的设置才能让它工作吗?请告诉我。谢谢。
解决方案
所以像大多数时候一样,我拯救了自己。事实证明,当我们将 cognito 凭据传递给 Android 中的 Rekognition 客户端时,它不使用与 Cognito 相同的区域。因此,我们还必须明确设置 Rekognition 客户端的区域。像这样:
mAmazonRekognitionClient.setRegion(Region.getRegion(Regions.US_EAST_2));
就这样。
推荐阅读
- amazon-web-services - API 网关和 DynamoDB 集成 - SerializationException
- sql - SQL:查找最近生效的规则
- java - 用于生成名称的多线程
- javascript - JavaScript 中的嵌套方法
- php - 将多个部分添加到 WooCommerce 选项卡
- c++ - [[maybe_unused]] 和构造函数
- python - 将变量从一个脚本导入另一个:NameError: name 'XXXX' is not defined
- javascript - Flatten an array of objects into a single array
- asp.net-core-webapi - 启动后是否可以更改 MVC 路由?
- ios - 如果用户输入需要显示警报,则 Swift 文本字段文本 1 到 9