Ответ распознавания sed на таблицу DynamoDB с использованием Lambda-python - PullRequest
0 голосов
/ 22 февраля 2019

Я использую лямбду для обнаружения лиц и хотел бы отправить ответ в 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

Можете ли вы получить помощь!

1 Ответ

0 голосов
/ 22 февраля 2019

Когда вы создаете таблицу в DynamoDB, вы должны указать, как минимум, ключ раздела.Перейдите к своей таблице DynamoDB и возьмите ключ раздела.Получив его, вы можете создать новый объект, который содержит этот ключ раздела с некоторым значением и объект, который вы хотите передать самому себе.Ключ разделения всегда ОБЯЗАН при создании нового элемента в таблице DynamoDB.

Ваш объект JSON должен выглядеть следующим образом:

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

РЕДАКТИРОВАТЬ : После того, как ОП обновил свой вопрос, вот новая информация:

Для задачи 1)

Вы уверены, что изображение, которое вы пытаетесь обработать, является допустимым?Если это поврежденный файл, Rekognition потерпит неудачу и выдаст эту ошибку.

Для задачи 2)

Нельзя объединить строку со словарем в Python.Ваши переменные возраста и пола являются словарями, а не строками.Таким образом, вам нужно получить доступ к внутреннему атрибуту в этих словарях.У них есть атрибут «Значение».Я не разработчик Python, но вам нужно получить доступ к атрибуту Value внутри вашего объекта Gender.Однако объект Age имеет атрибуты «Низкий» и «Высокий».

Полный список атрибутов приведен в документах

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...