使用lambda-python对DynamoDB表的SED识别响应



我正在使用lambda检测面,并希望将响应发送到动力学。这是我正在使用的代码:

rekognition = boto3.client('rekognition', region_name='us-east-1')
dynamodb = boto3.client('dynamodb', region_name='us-east-1')

 # --------------- Helper Functions to call Rekognition APIs ------------------

def detect_faces(bucket, key):
    response = rekognition.detect_faces(Image={"S3Object": {"Bucket": bucket, 
    "Name": key}}, Attributes=['ALL'])
    TableName = 'table_test'
    for face in response['FaceDetails']:
        table_response = dynamodb.put_item(TableName=TableName, Item='{0} - {1}%')

     return response

我的问题在此行中:

 for face in response['FaceDetails']:
        table_response = dynamodb.put_item(TableName=TableName, Item= {'key:{'S':'value'}, {'S':'Value')

我可以在控制台中看到结果。我不想在表中添加特定项目 - 我需要将整个响应转移到表中。

这样做:1.在表中添加什么作为键和分区键?2.如何将整个响应转移到表

我已经陷入困境了三天,无法弄清楚任何结果。请帮助!

           ******************* EDIT *******************

我尝试了此代码:

rekognition = boto3.client('rekognition', region_name='us-east-1')


 # --------------- Helper Functions to call Rekognition APIs ------------------

 def detect_faces(bucket, key):
     response = rekognition.detect_faces(Image={"S3Object": {"Bucket": bucket, 
     "Name": key}}, Attributes=['ALL'])
     TableName = 'table_test'
     for face in response['FaceDetails']:
         face_id = str(uuid.uuid4())
         Age = face["AgeRange"]
         Gender = face["Gender"]
         print('Generating new DynamoDB record, with ID: ' + face_id)
         print('Input Age: ' + Age)
         print('Input Gender: ' + Gender)
         dynamodb = boto3.resource('dynamodb')
         table = dynamodb.Table(os.environ['test_table'])
         table.put_item(
         Item={
            'id' : face_id,
            'Age' : Age,
            'Gender' : Gender
         }
     )

     return response

它给了我两个错误:

1. Error processing object xxx.jpg
2. cannot concatenate 'str' and 'dict' objects

您可以帮助您的帮助!

在DynamoDB中创建表时,至少必须指定一个分区密钥。转到DynamoDB表并抓住分区键。一旦拥有它,就可以创建一个包含此分区键的新对象,其中有一定的值以及您要通过的对象。在DynamoDB表中创建新项目时,分区密钥始终是必须的。

您的JSON对象应该看起来像这样:

{
 "myPartitionKey": "myValue",
 "attr1": "val1",
 "attr2:" "val2"
}

编辑:OP更新了他的问题后,这里有一些新信息:

对于问题1)

您确定要处理的图像是有效的吗?如果是损坏的文件重新认知将失败并丢弃该错误。

对于问题2)

您不能将字符串与python中的字典相连。您的年龄和性别变量是字典,而不是字符串。因此,您需要在这些字典中访问内部属性。它们具有"值"属性。我不是Python开发人员,但是您需要访问性别对象中的值属性。但是,年龄对象具有"低"one_answers"高"作为属性。

您可以在文档中查看属性的完整列表

希望这会有所帮助!

最新更新