0

Я играю с реляцией Амазонки. Я нашел действительно nice/easy library взять изображение с веб-камеры, которая работает так:Convert BufferedImage to aws ... rekognition.model.Image

BufferedImage bufImg = webcam.getImage(); 

Я тогда пытался превратить эту BufferedImage в com.amazonaws.services.rekognition.model.Image, которая является то, что должно быть передано в библиотеку Rekognition. Это то, что я делаю:

byte[] imgBytes = ((DataBufferByte) bufImg.getData().getDataBuffer()).getData(); 
ByteBuffer byteBuffer = ByteBuffer.wrap(imgBytes); 
return new Image().withBytes(byteBuffer); 

Однако, когда я пытаюсь сделать некоторый API вызов Rekognition с Image, я получаю исключение:

com.amazonaws.services.rekognition.model.InvalidImageFormatException: Invalid image encoding (Service: AmazonRekognition; Status Code: 400; Error Code: InvalidImageFormatException; Request ID: X) 

В docs состоянии, что Java SDK будет автоматически base64 кодирует байты. В случае, если что-то странное происходит, я попытался кодирование base64 байт перед преобразованием:

imgBytes = Base64.getEncoder().encode(imgBytes); 

Однако то же исключение следует.

Любые идеи? :)

ответ

4

Я пробовал кодировать изображение в JPG (Rekognition поддерживает форматы PNG или JPG), и это решило проблему.

BufferedImage bufImg = webcam.getImage(); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(bufImg, "jpg", baos); 
ByteBuffer byteBuffer = ByteBuffer.wrap(baos.toByteArray()); 
return new Image().withBytes(byteBuffer);