Я использую PHP SDK для загрузки локального файла (не S3) для анализа в AWS Rekognition. Тем не менее, изображение blob не будет работать, и я получаю сообщение: InvalidImageFormatException: "Invalid image encoding"
,
Я пробовал несколько изображений (документы говорят, что JPEG и PNG принимаются), но никто не работает.
Мой код:
$client = new RekognitionClient($credentials);
$im = file_get_contents('/app/image1.png');
$imdata = base64_encode($im);
$result = $client->detectLabels(
[
'Image' => [
'Bytes' => $imdata,
]
]
);
Я правильно его кодирую? документы довольно расплывчато
Я нашел ТАК вопросы о «No Image Content», но ни один о недопустимом формате.
Есть идеи? Спасибо!
Я в конечном итоге с помощью Imagick а не base64_encode
маршрут. Я подозреваю, что это не лучший способ, но он отлично работает!
$client = new RekognitionClient($credentials);
$image = new Imagick('/app/image1.png');
$imdata = $image->getImageBlob();
$result = $client->detectLabels(
[
'Image' => [
'Bytes' => $imdata,
]
]
);
Похоже, вам не следует применять кодировку base64. SDK делает это для блобов.
https://github.com/aws/aws-sdk-php/blob/master/src/Api/Serializer/JsonBody.php:
case 'blob':
return base64_encode($value);
$s3 = new \Aws\Rekognition\RekognitionClient([
'version' => 'latest',
'region' => 'us-east-1',
'credentials' => [
'key' => 'BKxxxxxxxx',
'secret' => 'GYxxxxxxxxxxxxxxxxxx'
]
]);
$result = $s3->detectLabels([
'Image' => [ // REQUIRED
'Bytes' => file_get_contents("http://img13.deviantart.net/5a3b/i/2010/249/b/a/__michelangelo__s_flying_horse___by_dark_oak_trails-d2y5iej.jpg"),
],
'MaxLabels' => 10,
'MinConfidence' => 90,
]);
Вы не нужно base64_enconde изображения при использовании их SDK.
http://docs.aws.amazon.com/rekognition/latest/dg/API_Image.html
Ваш код может не нуждаться в кодировании байтов изображения, если вы используете AWS SDK …