java - 计算机视觉快速入门不适用于 Java
问题描述
我是计算机视觉的新手,我正在尝试实现以下(示例),但它总是向我发送相同的错误:
出了点问题:无法从操作位置提取操作 ID
/**
* OCR with READ : Performs a Read Operation on a local image
* @param client instantiated vision client
* @param localFilePath local file path from which to perform the read operation against
*/
private static void ReadFromFile(ComputerVisionClient client) {
System.out.println("-----------------------------------------------");
String localFilePath = "C:\\main\\resources\\file.pdf";
System.out.println("Read with local file: " + localFilePath);
try {
File rawImage = new File(localFilePath);
byte[] localImageBytes = Files.readAllBytes(rawImage.toPath());
// Cast Computer Vision to its implementation to expose the required methods
ComputerVisionImpl vision = (ComputerVisionImpl) client.computerVision();
// Read in remote image and response header
ReadInStreamHeaders responseHeader =
vision.readInStreamWithServiceResponseAsync(localImageBytes, null, null)
.toBlocking()
.single()
.headers();
String operationLocation = responseHeader.operationLocation();
System.out.println("Operation Location:" + operationLocation);
getAndPrintReadResult(vision, operationLocation);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
/**
* Polls for Read result and prints results to console
* @param vision Computer Vision instance
* @return operationLocation returned in the POST Read response header
*/
private static void getAndPrintReadResult(ComputerVision vision, String operationLocation) throws InterruptedException {
System.out.println("Polling for Read results ...");
// Extract OperationId from Operation Location
String operationId = extractOperationIdFromOpLocation(operationLocation);
boolean pollForResult = true;
ReadOperationResult readResults = null;
while (pollForResult) {
// Poll for result every second
Thread.sleep(1000);
readResults = vision.getReadResult(UUID.fromString(operationId));
// The results will no longer be null when the service has finished processing the request.
if (readResults != null) {
// Get request status
OperationStatusCodes status = readResults.status();
if (status == OperationStatusCodes.FAILED || status == OperationStatusCodes.SUCCEEDED) {
pollForResult = false;
}
}
}
// Print read results, page per page
for (ReadResult pageResult : readResults.analyzeResult().readResults()) {
System.out.println("");
System.out.println("Printing Read results for page " + pageResult.page());
StringBuilder builder = new StringBuilder();
for (Line line : pageResult.lines()) {
builder.append(line.text());
builder.append("\n");
}
System.out.println(builder.toString());
}
}
//The error marks it in this method since it cannot extract the operation id
/**
* Extracts the OperationId from a Operation-Location returned by the POST Read operation
* @param operationLocation
* @return operationId
*/
private static String extractOperationIdFromOpLocation(String operationLocation) {
if (operationLocation != null && !operationLocation.isEmpty()) {
String[] splits = operationLocation.split("/");
if (splits != null && splits.length > 0) {
return splits[splits.length - 1];
}
}
throw new IllegalStateException("Something went wrong: Couldn't extract the operation id from the operation location");
}
如果您能帮助我了解我的错误是什么或我做错了什么,我将不胜感激。
解决方案
似乎您只遵循快速入门中的一部分。在此之前,您还应该设置环境并设置您的主要方法、订阅 ID 和密钥。请关注整个文档:https ://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/quickstarts-sdk/client-library?tabs=visual-studio&pivots=programming-language-java
推荐阅读
- amazon-web-services - 如何使用自定义图像构建我的 lambda
- json - 如何强制为嵌套数组完全显示 JSON
- html - Gulp 不支持 SCSS '@use'?
- javascript - 使用 Ajax 脚本发送单选按钮值
- swiftui - 致命错误:索引超出范围:从数组中删除元素时文件 Swift/ContiguousArrayBuffer.swift
- reactjs - React Hook:依赖注入
- matlab - 在 '1970-01-01 00:00:00.0 0:00' 这种格式中,在 'nc' 文件的时间单位中给出的这个额外的 '0:00' 是什么?
- flutter - 密码不匹配时颤振显示错误
- android - 如何删除 (HTTPLog)-Static: isSBSettingEnabled false?
- python - 在没有现有显式索引的情况下旋转/重塑 DataFrame