在Android中使用Google Cloud Vision API客户端库时需要凭证抽象方法错误

时间:2019-11-20 05:08:20

标签: android google-cloud-platform google-cloud-vision vision-api

我正在尝试使用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();
        }
    }

谢谢。

0 个答案:

没有答案