在 aws-sdk-js 上使用 compareFaces 时获取 InvalidParameterException



当将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 发送到 rekognition。我们通过python库Boto运行了相同的图像,并成功获得了比较结果。

我们是否可以在节点端采取进一步的诊断步骤来帮助调试?或者对错误原因有任何见解?

更新:

图像尺寸: 来源: 1189 × 750 目标: 360 × 480

你可以做的一件事是,而不是通过你的JavaScript代码直接调用Rekognition api,将你的图像上传到S3,并让它上传到用python编写的lambda函数,lambda函数将包含比较代码,然后将响应存储在dynamodb表中作为缓冲区,然后从dynamodb获取数据并根据需要使用它。

它看起来是一个漫长的过程,但相信我,我也在使用它,它非常简单,并为我们提供了处理在后端完成的优势,远离天真的用户。

下面是比较代码的示例: 导入肉毒杆菌3 导入 IO 从太平船务导入图片

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')

最新更新