ListCollections 未在 Android 应用程序中正确列出 collections - AWS Rekognition
ListCollections is not listing correct collections in Android App - AWS Rekognition
好的,我已经被困在这里大约一个多星期了,我知道这是个愚蠢的错误。就是想不通。我正在开发一个可用于两个平台的项目,Android 和 iOS。它有点像面部识别应用程序。
当我尝试从 iOS 应用程序和 python 脚本访问 create/access collections 时,它们都从我的 AWS 账户访问相同的 collection。
但是当我尝试从 Android 应用程序访问时,它 creates/accesses 它是自己的 collection。由 Android 应用创建的 collection 无法在除此 Android 应用以外的任何地方访问,此 android 应用也无法访问由 [=42= 创建的 collection ] 应用程序或 python 脚本。
我已经尝试在所有这三个平台上列出 collection。 iOS 和 Python 列出完全相同的 collection,而 Android 应用列出的 collection 仅由 android 应用创建。
这是我用来在 android 上列出 collection 的代码:
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]
这是我用来列出 collection 的 python 代码:
import boto3
client = boto3.client('rekognition')
response = client.list_collections()
print(response['CollectionIds'])
这是结果:
['i_facesbxyxuxqxbxvxlxwx6x7xex5xmxfx', 'root_faces_data']
就是这样。没有其他的。只是这个代码。你可以看到一个显示 3 collections 而另一个显示两个。
我在 iOS 应用程序中使用了完全相同的区域和身份池 ID,并且它列出了与 python 中相同的 collections。
我认为 iOS 应用程序很好的原因是 iOS 和 python 列出的 collection 是相同的。
有什么我需要改变的吗?我需要做任何其他设置才能使其正常工作吗?
请告诉我。谢谢。
所以像大多数时候一样,我救了自己。
事实证明,当我们在 Android 中将 Cognito 凭据传递给 Rekognition 客户端时,它使用的区域与 Cognito 的区域不同。因此,我们还必须明确设置 Rekognition 客户端的区域。像这样:
mAmazonRekognitionClient.setRegion(Region.getRegion(Regions.US_EAST_2));
仅此而已。
好的,我已经被困在这里大约一个多星期了,我知道这是个愚蠢的错误。就是想不通。我正在开发一个可用于两个平台的项目,Android 和 iOS。它有点像面部识别应用程序。 当我尝试从 iOS 应用程序和 python 脚本访问 create/access collections 时,它们都从我的 AWS 账户访问相同的 collection。
但是当我尝试从 Android 应用程序访问时,它 creates/accesses 它是自己的 collection。由 Android 应用创建的 collection 无法在除此 Android 应用以外的任何地方访问,此 android 应用也无法访问由 [=42= 创建的 collection ] 应用程序或 python 脚本。
我已经尝试在所有这三个平台上列出 collection。 iOS 和 Python 列出完全相同的 collection,而 Android 应用列出的 collection 仅由 android 应用创建。
这是我用来在 android 上列出 collection 的代码:
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]
这是我用来列出 collection 的 python 代码:
import boto3
client = boto3.client('rekognition')
response = client.list_collections()
print(response['CollectionIds'])
这是结果:
['i_facesbxyxuxqxbxvxlxwx6x7xex5xmxfx', 'root_faces_data']
就是这样。没有其他的。只是这个代码。你可以看到一个显示 3 collections 而另一个显示两个。 我在 iOS 应用程序中使用了完全相同的区域和身份池 ID,并且它列出了与 python 中相同的 collections。 我认为 iOS 应用程序很好的原因是 iOS 和 python 列出的 collection 是相同的。 有什么我需要改变的吗?我需要做任何其他设置才能使其正常工作吗? 请告诉我。谢谢。
所以像大多数时候一样,我救了自己。 事实证明,当我们在 Android 中将 Cognito 凭据传递给 Rekognition 客户端时,它使用的区域与 Cognito 的区域不同。因此,我们还必须明确设置 Rekognition 客户端的区域。像这样:
mAmazonRekognitionClient.setRegion(Region.getRegion(Regions.US_EAST_2));
仅此而已。