我正在使用 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 属性。然而,年龄对象具有“低”和“高”作为属性。
您可以在文档中查看完整的属性列表
希望这可以帮助!
添加回答
举报
0/150
提交
取消