2016-12-15 8 views
1

Я использую PHP SDK для загрузки локального файла (а не S3) для анализа в AWS Rekognition. Однако изображение blob не будет работать, и я получаю сообщение: InvalidImageFormatException: "Invalid image encoding".AWS Rekognition PHP SDK дает неверную ошибку кодирования изображения

Я пробовал несколько изображений (the docs say JPEGs and PNGs are accepted), но никто не работает.

Мой код:

$client = new RekognitionClient($credentials); 

$im = file_get_contents('/app/image1.png'); 
$imdata = base64_encode($im); 

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

Am Я кодирующая его правильно? docs весьма расплывчатые.

Я нашел SO вопросы о «No Image Content», но о некорректном формате.

Любые идеи? Благодаря!

+0

Убедитесь, что base64_encode() не возвращает FALSE. Кроме того, попробуйте старый массив style: detectLabels (array ('Image' => array ('Bytes' => $ imdata))) –

+0

@SergeyKovalev Yep, 'base64_encode()' возвращает данные как ожидалось и, к сожалению, меняет массив стиль тоже не работал:/ – samiles

+0

Что делать, если вы пропустите 'base64_encode()' part? –

ответ

1

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

$client = new RekognitionClient($credentials); 

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

$result = $client->detectLabels(
    [ 
     'Image' => [ 
      'Bytes' => $imdata, 
     ] 
    ] 
); 
0
$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 ...