我正在玩Amazon Rekognition。我发现一个真正的nice/easy library可以从我的网络摄像头拍摄图像,其工作方式如下:

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);


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

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


Java SDK将自动对字节进行base64编码的docs状态。万一发生奇怪的事情,我尝试在转换之前尝试对字节进行base64编码:

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


但是,也会发生相同的异常。

有任何想法吗? :)

最佳答案

我尝试将图像编码为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);

关于java - 将BufferedImage转换为aws…rekognition.model.Image,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41527687/

10-10 15:37