# #java #grails #google-cloud-vision
Вопрос:
Я провожу некоторые тесты распознавания текста с помощью Google Cloud Vision API. Код, предложенный на https://cloud.google.com/vision/docs/ocr#vision_text_detection-java работает нормально. Но мне нужно обновить старое приложение Grails 2.5.6 для реализации распознавания текста, и я попытался использовать тот же код для выполнения тех же тестов, но возникла следующая ошибка:
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());
}
}
}
}
Как я могу это решить? Заранее спасибо.