AWS Rekognition调用索引 - 面对S3存储桶中的所有图像而不是逐个?

时间:2017-09-18 20:20:57

标签: amazon-s3 amazon-rekognition

我正在测试图像识别。到目前为止很好。我遇到的问题是在CLI中索引面。我当时可以索引一个,但是,我想告诉AWS索引存储桶中的所有面。在我称之为面部时,要对其进行索引:

aws rekognition index-faces --image "S3Object={Bucket=bname,Name=123.jpg}" --collection-id "myCollection" --detection-attributes "ALL" --external-image-id "myImgID"

如何告诉它索引“名称”存储桶中的所有图像?

I tried this:
aws rekognition index-faces --image "S3Object={Bucket=bname}" --collection-id "myCollection" --detection-attributes "ALL" --external-image-id "myImgID"

没有运气。

2 个答案:

答案 0 :(得分:2)

您目前无法在一个index-faces调用中索引多个面。调用存储桶上的get-objects然后遍历结果的脚本将实现您想要的效果。

答案 1 :(得分:0)

如果它在将来帮助任何人,我有类似的需求,所以我编写了这个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)