为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

至尊宝的传说 2021-11-16 15:20:36
我正在使用 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.jpg2. cannot concatenate 'str' and 'dict' objects你能请帮忙吗!
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

在 DynamoDB 中创建表时,您必须至少指定一个分区键。转到您的 DynamoDB 表并获取您的分区键。一旦你有了它,你就可以创建一个新对象,它包含这个分区键,上面有一些值,以及你想要传递的对象本身。在 DynamoDB 表中创建新项目时,分区键始终是必须的。


您的 JSON 对象应如下所示:


{

 "myPartitionKey": "myValue",

 "attr1": "val1",

 "attr2:" "val2"

}

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


对于问题 1)


您确定要处理的图像是有效的吗?如果文件损坏,Rekognition 将失败并抛出该错误。


对于问题 2)


您不能在 Python 中将字符串与字典连接起来。您的 Age 和 Gender 变量是字典,而不是字符串。因此,您需要访问这些字典中的内部属性。他们有一个“价值”属性。我不是 Python 开发人员,但您需要访问 Gender 对象中的 Value 属性。然而,年龄对象具有“低”和“高”作为属性。


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


希望这可以帮助!


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信