AWS Rekognition JS SDK Ошибка кодирования недопустимого изображения

Создание простой демонстрации AWS Rekognition с помощью React с использованием <input type="file">

Получение Invalid image encoding ошибки.

let file = e.target.files[0];
let reader = new FileReader();

reader.readAsDataURL(file);

reader.onloadend = () => {
  let rekognition = new aws.Rekognition();

  var params = {
    Image: { /* required */
      Bytes: reader.result,
    },
    MaxLabels: 0,
    MinConfidence: 0.0
  };

  rekognition.detectLabels(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);           // successful response
  });

введите описание изображения здесь

Репозиторий GitHub: https://github.com/html5cat/vision-test/

Проблема с GitHub: https://github.com/html5cat/vision-test/issues/1 < / а>


person Yuriy Dybskiy    schedule 25.04.2017    source источник


Ответы (3)


Вы можете попробовать преобразовать reader.result в двоичные байты.

function getBinary(encodedFile) {
        var base64Image = encodedFile.split("data:image/jpeg;base64,")[1];
        var binaryImg = atob(base64Image);
        var length = binaryImg.length;
        var ab = new ArrayBuffer(length);
        var ua = new Uint8Array(ab);
        for (var i = 0; i < length; i++) {
          ua[i] = binaryImg.charCodeAt(i);
        }

        var blob = new Blob([ab], {
          type: "image/jpeg"
        });

        return ab;
      }

По сути, вы можете установить ответ вышеуказанного метода для байтов:

 Bytes: getBinary(reader.result),
person srikanth Nutigattu    schedule 30.04.2017
comment
Большое спасибо! - person Saurabh Chauhan; 31.01.2018
comment
Вы можете также рассмотреть png - см. документацию. aws.amazon.com/rekognition/latest/dg/ - person jgraup; 04.01.2019
comment
замена обоих экземпляров jpeg на png помогла мне! Спасибо!!!! - person supahcraig; 09.02.2021
comment
Может ли кто-нибудь объяснить мне код или предоставить какие-либо ссылки? - person Prashanth Wagle; 15.03.2021

В случае, если кто-то делает это на стороне узла, я столкнулся с аналогичной проблемой при чтении файла в виде буфера массива байтов и отправке его в Rekognition.

Я решил это, вместо этого прочитав представление base64, а затем превратив его в буфер следующим образом:

const aws = require('aws-sdk');
const fs = require('fs');

var rekognition = new aws.Rekognition({
  apiVersion: '2016-06-27'
});

// pull base64 representation of image from file system (or somewhere else)
fs.readFile('./test.jpg', 'base64', (err, data) => {

  // create a new base64 buffer out of the string passed to us by fs.readFile()
  const buffer = Buffer.from(data, 'base64');

  // now that we have things in the right type, send it to rekognition
  rekognition.detectLabels({
      Image: {
        Bytes: buffer
      }
    }).promise()
    .then((res) => {

      // print out the labels that rekognition sent back
      console.log(res);

    });
    
});

Это также может иметь отношение к людям, получающим сообщение: Expected params.Image.Bytes to be a string, Buffer, Stream, Blob, or typed array object.

person Sean    schedule 02.08.2017

Возвращаемое значение из ReadAsDataUrl включает префикс, указывающий MIME-TYPE и кодировку данных. ("изображение / png; base64, IVBORsdafasdfasf ...").

Однако Rekognition API ожидает только закодированные байты изображения без каких-либо префиксов.

Попробуйте reader.result.split(',')[1] отфильтровать префикс и передать в запросе только закодированные байты.

person Paul H. Kang    schedule 25.04.2017