AWS Rekognition 在 S3 存储桶中的所有图像上调用索引面而不是一张一张地调用?
AWS Rekognition call index-faces on all images in an S3 bucket instead of one by one?
我正在测试来自 was 的图像识别。到目前为止还不错。我遇到的问题是在 CLI 中对人脸进行索引。我当时可以索引一个,但是,我想告诉 AWS 索引存储桶中的所有面孔。一次索引一张脸,我称之为:
aws rekognition index-faces --image "S3Object={Bucket=bname,Name=123.jpg}" --collection-id "myCollection" --detection-attributes "ALL" --external-image-id "myImgID"
我如何告诉它索引 "name" 存储桶中的所有图像?
I tried this:
aws rekognition index-faces --image "S3Object={Bucket=bname}" --collection-id "myCollection" --detection-attributes "ALL" --external-image-id "myImgID"
运气不好。
您目前无法在一次 index-faces 调用中为多张面孔编制索引。在存储桶上调用 get-objects 然后循环遍历结果的脚本将完成您想要的。
以防将来对任何人有帮助,我有类似的需求,所以我写了这个 Python 3.6 脚本来完全按照@chris-adzima 的建议执行,我从 lambda 执行它函数。
import boto3
import concurrent.futures
bucket_name = "MY_BUCKET_NAME"
collection_id = "MY_COLLECTION_ID"
rekognition = boto3.client('rekognition')
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
def handle_image(key):
rekognition.index_faces(
CollectionId=collection_id,
Image={
'S3Object': {
'Bucket': bucket_name,
'Name': key
}
}
)
def lambda_handler(event, context):
pic_keys = [o.key for o in bucket.objects.all() if o.key.endswith('.png')]
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.map(handle_image, pic_keys)
我正在测试来自 was 的图像识别。到目前为止还不错。我遇到的问题是在 CLI 中对人脸进行索引。我当时可以索引一个,但是,我想告诉 AWS 索引存储桶中的所有面孔。一次索引一张脸,我称之为:
aws rekognition index-faces --image "S3Object={Bucket=bname,Name=123.jpg}" --collection-id "myCollection" --detection-attributes "ALL" --external-image-id "myImgID"
我如何告诉它索引 "name" 存储桶中的所有图像?
I tried this:
aws rekognition index-faces --image "S3Object={Bucket=bname}" --collection-id "myCollection" --detection-attributes "ALL" --external-image-id "myImgID"
运气不好。
您目前无法在一次 index-faces 调用中为多张面孔编制索引。在存储桶上调用 get-objects 然后循环遍历结果的脚本将完成您想要的。
以防将来对任何人有帮助,我有类似的需求,所以我写了这个 Python 3.6 脚本来完全按照@chris-adzima 的建议执行,我从 lambda 执行它函数。
import boto3
import concurrent.futures
bucket_name = "MY_BUCKET_NAME"
collection_id = "MY_COLLECTION_ID"
rekognition = boto3.client('rekognition')
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
def handle_image(key):
rekognition.index_faces(
CollectionId=collection_id,
Image={
'S3Object': {
'Bucket': bucket_name,
'Name': key
}
}
)
def lambda_handler(event, context):
pic_keys = [o.key for o in bucket.objects.all() if o.key.endswith('.png')]
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.map(handle_image, pic_keys)