首页 > 解决方案 > Grails 2.x 和 Google Cloud Vision API“java”错误

问题描述

我正在使用 Google Cloud Vision API 进行一些 OCR 测试。https://cloud.google.com/vision/docs/ocr#vision_text_detection-java建议的代码工作正常。但是我需要更新一个旧的 Grails 2.5.6 应用程序来实现 OCR,我尝试使用相同的代码进行相同的测试,但产生了以下错误:

Error |
java.io.IOException: Cannot run program "java" (in directory "/home/manuel/IdeaProjects/googleVisionTest"): error=2, No such file or directory
Error |
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
Error |
    at org.codehaus.groovy.grails.cli.fork.ForkedGrailsProcess.fork(ForkedGrailsProcess.groovy:309)
Error |
    at org.grails.plugins.tomcat.fork.ForkedTomcatServer.fork(ForkedTomcatServer.groovy)
Error |
    at org.codehaus.groovy.grails.cli.fork.ForkedGrailsProcess.fork(ForkedGrailsProcess.groovy:264)
Error |
    at org.grails.plugins.tomcat.fork.ForkedTomcatServer.fork(ForkedTomcatServer.groovy)
Error |
    at org.grails.plugins.tomcat.fork.ForkedTomcatServer$_startSecure_closure6.doCall(ForkedTomcatServer.groovy:171)
Error |
    at org.grails.plugins.tomcat.fork.ForkedTomcatServer$_startSecure_closure6.call(ForkedTomcatServer.groovy)
Error |
    at groovy.lang.Closure.run(Closure.java:495)
Error |
    at org.grails.plugins.tomcat.fork.ForkedTomcatServer$_startSecure_closure6.run(ForkedTomcatServer.groovy)
Error |
    at java.lang.Thread.run(Thread.java:748)
Error |
Caused by: java.io.IOException: error=2, No such file or directory
Error |
    at java.lang.UNIXProcess.forkAndExec(Native Method)
Error |
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
Error |
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
Error |
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
Error |
    ... 9 more

仅出于测试目的,我在 Bootstrap.groovy 中编写了建议的代码,如下所示:

import com.google.cloud.vision.v1.AnnotateImageRequest
import com.google.cloud.vision.v1.AnnotateImageResponse
import com.google.cloud.vision.v1.BatchAnnotateImagesResponse
import com.google.cloud.vision.v1.EntityAnnotation
import com.google.cloud.vision.v1.Feature
import com.google.cloud.vision.v1.Image
import com.google.cloud.vision.v1.ImageAnnotatorClient
import com.google.protobuf.ByteString

class BootStrap {

    def init = { servletContext ->
        def realPath = servletContext.getRealPath("/reports/images/")
        def fileName = "${realPath}/1.png"
        detectText(fileName)
    }
    def destroy = {
    }

    def detectText(String filePath) throws IOException {
        List<AnnotateImageRequest> requests = new ArrayList<>();

        ByteString imgBytes = ByteString.readFrom(new FileInputStream(filePath));

        Image img = Image.newBuilder().setContent(imgBytes).build();
        Feature feat = Feature.newBuilder().setType(Feature.Type.TEXT_DETECTION).build();
        AnnotateImageRequest request =
                AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build();
        requests.add(request);

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

        for (AnnotateImageResponse res : responses) {
            if (res.hasError()) {
                System.out.format("Error: %s%n", res.getError().getMessage());
                return;
            }

            for (EntityAnnotation annotation : res.getTextAnnotationsList()) {
                System.out.format("Text: %s%n", annotation.getDescription());
                System.out.format("Position : %s%n", annotation.getBoundingPoly());
            }
        }
    }
}

我该如何解决这个问题?提前致谢。

标签: javagrailsgoogle-cloud-vision

解决方案


推荐阅读