我正在尝试使用Android中用于Java的Google云视觉API客户端库来实现PDF / TIFF OCR,该文档最近于2019年9月作为Google云视觉的一部分发布。 我尝试了图像OCR和PDF OCR功能进行测试,但出现了与以下相同的错误。
2019-11-20 10:27:57.743 21907-23077/com.akhil.googlepdfocrexample E/UncaughtException: java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:354)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.AbstractMethodError: abstract method "boolean com.google.api.gax.rpc.TransportChannelProvider.needsCredentials()"
at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:152)
at com.google.cloud.vision.v1.stub.GrpcImageAnnotatorStub.create(GrpcImageAnnotatorStub.java:63)
at com.google.cloud.vision.v1.stub.ImageAnnotatorStubSettings.createStub(ImageAnnotatorStubSettings.java:93)
at com.google.cloud.vision.v1.ImageAnnotatorClient.<init>(ImageAnnotatorClient.java:131)
at com.google.cloud.vision.v1.ImageAnnotatorClient.create(ImageAnnotatorClient.java:112)
at com.akhil.googlepdfocrexample.MainActivity.detectDocumentText(MainActivity.java:145)
at com.akhil.googlepdfocrexample.MainActivity$OCR.doInBackground(MainActivity.java:106)
at com.akhil.googlepdfocrexample.MainActivity$OCR.doInBackground(MainActivity.java:92)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
我的代码:
public void detectDocumentText(InputStream filePath) throws Exception {
try{
List<AnnotateImageRequest> requests = new ArrayList<>();
ByteString imgBytes = ByteString.readFrom(filePath);
Image img = Image.newBuilder().setContent(imgBytes).build();
Feature feat = Feature.newBuilder().setType(Feature.Type.DOCUMENT_TEXT_DETECTION).build();
AnnotateImageRequest request =
AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
requests.add(request);
//Server key json file into InputStream to use in Google Credentials below
InputStream inStream_auth = getApplicationContext().getResources().openRawResource(R.raw.google_vision_pdf);
GoogleCredentials credentials = GoogleCredentials.fromStream(inStream_auth) .createScoped(Lists.newArrayList(Collections.singleton("https://www.googleapis.com/auth/cloud-platform/")));
//Setting up Google credentials to ImageAnnotatorSettings.
ImageAnnotatorSettings ias = ImageAnnotatorSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credentials))
.build();
//Setting ImageAnnotatorSettings(ias) to ImageAnnotatorClient.
ImageAnnotatorClient client = ImageAnnotatorClient.create(ias);
BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests);
List<com.google.cloud.vision.v1.AnnotateImageResponse> responses = response.getResponsesList();
client.close();
for (AnnotateImageResponse res : responses) {
if (res.hasError()) {
Log.d("Akhillll","Error: \n"+res.getError().getMessage());
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();
Log.d("Akhillll","Symbol text: "+symbol.getText()+" (confidence: "+symbol.getConfidence());
}
Log.d("Akhillll","Word text: "+ wordText+" (confidence: "+word.getConfidence());
paraText = String.format("%s %s", paraText, wordText);
}
// Output Example using Paragraph:
Log.d("Akhillll","\nParagraph: \n" + paraText);
Log.d("Akhillll","Paragraph Confidence: "+ para.getConfidence());
blockText = blockText + paraText;
}
pageText = pageText + blockText;
}
}
Log.d("Akhillll","\nComplete annotation:");
Log.d("Akhillll",annotation.getText());
}
}catch (Exception e){
e.printStackTrace();
}
}
谢谢。