我正在使用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"高"作为属性。
您可以在文档中查看属性的完整列表
希望这会有所帮助!