0

Je joue avec l'Amazon Rekognition. J'ai trouvé vraiment nice/easy library pour prendre une image de ma webcam qui fonctionne comme ceci:Conversion de BufferedImage en aws ... rekognition.model.Image

BufferedImage bufImg = webcam.getImage(); 

Je puis essayer de convertir cette BufferedImage à un com.amazonaws.services.rekognition.model.Image, qui est ce qui doit être soumis à la bibliothèque Rekognition. Voilà ce que je fais:

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

Cependant quand je tente de faire certains appels API pour Rekognition avec le Image, je reçois une exception:

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

L'état docs que le Java SDK base64 encoder automatiquement les octets. Dans le cas, quelque chose de bizarre se passait, j'ai essayé base64 codant pour les octets avant la conversion:

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

Cependant, la même exception s'ensuit.

Des idées? :)

Répondre

4

J'ai essayé de coder l'image en JPG (Rekognition supporte les formats PNG ou JPG) et cela a résolu le problème.

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