Получение InvalidParameterException при использовании compareFaces в aws-sdk-js - PullRequest
0 голосов
/ 08 мая 2018

При использовании функции сравнения граней aws-sdk с nodeJS мы периодически видим эту ошибку:

InvalidParameterException: Request has Invalid Parameters
 at Request.extractError (/app/node_modules/aws-sdk/lib/protocol/json.js:48:27)
 at Request.callListeners (/app/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
 at Request.emit (/app/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
 at Request.emit (/app/node_modules/aws-sdk/lib/request.js:683:14)
 at Request.transition (/app/node_modules/aws-sdk/lib/request.js:22:10)     at AcceptorStateMachine.runTo (/app/node_modules/aws-sdk/lib/state_machine.js:14:12)
 at /app/node_modules/aws-sdk/lib/state_machine.js:26:10
 at Request.<anonymous> (/app/node_modules/aws-sdk/lib/request.js:38:9)
 at Request.<anonymous> (/app/node_modules/aws-sdk/lib/request.js:685:12)
 at Request.callListeners (/app/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
 at Request.emit (/app/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
 at Request.emit (/app/node_modules/aws-sdk/lib/request.js:683:14)     at Request.transition (/app/node_modules/aws-sdk/lib/request.js:22:10)
 at AcceptorStateMachine.runTo (/app/node_modules/aws-sdk/lib/state_machine.js:14:12)
 at /app/node_modules/aws-sdk/lib/state_machine.js:26:10
 at Request.<anonymous> (/app/node_modules/aws-sdk/lib/request.js:38:9)
   message: 'Request has Invalid Parameters',
   code: 'InvalidParameterException',
   time: 2018-05-08T15:27:28.188Z,
   requestId: 'XXXXX',
   statusCode: 400,
   retryable: false,
   retryDelay: 52.72405778418885 }

Изображения захватываются каждый раз с помощью камеры iPhone, сохраняются в формате JPEG и содержат лица. Изображения не повреждены и были протестированы с использованием jpeginfo. Затем они преобразуются в двоичный файл и отправляются на повторное распознавание через SDK. Мы пропустили одни и те же изображения через библиотеку Python Boto и успешно получили результат сравнения.

Есть ли дополнительные диагностические шаги, которые мы можем предпринять на стороне узла, чтобы помочь в отладке? Или какое-либо понимание причины ошибки?

Обновление:

Размеры изображения: Источник: 1189 × 750 цель: 360 × 480

1 Ответ

0 голосов
/ 18 мая 2018

одна вещь, которую вы можете сделать, это вместо прямого вызова Rekognition api через ваш код javascript, загрузить свое изображение на s3 и сделать это загрузкой триггера для лямбда-функции, написанной на python, лямбда-функция будет содержать код сравнения, а затем сохранить Ответ в таблице DynamodB в качестве места буфера, затем получить данные из DynamodB и использовать их, как вы хотите.

это выглядит длительной процедурой, но поверьте мне, я тоже ее использую, и она довольно проста и дает нам преимущество в том, что обработка выполняется в бэкэнде в стороне от наивного пользователя.

вот пример кода сравнения: импорт boto3 импорт io из PIL import Image

rekognition = boto3.client('rekognition', region_name='eu-west-1')
dynamodb = boto3.client('dynamodb', region_name='eu-west-1')

image = Image.open("group1.jpeg")
stream = io.BytesIO()
image.save(stream,format="JPEG")
image_binary = stream.getvalue()


response = rekognition.search_faces_by_image(
        CollectionId='family_collection',
        Image={'Bytes':image_binary}                                       
        )

for match in response['FaceMatches']:
    print (match['Face']['FaceId'],match['Face']['Confidence'])

    face = dynamodb.get_item(
        TableName='family_collection',  
        Key={'RekognitionId': {'S': match['Face']['FaceId']}}
        )

    if 'Item' in face:
       print (face['Item']['FullName']['S'])
    else:
       print ('no match found in person lookup')
...