1

我正在使用 Amazon Rekognition。我找到了一个非常好的/简单的库来从我的网络摄像头中获取图像,它的工作原理是这样的:

BufferedImage bufImg = webcam.getImage();

然后,我尝试将其转换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);

但是,当我尝试使用 对 Rekognition 进行一些 API 调用时Image,我得到一个异常:

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

文档声明 Java SDK 将自动对字节进行 base64 编码。万一发生了一些奇怪的事情,我尝试在转换之前对字节进行 base64 编码:

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

然而,同样的异常也随之而来。

有任何想法吗?:)

4

1 回答 1

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);
于 2017-01-08T00:45:09.713 回答