0
我正在一個錯誤,而谷歌查詢API願景:谷歌雲願景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());
我也試圖消除圖像字節組的64位編碼,但仍坐上top.The ByteArray的長度列出了同樣的錯誤是「」
有一些東西,我很想念,因爲當我將多部分圖像添加到servlet並傳遞從輸入流中獲取的bytearray,它可以正常工作。
我在Tomcat V8運行的應用程序使用
依賴條件:
<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()'傳遞原始pi xel數據沒有任何大小信息。這是谷歌API需要什麼? PDFBox也可以用'PDImageXObject.getImage()'返回一個'BufferedImage',然後你可以用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的東西。 –