AWS Rekognition和s3调用Python Lambda中的子文件夹
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS Rekognition和s3调用Python Lambda中的子文件夹相关的知识,希望对你有一定的参考价值。
我无法弄清楚如何使用Python在s3中访问存储桶中的某个文件夹
假设我正在尝试访问存储桶中的这个文件夹,其中包含一堆我想要运行的图像:“myBucket / subfolder / images /”
在/ images /文件夹中有:
one.jpg
two.jpg
three.jpg
four.jpg
我想在这个文件夹上运行rekognition的detect_labels。但是,我似乎无法访问此文件夹,但如果我将bucket_name更改为只是根文件夹(“myBucket”/),那么我只能访问该文件夹。
bucket_name = "myBucket/subfolder/images/"
rekognition = boto3.client('rekognition')
s3 = boto3.resource('s3')
bucket = s3.Bucket(name=bucket_name)
这是按预期运作的。存储桶名称应该只是存储桶的名称。
然后,您可以在存储桶上运行操作,例如:
import boto3
s3 = boto3.resource('s3', region_name='ap-southeast-2')
bucket = s3.Bucket('my-bucket')
for object in bucket.objects.all():
if object.key.startswith('images'):
print object.key
或者,使用client
而不是resource
:
import boto3
client = boto3.client('s3', region_name='ap-southeast-2')
response = client.list_objects_v2(Bucket='my-bucket', Prefix='images/')
for object in response['Contents']:
print object['Key']
您可以在其他地方索引您在S3中拥有的内容,这样您就可以直接访问所需内容。请记住,循环存储在存储桶中的文件可能会提供非常低的性能,如果您拥有的密钥数量很大,它会变得非常慢。
按照你的例子,另一种方法:
bucket_name = "myBucket"
folder_name = "subfolder/images/"
rekognition = boto3.client('rekognition')
keys= ['one.jpg','two.jpg','three.jpg','four.jpg']
s3 = boto3.resource('s3')
for k in keys:
obj = s3.Object(bucket_name, folder_name+k )
print(obj.key)
从系统中的任何db表中获取项目列表(keys
)。
对于AWS Rekognition(如要求),存储在S3存储桶中的文件夹中的图像文件将具有folder_name/subfolder_name/image_name.jpg
形式的密钥。所以,因为boto3 Rekognition detect_labels()
方法有这种语法(每https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rekognition.html#Rekognition.Client.detect_labels):
response = client.detect_labels(
Image={
'Bytes': b'bytes',
'S3Object': {
'Bucket': 'string',
'Name': 'string',
'Version': 'string'
}
},
MaxLabels=123,
MinConfidence=...
)
其中Name
的值应该是S3对象键名,您可以将整个文件夹图像路径作为字符串提供给该字典。要循环多个图像,按照Evhz的答案中的建议生成图像文件名列表,并在调用上面的detect_labels()
方法时循环该列表(或使用生成器)。
以上是关于AWS Rekognition和s3调用Python Lambda中的子文件夹的主要内容,如果未能解决你的问题,请参考以下文章
使用字节的 AWS Rekognition JavaScript 开发工具包
使用 Amazon Rekognition API 进行文本检测和 OCR
使用 Amazon Rekognition API 进行文本检测和 OCR
AWS面部识别试图用Android应用程序中的BasicAWSCredentials描述集合。]
用户无权执行:rekognition:RecognizeCelebrities with a explicit deny