2017-07-25 7 views
9

के साथ Google विजन बैच एनोटेट छवियां प्रदान की गई जावा क्लाइंट Google दृष्टि का उपयोग करके Google विजन के माध्यम से छवियों को एनोटेट करने का प्रयास करते समय मुझे अपवाद मिल रहा है।जावा क्लाइंट लाइब्रेरी

विशेष रूप से

इस कोड को जहां बैच client.batchAnnotateImages होती है:

public void processOCR(byte[] file) 
{ 
    List<AnnotateImageRequest> requests = new ArrayList<>(); 

     ByteString imageByteString = ByteString.copyFrom(file); 

     Image img = Image.newBuilder().setContent(imageByteString).build(); 
     Feature feat = Feature.newBuilder().setType(Type.DOCUMENT_TEXT_DETECTION).build(); 

     AnnotateImageRequest request = AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); 
     requests.add(request); 

     try (ImageAnnotatorClient client = ImageAnnotatorClient.create()) 
     { 

     BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); 
     List<AnnotateImageResponse> responses = response.getResponsesList(); 
     client.close(); 

     //visionResultsDTO result = new visionResultsDTO(); 
     String ParagraphText = ""; 


     for (AnnotateImageResponse res : responses) { 
      if (res.hasError()) { 
      //throw exception. 
      return; 
      } 

      // For full list of available annotations, see http://g.co/cloud/vision/docs 
      TextAnnotation annotation = res.getFullTextAnnotation(); 
      for (Page page: annotation.getPagesList()) { 
      String pageText = ""; 
      for (Block block : page.getBlocksList()) { 
      String blockText = ""; 
       for (Paragraph para : block.getParagraphsList()) { 
       String paraText = ""; 
       for (Word word: para.getWordsList()) { 
        String wordText = ""; 
       for (Symbol symbol: word.getSymbolsList()) { 
        wordText = wordText + symbol.getText(); 
        } 
       paraText = paraText + wordText; 
       } 
       // Output Example using Paragraph: 
       blockText = blockText + paraText; 
       } 
       pageText = pageText + blockText; 
      } 
      } 
      ParagraphText = annotation.getText(); 
     // result.setResultText(ParagraphText); 
     } 
     } catch (Exception e) 
     { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
} 

मैं निम्नलिखित स्टैक ट्रेस/त्रुटि के साथ प्रस्तुत किया जा रहा है:

:

java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor; at com.google.api.gax.retrying.BasicRetryingFuture.(BasicRetryingFuture.java:77) at com.google.api.gax.retrying.CallbackChainRetryingFuture.(CallbackChainRetryingFuture.java:62) at com.google.api.gax.retrying.ScheduledRetryingExecutor.createFuture(ScheduledRetryingExecutor.java:86) at com.google.api.gax.grpc.RetryingCallable.futureCall(RetryingCallable.java:57) at com.google.api.gax.grpc.RetryingCallable.futureCall(RetryingCallable.java:42) at com.google.api.gax.grpc.AuthCallable.futureCall(AuthCallable.java:57) at com.google.api.gax.grpc.UnaryCallable.futureCall(UnaryCallable.java:282) at com.google.api.gax.grpc.UnaryCallable.futureCall(UnaryCallable.java:293) at com.google.api.gax.grpc.UnaryCallable.call(UnaryCallable.java:321) at com.google.cloud.vision.v1.ImageAnnotatorClient.batchAnnotateImages(ImageAnnotatorClient.java:201) at com.google.cloud.vision.v1.ImageAnnotatorClient.batchAnnotateImages(ImageAnnotatorClient.java:177) at za.co.thumbtribe.core.googlevision.service.impl.GoogleVisionServiceImpl.processOCR(GoogleVisionServiceImpl.java:55)

यहाँ मेरी पोम निर्भरता हैं

<dependencies> 
<!-- Spring --> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>4.2.5.RELEASE</version> 
    <scope>compile</scope> 
</dependency> 
<dependency> 
    <groupId>com.google.cloud</groupId> 
    <artifactId>google-cloud-vision</artifactId> 
    <version>0.20.3-beta</version> 
    <exclusions> 
    <exclusion> 
     <groupId>com.google.auth</groupId> 
     <artifactId>google-auth-library-oauth2-http</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>com.google.auth</groupId> 
     <artifactId>google-auth-library-credentials</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>com.google.guava</groupId> 
    <artifactId>*</artifactId> 
</exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>com.google.auth</groupId> 
    <artifactId>google-auth-library-oauth2-http</artifactId> 
    <version>0.7.0</version> 
</dependency> 
<dependency> 
    <groupId>com.google.auth</groupId> 
    <artifactId>google-auth-library-credentials</artifactId> 
    <version>0.7.0</version> 
</dependency> 

</dependencies> 

मैंने अमरूद को छोड़कर ए के कई संस्करणों को शामिल करने का प्रयास किया है पीआई।

दिखाया गया कोड Google दृष्टि क्लाइंट कार्यान्वयन से नमूना कोड है।

कोई विचार?

उत्तर

6

गायब विधि directExecutorMoreExecutors कक्षा में @since 18.0 को अमरूद के स्रोतों में एनोटेट किया गया है (source देखें)।

मैं आप उस संस्करण 19.

पहले दिखाई देने वाला आप अपराधी को ट्रैक करने mvn dependency:analyze चलाना चाहिए अमरूद के एक पुराने संस्करण अपने classpath में है लगता है। आउटपुट फ़िल्टर करने के लिए आप mvn dependency:analyze | grep guava कर सकते हैं।

तो फिर तुम देख सकते हैं कि पैकेज के साथ पुराने निर्भरता आयात करता है:

mvn dependency:tree -Dverbose

1

, पर similar question

मूल रूप से एक नजर डालें अमरूद डुप्लिकेट निर्भरता को हटा दें।

  1. ग्रहण पर ओपन pom.xml खोलें।
  2. "निर्भरता" टैब में बदलें। फिल्टर पर
  3. , टेक्स्ट "अमरूद"।
  4. यदि एक से अधिक lib संस्करण हैं, पुरानी पर राइट क्लिक करें और "मेवेन आर्टिफैक्ट को बाहर करें"।
  5. रन मेवेन क्लीन।
  6. रन मेवेन बिल्ड।

सबसे अच्छा स्मृति उपयोग के लिए, मैं इस कोड StringBuffer कहां StringBuilder का उपयोग करने के बजाय स्ट्रिंग concat StringBuffer ou StringBuilder का पुनर्लेखन हिस्सा सुझाव देते हैं।

1

आप google-cloud-vision निर्भरता से अमरूद बाहर रखा गया (क्योंकि संस्करण वर्ष मैं लगता है कि हो सकता है) लेकिन आप संस्करण आप एक निर्भरता के रूप में की जरूरत को जोड़ने नहीं हैं:

<dependency> 
    <groupId>com.google.guava</groupId> 
    <artifactId>guava</artifactId> 
    <version>22.0</version> 
</dependency> 

google-auth-library-oauth2-http भी अमरूद के संस्करण सहित जाता है: com.google.guava:guava:jar:19.0:compile।मैं आप निर्भरता के रूप में अमरूद का एक संस्करण जोड़ रहा हूं, आप

से एक को बाहर करना चाह सकते हैं
संबंधित मुद्दे