2016-09-21 14 views
0

я получаю сообщение об ошибке при запросе 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> 
+0

'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 (байт []) –

+0

Я не знаю внутренних деталей. Я тоже видел тот же javadoc, а затем закодировал поток изображения, используя 'com.google.api.client.util.Base64'. – akgaur

+1

Можете ли вы попробовать то, что я упомянул в своем первом комментарии, или вам нужен код? Идея состоит в том, что вы пишете в ByteArrayOutputStream, а затем берете массив байтов, затем делаете материал encode64, который вы уже делаете. –

ответ

1

Благодаря Tilman Hausherr

Я изменил код в соответствии с его предложением, и он работает:

if (pdxObject instanceof PDImageXObject) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageIO.write(((PDImageXObject) pdxObject).getImage(), "jpg", baos); 
    baos.flush(); 
    byte[] imageInByte = baos.toByteArray(); 

    Image image = new Image(); 
    image.encodeContent(imageInByte); 

    Feature feature = new Feature(); 
    feature.setType("TEXT_DETECTION"); 

    AnnotateImageRequest annotateImageRequest = new AnnotateImageRequest(); 
    annotateImageRequest.setImage(image); 
    annotateImageRequest.setFeatures(Arrays.asList(feature)); 
    visionRequests.add(annotateImageRequest); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^