将BufferedImage转换为aws ... rekognition.model.Image

mic*_*zer 1 java bufferedimage amazon-web-services amazon-rekognition

我正在玩亚马逊Rekognition.我找到了一个非常好/容易的库来从我的网络摄像头拍摄图像,其工作方式如下:

BufferedImage bufImg = webcam.getImage();
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其转换BufferedImage为a com.amazonaws.services.rekognition.model.Image,这是必须提交给Rekognition库的内容.这就是我正在做的事情:

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

但是当我尝试用Rekognition做一些API调用时Image,我得到一个例外:

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

文档指出了Java SDK会自动使用Base64编码的字节数.万一发生了一些奇怪的事情,我在转换前尝试了base64编码字节:

imgBytes = Base64.getEncoder().encode(imgBytes);
Run Code Online (Sandbox Code Playgroud)

但是,同样的例外随之而来.

有任何想法吗?:)

mic*_*zer 5

我尝试将图像编码为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);
Run Code Online (Sandbox Code Playgroud)