使用 Lambda-python 对 DynamoDB 表的 sed 识别响应

我正在使用 Lambda 来检测人脸,并希望将响应发送到 Dynamotable。这是我正在使用的代码:


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

你能请帮忙吗!


至尊宝的传说
浏览 144回答 1
1回答

qq_笑_17

在 DynamoDB 中创建表时,您必须至少指定一个分区键。转到您的 DynamoDB 表并获取您的分区键。一旦你有了它,你就可以创建一个新对象,它包含这个分区键,上面有一些值,以及你想要传递的对象本身。在 DynamoDB 表中创建新项目时,分区键始终是必须的。您的 JSON 对象应如下所示:{ "myPartitionKey": "myValue", "attr1": "val1", "attr2:" "val2"}编辑:在 OP 更新他的问题后,这里有一些新信息:对于问题 1)您确定要处理的图像是有效的吗?如果文件损坏,Rekognition 将失败并抛出该错误。对于问题 2)您不能在 Python 中将字符串与字典连接起来。您的 Age 和 Gender 变量是字典,而不是字符串。因此,您需要访问这些字典中的内部属性。他们有一个“价值”属性。我不是 Python 开发人员,但您需要访问 Gender 对象中的 Value 属性。然而,年龄对象具有“低”和“高”作为属性。您可以在文档中查看完整的属性列表希望这可以帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python