在使用提供的Google Vision Java客户端对图像进行注释时,我遇到了异常。
具体地说,是在批处理客户端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();
}
}
我收到了以下堆栈跟踪/错误:
这是我的 POM 依赖: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>
我尝试过排除guava并包含API的多个版本。
所示代码是google vision客户端实现的示例代码。
有什么想法吗?