я получаю сообщение об ошибке при запросе Google Видение API:Google Cloud Зрение API - «образ-аннотатор :: искаженная ошибка обработки запроса .: Изображение»
{
"responses" : [ {
"error" : {
"code" : 3,
"message" : "image-annotator::Malformed request.: Image processing error!"
}
} ]
}
Я прошел PDF-файл, который содержит изображения и затем экстрагируют изображение с помощью pdfbox
создать AnnotateImageRequest
лист
List<AnnotateImageRequest> visionRequests = new ArrayList<>();
PDDocument document = PDDocument.load(pdfDatastream);
for (PDPage page : document.getPages()) {
PDResources resources = page.getResources();
for (COSName xObjectName : resources.getXObjectNames()) {
PDXObject pdxObject = resources.getXObject(xObjectName);
if (pdxObject instanceof PDImageXObject) {
byte[] imageArray = Base64.encodeBase64(IOUtils.toByteArray(((PDImageXObject) pdxObject).createInputStream()));
System.out.println("image >>"+imageArray.length);
Image image = new Image();
image.encodeContent(imageArray);
Feature feature = new Feature();
feature.setType("TEXT_DETECTION");
AnnotateImageRequest annotateImageRequest = new AnnotateImageRequest();
annotateImageRequest.setImage(image);
annotateImageRequest.setFeatures(Arrays.asList(feature));
visionRequests.add(annotateImageRequest);
}
}
}
И передал список, созданный выше для зрения обслуживания:
BatchAnnotateImagesResponse visionSrvcResponse = visionSrvc.images().annotate(new BatchAnnotateImagesRequest().setRequests(visionRequests)).execute();
System.out.println(visionSrvcResponse.toPrettyString());
Я также попытался удалить base64 кодирование ByteArray изображения, но все-таки получить ту же ошибку в списке на длину ByteArray, top.The является «»
Есть ли то, что мне не хватает, потому что, когда я умножить изображение на сервлет и передать байты, полученные из входного потока, он отлично работает.
Я бегу приложения на Tomcat V8
dependecies использованы:
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.13</version>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-vision</artifactId>
<version>v1-rev24-1.22.0</version>
</dependency>
'PDImageXObject.createInputStream()' поставляет raw pi xel без информации о размере. Это то, что нужно API Google? PDFBox также может возвращать 'BufferedImage' с' PDImageXObject.getImage() ', вы можете сохранить его с помощью ImageIO.write() в поток. EncodeContent не объясняет, что ему нужно. https://developers.google.com/resources/api-libraries/documentation/vision/v1/java/latest/com/google/api/services/vision/v1/model/Image.html#encodeContent (байт []) –
Я не знаю внутренних деталей. Я тоже видел тот же javadoc, а затем закодировал поток изображения, используя 'com.google.api.client.util.Base64'. – akgaur
Можете ли вы попробовать то, что я упомянул в своем первом комментарии, или вам нужен код? Идея состоит в том, что вы пишете в ByteArrayOutputStream, а затем берете массив байтов, затем делаете материал encode64, который вы уже делаете. –