веб-сервисы Amazon — AWS Rekognition PHP SDK выдает ошибку кодирования недопустимого изображения

Я использую 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», но ни один о недопустимом формате.

Есть идеи? Спасибо!

1

Решение

Я в конечном итоге с помощью Imagick а не base64_encode маршрут. Я подозреваю, что это не лучший способ, но он отлично работает!

$client = new RekognitionClient($credentials);

$image = new Imagick('/app/image1.png');
$imdata = $image->getImageBlob();

$result = $client->detectLabels(
[
'Image' => [
'Bytes' => $imdata,
]
]
);
1

Другие решения

Похоже, вам не следует применять кодировку base64. SDK делает это для блобов.

https://github.com/aws/aws-sdk-php/blob/master/src/Api/Serializer/JsonBody.php:

        case 'blob':
return base64_encode($value);
1

    $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 …

0
По вопросам рекламы [email protected]