2017-07-25 35 views
9

Otrzymuję wyjątek podczas próby dodawania adnotacji do obrazów za pomocą Google Vision przy użyciu podanego klienta google vision.Google Vision Batch Adnotacje obrazów z biblioteką klienta Java

konkretnie ten kod gdzie występuje client.batchAnnotateImages wsadowe:

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

Ja zapoznaniu się z poniższym ślad stosu/Error:

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)

Oto moje POM zależności:

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

Próbowałem z wyłączeniem guawy i włączając wiele wersji A LICZBA PI.

Przedstawiony kod jest przykładowym kodem implementacji klienta google vision.

jakieś pomysły?

Odpowiedz

6

Brakująca metoda directExecutor w MoreExecutors klasy jest opatrzona komentarzem @since 18.0 w źródłach guawy (patrz source).

Chyba masz w ścieżce klasy starszą wersję guawa, który pojawia się przed wersją 19.

Należy uruchomić mvn dependency:analyze wyśledzić sprawcę. Możesz mvn dependency:analyze | grep guava filtrować dane wyjściowe.

Następnie można sprawdzić, który pakiet importuje starą zależność z:

mvn dependency:tree -Dverbose

1

Spójrz na similar question

basicaly, usunąć duplikaty dependecy guawy.

  1. Otwórz pom.xml na eclipse.
  2. przejdź do zakładki "zależności".
  3. na filtrze, tekst "guawa".
  4. jeśli jest więcej niż jedna wersja lib, kliknij prawym przyciskiem myszy na stary i "wykreśl artefakt maven".
  5. uruchomić Maven Clean.
  6. uruchomić build maven.

Aby uzyskać najlepsze wykorzystanie pamięci, sugeruję przepisanie części tego kodu w celu użycia StringBuffer ou StringBuilder zamiast String concat StringBuffer ou StringBuilder.

1

można wykluczyć guawa z uzależnienia google-cloud-vision (ponieważ wersja może być stary chyba) ale nie dodajesz wersję trzeba jako zależność:

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

google-auth-library-oauth2-http też jest w tym wersji guawa: com.google.guava:guava:jar:19.0:compile.Dodaję wersję guawy jako zależność, możesz chcieć wykluczyć wersję z