快速入門:使用讀取用戶端程式庫或 REST API

開始使用讀取 REST API 或用戶端程式庫。 讀取服務會為您提供 AI 演算法,以便從影像中解壓縮可見的文字,並將其傳回為結構化字串。 請遵循下列步驟將套件安裝至您的應用程式,並試用基本工作的程式碼範例。

使用 OCR 用戶端程式庫,從影像讀取印刷和手寫文字。

參考文件 | 程式庫來源程式碼 | 套件 (NuGet) | 範例

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • Visual Studio IDE 或目前版本的 .NET Core
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立電腦視覺資源,以取得您的金鑰和端點。 在其部署後,按一下 [前往資源]。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 電腦視覺服務。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。

設定

建立新的 C# 應用程式

使用 Visual Studio,建立新的 .NET Core 應用程式。

安裝用戶端程式庫

建立新專案後,以滑鼠右鍵按一下 [方案總管] 中的專案解決方案,然後選取 [管理 NuGet 套件],以安裝用戶端程式庫。 在開啟的套件管理員中,選取 [瀏覽]、核取 [包含發行前版本],然後搜尋 Microsoft.Azure.CognitiveServices.Vision.ComputerVision。 選取版本 7.0.0,然後 安裝

提示

想要立刻檢視整個快速入門程式碼檔案嗎? 您可以在 GitHub 上找到該檔案,其中包含本快速入門中的程式碼範例。

從專案目錄,在慣用的編輯器或 IDE 中開啟 Program.cs 檔案。

尋找訂用帳戶金鑰和端點

前往 Azure 入口網站。 如果您在 [必要條件] 區段中建立的電腦視覺資源成功部署,請按一下 [後續步驟] 底下的 [前往資源] 按鈕。 您可以在資源的 [ 金鑰和端點 ] 頁面的 [ 資源管理] 下,找到您的訂用帳戶金鑰和端點。

在應用程式的 Program 類別中,為您的電腦視覺訂用帳戶金鑰和端點建立變數。 將您的訂用帳戶金鑰和端點貼到下列程式碼中(如有指示)。 您電腦視覺端點的格式為 https://<your_computer_vision_resource_name>.cognitiveservices.azure.com/

using System;
using System.Collections.Generic;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Threading;
using System.Linq;

namespace ComputerVisionQuickstart
{
    class Program
    {
        // Add your Computer Vision subscription key and endpoint
        static string subscriptionKey = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE";
        static string endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE";

重要

當您完成時,請記得從程式碼中移除訂用帳戶金鑰,而不要公開張貼。 在生產環境中,請考慮使用安全的方式來儲存及存取您的認證。 例如,Azure金鑰保存庫

在應用程式的 Main 方法中,針對本快速入門中使用的方法新增呼叫。 您稍後會建立這些呼叫。

ComputerVisionClient client = Authenticate(endpoint, subscriptionKey);

// Extract text (OCR) from a URL image using the Read API
ReadFileUrl(client, READ_TEXT_URL_IMAGE).Wait();

物件模型

下列類別和介面會處理 OCR .NET SDK 的一些主要功能。

Name 描述
ComputerVisionClient 所有電腦視覺功能都需要此類別。 您可以使用訂用帳戶資訊來具現化此類別,並使用它來進行大部分的影像作業。
ComputerVisionClientExtensions 此類別包含 ComputerVisionClient 的其他方法。

程式碼範例

這些程式碼片段會示範如何使用適用于 .NET 的 OCR 用戶端程式庫來執行下列工作:

驗證用戶端

Program 類別的新方法中,使用您的端點和訂用帳戶金鑰來具現化用戶端。 使用您的訂用帳戶金鑰建立 >apikeyserviceclientcredentials 物件,並將它與您的端點搭配使用,以建立 ComputerVisionClient 物件。

/*
 * AUTHENTICATE
 * Creates a Computer Vision client used by each example.
 */
public static ComputerVisionClient Authenticate(string endpoint, string key)
{
    ComputerVisionClient client =
      new ComputerVisionClient(new ApiKeyServiceClientCredentials(key))
      { Endpoint = endpoint };
    return client;
}

讀取印刷和手寫文字

OCR 服務可以讀取影像中的可見文字,並將它轉換成字元資料流。 如需文字辨識的詳細資訊,請參閱 光學字元辨識 (OCR) 總覽。 本節中的程式碼使用最新的 電腦視覺 SDK 版本進行讀取 3.0 ,並定義方法,此方法會 BatchReadFileUrl 使用用戶端物件來偵測和解壓縮影像中的文字。

提示

您也可以從本機影像擷取文字。 請參閱 ComputerVisionClient 方法,例如 ReadInStreamAsync。 或如需本機影像的相關案例,請參閱 GitHub 上的範例程式碼。

設定測試影像

在 [程式] 類別中,儲存您要從中擷取文字的影像 URL 參考。 此程式碼片段包含印刷和手寫文字的範例影像。

private const string READ_TEXT_URL_IMAGE = "https://intelligentkioskstore.blob.core.windows.net/visionapi/suggestedphotos/3.png";

呼叫讀取 API

定義用來讀取文字的新方法。 新增下面的程式碼,針對指定的影像呼叫 ReadAsync 方法。 這會傳回作業識別碼並啟動非同步程序來讀取影像的內容。

/*
 * READ FILE - URL 
 * Extracts text. 
 */
public static async Task ReadFileUrl(ComputerVisionClient client, string urlFile)
{
    Console.WriteLine("----------------------------------------------------------");
    Console.WriteLine("READ FILE FROM URL");
    Console.WriteLine();

    // Read text from URL
    var textHeaders = await client.ReadAsync(urlFile);
    // After the request, get the operation location (operation ID)
    string operationLocation = textHeaders.OperationLocation;
    Thread.Sleep(2000);

取得讀取結果

接下來,取得從 ReadAsync 呼叫傳回的作業識別碼,並使用該識別碼來查詢服務中的作業結果。 下列程式碼會檢查作業,直到傳回結果為止。 然後,它會將已解壓縮的文字資料輸出到主控台。

// Retrieve the URI where the extracted text will be stored from the Operation-Location header.
// We only need the ID and not the full URL
const int numberOfCharsInOperationId = 36;
string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);

// Extract the text
ReadOperationResult results;
Console.WriteLine($"Extracting text from URL file {Path.GetFileName(urlFile)}...");
Console.WriteLine();
do
{
    results = await client.GetReadResultAsync(Guid.Parse(operationId));
}
while ((results.Status == OperationStatusCodes.Running ||
    results.Status == OperationStatusCodes.NotStarted));

顯示讀取結果

新增下列程式碼,以剖析並顯示已擷取的文字資料,並完成方法定義。

    // Display the found text.
    Console.WriteLine();
    var textUrlFileResults = results.AnalyzeResult.ReadResults;
    foreach (ReadResult page in textUrlFileResults)
    {
        foreach (Line line in page.Lines)
        {
            Console.WriteLine(line.Text);
        }
    }
    Console.WriteLine();
}

執行應用程式

按一下 IDE 視窗頂端的 [偵錯] 按鈕,以執行應用程式。

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已瞭解如何安裝 OCR 用戶端程式庫,並使用讀取 API。 接下來,深入瞭解讀取 API 功能。

使用「光學字元辨識」用戶端程式庫,以讀取 API 來讀取印刷和手寫文字。

參考文件 | 程式庫原始程式碼 | 套件 (PiPy) | 範例

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶

  • Python 3.x

    • 您的 Python 安裝應包含 pip。 您可以 pip --version 在命令列上執行來檢查是否已安裝 pip。 安裝最新版本的 Python 以取得 pip。
  • 擁有 Azure 訂用帳戶之後,請 在 Azure 入口網站中建立電腦視覺資源, 以取得您的金鑰和端點。 在其部署後,按一下 [前往資源]。

    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 電腦視覺服務。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。

設定

安裝用戶端程式庫

您可以使用下列命令來安裝用戶端程式庫:

pip install --upgrade azure-cognitiveservices-vision-computervision

也可以安裝 Pillow 程式庫。

pip install pillow

建立新的 Python 應用程式

提示

想要立刻檢視整個快速入門程式碼檔案嗎? 您可以在 GitHub 上找到該檔案,其中包含本快速入門中的程式碼範例。

建立新的 Python 指令碼,例如 —quickstart-file.py。 然後在您慣用的編輯器或 IDE 中開啟它。

尋找訂用帳戶金鑰和端點

前往 Azure 入口網站。 如果您在 [必要條件] 區段中建立的電腦視覺資源成功部署,請按一下 [後續步驟] 底下的 [前往資源] 按鈕。 您可以在資源的 [ 金鑰和端點 ] 頁面的 [ 資源管理] 下,找到您的訂用帳戶金鑰和端點。

為您的電腦視覺訂用帳戶金鑰和端點建立變數。 將您的訂用帳戶金鑰和端點貼到下列程式碼中(如有指示)。 您電腦視覺端點的格式為 https://<your_computer_vision_resource_name>.cognitiveservices.azure.com/

from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials

from array import array
import os
from PIL import Image
import sys
import time

'''
Authenticate
Authenticates your credentials and creates a client.
'''
subscription_key = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE"
endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE"

重要

當您完成時,請記得從程式碼中移除訂用帳戶金鑰,而不要公開張貼。 在生產環境中,請考慮使用安全的方式來儲存及存取您的認證。 例如,Azure金鑰保存庫

物件模型

下列類別和介面會處理 OCR Python SDK 的一些主要功能。

Name 描述
ComputerVisionClientOperationsMixin 此類別會直接處理所有影像作業,例如影像分析、文字偵測和縮圖產生。
ComputerVisionClient 所有電腦視覺功能都需要此類別。 您可以使用訂用帳戶資訊來具現化此類別,並用其來產生其他類別的執行個體。 它會實作 ComputerVisionClientOperationsMixin
VisualFeatureTypes 此列舉會定義可在標準分析作業中完成的不同影像分析類型。 視您的需求而定,您可以指定一組 VisualFeatureTypes 值。

程式碼範例

這些程式碼片段會示範如何使用適用于 Python 的 OCR 用戶端程式庫來執行下列工作:

驗證用戶端

使用端點和金鑰來具現化用戶端。 使用金鑰建立 CognitiveServicesCredentials 物件,並使用該物件與您的端點建立 ComputerVisionClient 物件。

computervision_client = ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))

讀取印刷和手寫文字

OCR 服務可以讀取影像中的可見文字,並將它轉換成字元資料流。 您可以分兩個部分執行此作業。

呼叫讀取 API

首先,使用下列程式碼來呼叫指定影像的 read 方法。 這會傳回作業識別碼並啟動非同步程序來讀取影像的內容。

'''
OCR: Read File using the Read API, extract text - remote
This example will extract text in an image, then print results, line by line.
This API call can also extract handwriting style text (not shown).
'''
print("===== Read File - remote =====")
# Get an image with text
read_image_url = "https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/master/articles/cognitive-services/Computer-vision/Images/readsample.jpg"

# Call API with URL and raw response (allows you to get the operation location)
read_response = computervision_client.read(read_image_url,  raw=True)

提示

您也可以從本機影像讀取文字。 請參閱 ComputerVisionClientOperationsMixin 方法,例如 read_in_stream。 或如需本機影像的相關案例,請參閱 GitHub 上的範例程式碼。

取得讀取結果

接下來,取得從 read 呼叫傳回的作業識別碼,並使用該識別碼來查詢服務中的作業結果。 下列程式碼會以一秒的間隔檢查作業,直到傳回結果為止。 然後,它會將已解壓縮的文字資料輸出到主控台。

# Get the operation location (URL with an ID at the end) from the response
read_operation_location = read_response.headers["Operation-Location"]
# Grab the ID from the URL
operation_id = read_operation_location.split("/")[-1]

# Call the "GET" API and wait for it to retrieve the results 
while True:
    read_result = computervision_client.get_read_result(operation_id)
    if read_result.status not in ['notStarted', 'running']:
        break
    time.sleep(1)

# Print the detected text, line by line
if read_result.status == OperationStatusCodes.succeeded:
    for text_result in read_result.analyze_result.read_results:
        for line in text_result.lines:
            print(line.text)
            print(line.bounding_box)
print()

執行應用程式

使用快速入門檔案上使用 python 命令執行應用程式。

python quickstart-file.py

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已瞭解如何安裝 OCR 用戶端程式庫,並使用讀取 API。 接下來,深入瞭解讀取 API 功能。

使用光學字元辨識用戶端程式庫來讀取影像中的印刷和手寫文字。

參考文件 | 程式庫原始程式碼 |成品 (Maven) | 範例

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 最新版的 Java Development Kit (JDK)
  • Gradle 建置工具,或其他相依性管理員。
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立電腦視覺資源,以取得您的金鑰和端點。 在其部署後,按一下 [前往資源]。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 電腦視覺服務。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。

設定

建立新的 Gradle 專案

在主控台視窗 (例如 cmd、PowerShell 或 Bash) 中,為您的應用程式建立新的目錄,並瀏覽至該目錄。

mkdir myapp && cd myapp

從您的工作目錄執行 gradle init 命令。 此命令會建立 Gradle 的基本組建檔案,包括 build.gradle.kts,此檔案將在執行階段用來建立及設定您的應用程式。

gradle init --type basic

出現選擇 DSL 的提示時,請選取 [Kotlin]。

安裝用戶端程式庫

本快速入門會使用 Gradle 相依性管理員。 您可以在 Maven 中央存放庫中找到用戶端程式庫和其他相依性管理員的資訊。

找出 build.gradle.kts,並使用您慣用的 IDE 或文字編輯器加以開啟。 然後,在其中複製下列組建組態。 此設定會將專案定義為 JAVA 應用程式,而該應用程式的進入點是 ComputerVisionQuickstart 類別。 這會匯入電腦視覺程式庫。

plugins {
    java
    application
}
application { 
    mainClass.set("ComputerVisionQuickstart")
}
repositories {
    mavenCentral()
}
dependencies {
    implementation(group = "com.microsoft.azure.cognitiveservices", name = "azure-cognitiveservices-computervision", version = "1.0.6-beta")
}

建立 Java 檔案

在您的工作目錄中執行下列命令,以建立專案來源資料夾:

mkdir -p src/main/java

提示

想要立刻檢視整個快速入門程式碼檔案嗎? 您可以在 GitHub 上找到該檔案,其中包含本快速入門中的程式碼範例。

流覽至新的資料夾,並建立名為 ComputerVisionQuickstart 的檔案。 在您慣用的編輯器或 IDE 中開啟它。

尋找訂用帳戶金鑰和端點

前往 Azure 入口網站。 如果您在 [必要條件] 區段中建立的電腦視覺資源成功部署,請按一下 [後續步驟] 底下的 [前往資源] 按鈕。 您可以在資源的 [ 金鑰和端點 ] 頁面的 [ 資源管理] 下,找到您的訂用帳戶金鑰和端點。

定義類別 ComputerVisionQuickstart。 為您的電腦視覺訂用帳戶金鑰和端點建立變數。 將您的訂用帳戶金鑰和端點貼到下列程式碼中(如有指示)。 您電腦視覺端點的格式為 https://<your_computer_vision_resource_name>.cognitiveservices.azure.com/

import com.microsoft.azure.cognitiveservices.vision.computervision.*;
import com.microsoft.azure.cognitiveservices.vision.computervision.implementation.ComputerVisionImpl;
import com.microsoft.azure.cognitiveservices.vision.computervision.models.*;

import java.io.*;
import java.nio.file.Files;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class ComputerVisionQuickstart {

    static String subscriptionKey = "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE";
    static String endpoint = "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE";

重要

當您完成時,請記得從程式碼中移除訂用帳戶金鑰,而不要公開張貼。 在生產環境中,請考慮使用安全的方式來儲存及存取您的認證。 例如,Azure金鑰保存庫

在應用程式的 main 方法中,針對本快速入門中使用的方法新增呼叫。 稍後您會定義這些項目。

public static void main(String[] args) {
    
    System.out.println("\nAzure Cognitive Services Computer Vision - Java Quickstart Sample");

    // Create an authenticated Computer Vision client.
    ComputerVisionClient compVisClient = Authenticate(subscriptionKey, endpoint); 

    // Read from local file
    ReadFromFile(compVisClient);
}

物件模型

下列類別和介面會處理 OCR JAVA SDK 的一些主要功能。

Name 描述
ComputerVisionClient 所有電腦視覺功能都需要此類別。 您可以使用訂用帳戶資訊來具現化此類別,並用其來產生其他類別的執行個體。

程式碼範例

這些程式碼片段會示範如何使用適用于 JAVA 的 OCR 用戶端程式庫來執行下列工作:

驗證用戶端

在新方法中,使用端點和金鑰將 ComputerVisionClient 物件具現化。

public static ComputerVisionClient Authenticate(String subscriptionKey, String endpoint){
    return ComputerVisionManager.authenticate(subscriptionKey).withEndpoint(endpoint);
}

讀取印刷和手寫文字

OCR 服務可以讀取影像中的可見文字,並將它轉換成字元資料流。 此區段會定義一個方法 ReadFromFile,該方法採用本機檔案路徑並將影像的文字列印到主控台。

提示

您也可以讀取由 URL 參考之遠端影像中的文字。 請參閱 ComputerVision 方法,例如 read。 或如需遠端影像的相關案例,請參閱 GitHub 上的範例程式碼。

設定測試影像

在專案的 src/main/ 資料夾中建立 resources/ 資料夾,然後新增您想要從中讀取文字的影像。 您可以下載要在這裡使用的範例映像

然後,將下列方法定義新增至您的 ComputerVisionQuickstart 類別。 請變更 localFilePath 的值,以符合您的影像檔案。

/**
 * 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 = "src\\main\\resources\\myImage.png";
    System.out.println("Read with local file: " + localFilePath);

呼叫讀取 API

然後,新增下列程式碼,以針對指定的映像呼叫 readInStreamWithServiceResponseAsync 方法。


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();

下列程式碼區塊會從讀取呼叫的回應中擷取作業識別碼。 其使用此識別碼搭配 Helper 方法,將文字讀取結果列印到主控台。

// Extract the operationLocation from the response header
String operationLocation = responseHeader.operationLocation();
System.out.println("Operation Location:" + operationLocation);

getAndPrintReadResult(vision, operationLocation);

關閉 try/catch 區塊和方法定義。


    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
}

取得讀取結果

然後,新增 Helper 方法的定義。 這個方法會使用前一個步驟中的作業識別碼來查詢讀取作業,並在有 OCR 結果可用時加以取得。

/**
 * 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;
            }
        }
    }

此方法的其餘部分會剖析 OCR 結果,並將其列印到主控台。

    // 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());
    }
}

最後,新增上面使用的其他 Helper 方法,此方法會從初始回應中擷取作業識別碼。

/**
 * 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");
}

執行應用程式

您可以使用下列命令來建置應用程式:

gradle build

使用 gradle run 命令執行應用程式:

gradle run

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已瞭解如何安裝 OCR 用戶端程式庫,並使用讀取 API。 接下來,深入瞭解讀取 API 功能。

使用「光學字元辨識」用戶端程式庫,以讀取 API 來讀取印刷和手寫文字。

參考文件 | 程式庫來源程式碼 | 套件 (npm) | 範例

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 最新版的 Node.js
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立電腦視覺資源,以取得您的金鑰和端點。 在其部署後,按一下 [前往資源]。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 電腦視覺服務。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。

設定

建立新的 Node.js 應用程式

在主控台視窗 (例如 cmd、PowerShell 或 Bash) 中,為您的應用程式建立新的目錄,並瀏覽至該目錄。

mkdir myapp && cd myapp

執行命令 npm init,以使用 package.json 檔案建立節點應用程式。

npm init

安裝用戶端程式庫

安裝 ms-rest-azure@azure/cognitiveservices-computervision NPM 套件:

npm install @azure/cognitiveservices-computervision

也請安裝 async 模組:

npm install async

您應用程式的 package.json 檔案會隨著相依性而更新。

提示

想要立刻檢視整個快速入門程式碼檔案嗎? 您可以在 GitHub 上找到該檔案,其中包含本快速入門中的程式碼範例。

建立新檔案 index.js,並在文字編輯器中開啟它。

尋找訂用帳戶金鑰和端點

前往 Azure 入口網站。 如果您在 [必要條件] 區段中建立的電腦視覺資源成功部署,請按一下 [後續步驟] 底下的 [前往資源] 按鈕。 您可以在資源的 [ 金鑰和端點 ] 頁面的 [ 資源管理] 下,找到您的訂用帳戶金鑰和端點。

為您的電腦視覺訂用帳戶金鑰和端點建立變數。 將您的訂用帳戶金鑰和端點貼到下列程式碼中(如有指示)。 您電腦視覺端點的格式為 https://<your_computer_vision_resource_name>.cognitiveservices.azure.com/

'use strict';

const async = require('async');
const fs = require('fs');
const https = require('https');
const path = require("path");
const createReadStream = require('fs').createReadStream
const sleep = require('util').promisify(setTimeout);
const ComputerVisionClient = require('@azure/cognitiveservices-computervision').ComputerVisionClient;
const ApiKeyCredentials = require('@azure/ms-rest-js').ApiKeyCredentials;

/**
 * AUTHENTICATE
 * This single client is used for all examples.
 */
const key = 'PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE';
const endpoint = 'PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE';

重要

當您完成時,請記得從程式碼中移除訂用帳戶金鑰,而不要公開張貼。 在生產環境中,請考慮使用安全的方式來儲存及存取您的認證。 例如,Azure金鑰保存庫

物件模型

下列類別和介面會處理 OCR Node.js SDK 的一些主要功能。

Name 描述
ComputerVisionClient 所有電腦視覺功能都需要此類別。 您可以使用訂用帳戶資訊來具現化此類別,並使用它來進行大部分的影像作業。

程式碼範例

這些程式碼片段會示範如何使用適用于 Node.js 的 OCR 用戶端程式庫來執行下列工作:

驗證用戶端

使用端點和金鑰來具現化用戶端。 使用您的金鑰和端點建立 ApiKeyCredentials 物件,然後使用該物件建立 ComputerVisionClient 物件。

const computerVisionClient = new ComputerVisionClient(
  new ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': key } }), endpoint);

然後,定義函式 computerVision,然後使用主要函式和回呼函式宣告非同步序列。 在腳本結束時,您將完成此函式定義並加以呼叫。

function computerVision() {
  async.series([
    async function () {

讀取印刷和手寫文字

OCR 服務可以將影像中的可見文字解壓縮,並將其轉換成字元資料流。 這個範例會使用讀取作業。

設定測試影像

儲存您要從中擷取文字之影像的 URL 參考。

// URL images containing printed and/or handwritten text. 
// The URL can point to image files (.jpg/.png/.bmp) or multi-page files (.pdf, .tiff).
const printedTextSampleURL = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg';
const multiLingualTextURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/MultiLingual.png';
const mixedMultiPagePDFURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/MultiPageHandwrittenForm.pdf';

注意

您也可以從本機影像讀取文字。 請參閱 ComputerVisionClient 方法,例如 readInStream。 或如需本機影像的相關案例,請參閱 GitHub 上的範例程式碼。

呼叫讀取 API

在您的函式中定義下列欄位,以表示讀取呼叫狀態值。

// Status strings returned from Read API. NOTE: CASING IS SIGNIFICANT.
// Before Read 3.0, these are "Succeeded" and "Failed"
const STATUS_SUCCEEDED = "succeeded";
const STATUS_FAILED = "failed"

新增下面的程式碼,以針對指定的影像呼叫 readTextFromURL 函式。

// Recognize text in printed image from a URL
console.log('Read printed text from URL...', printedTextSampleURL.split('/').pop());
const printedResult = await readTextFromURL(computerVisionClient, printedTextSampleURL);
printRecText(printedResult);

// Recognize multi-lingual text in a PNG from a URL
console.log('\nRead printed multi-lingual text in a PNG from URL...', multiLingualTextURL.split('/').pop());
const multiLingualResult = await readTextFromURL(computerVisionClient, multiLingualTextURL);
printRecText(multiLingualResult);

// Recognize printed text and handwritten text in a PDF from a URL
console.log('\nRead printed and handwritten text from a PDF from URL...', mixedMultiPagePDFURL.split('/').pop());
const mixedPdfResult = await readTextFromURL(computerVisionClient, mixedMultiPagePDFURL);
printRecText(mixedPdfResult);

定義 readTextFromURL 函式。 這會在用戶端物件上呼叫 read 方法,以傳回作業識別碼並啟動非同步程序來讀取影像的內容。 然後系統會使用作業識別碼來檢查作業狀態,直到傳回結果為止。 接著會傳回擷取的結果。

// Perform read and await the result from URL
async function readTextFromURL(client, url) {
  // To recognize text in a local image, replace client.read() with readTextInStream() as shown:
  let result = await client.read(url);
  // Operation ID is last path segment of operationLocation (a URL)
  let operation = result.operationLocation.split('/').slice(-1)[0];

  // Wait for read recognition to complete
  // result.status is initially undefined, since it's the result of read
  while (result.status !== STATUS_SUCCEEDED) { await sleep(1000); result = await client.getReadResult(operation); }
  return result.analyzeResult.readResults; // Return the first page of result. Replace [0] with the desired page if this is a multi-page file such as .pdf or .tiff.
}

然後,定義協助程式函式 printRecText,此函式會將讀取作業的結果輸出到主控台。

// Prints all text from Read result
function printRecText(readResults) {
  console.log('Recognized text:');
  for (const page in readResults) {
    if (readResults.length > 1) {
      console.log(`==== Page: ${page}`);
    }
    const result = readResults[page];
    if (result.lines.length) {
      for (const line of result.lines) {
        console.log(line.words.map(w => w.text).join(' '));
      }
    }
    else { console.log('No recognized text.'); }
  }
}

關閉函數

關閉函式 computerVision 並加以呼叫。


    },
    function () {
      return new Promise((resolve) => {
        resolve();
      })
    }
  ], (err) => {
    throw (err);
  });
}

computerVision();

執行應用程式

使用快速入門檔案上使用 node 命令執行應用程式。

node index.js

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已瞭解如何安裝 OCR 用戶端程式庫,並使用讀取 API。 接下來,深入瞭解讀取 API 功能。

使用 OCR 用戶端程式庫,從影像讀取印刷和手寫文字。

參考文件 | 程式庫原始程式碼 | 套件

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 最新版的 Go
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立電腦視覺資源,以取得您的金鑰和端點。 在其部署後,按一下 [前往資源]。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 電腦視覺服務。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。

設定

建立 Go 專案目錄

在主控台視窗 (cmd、PowerShell、Bash) 中,為您的 Go 專案建立新的工作區 my-app,並瀏覽至該工作區。

mkdir -p my-app/{src, bin, pkg}  
cd my-app

您的工作區將包含三個資料夾:

  • src - 此目錄將包含原始程式碼和套件。 任何使用 go get 命令安裝的套件都將位於此目錄中。
  • pkg - 此目錄將包含已編譯的 Go 套件物件。 這些檔案都具有 .a 副檔名。
  • bin - 此目錄將包含您執行 go install 時所建立的二進位可執行檔。

提示

若要深入了解 Go 工作區的結構,請參閱 Go 語言文件。 本指南包含用來設定 $GOPATH$GOROOT 的資訊。

安裝適用於 Go 的用戶端程式庫

然後,安裝適用於 Go 的用戶端程式庫:

go get -u https://github.com/Azure/azure-sdk-for-go/tree/master/services/cognitiveservices/v2.1/computervision

或者,如果您使用 dep,請在存放庫中執行:

dep ensure -add https://github.com/Azure/azure-sdk-for-go/tree/master/services/cognitiveservices/v2.1/computervision

建立 Go 應用程式

接著,在 src 目錄中建立名為 sample-app.go 的檔案:

cd src
touch sample-app.go

提示

想要立刻檢視整個快速入門程式碼檔案嗎? 您可以在 GitHub 上找到該檔案,其中包含本快速入門中的程式碼範例。

在您慣用的 IDE 或文字編輯器中開啟 sample-app.go

在腳本的根目錄宣告內容。 您將需要這個物件來執行大部分的電腦視覺函式呼叫。

尋找訂用帳戶金鑰和端點

前往 Azure 入口網站。 如果您在 [必要條件] 區段中建立的電腦視覺資源成功部署,請按一下 [後續步驟] 底下的 [前往資源] 按鈕。 您可以在資源的 [ 金鑰和端點 ] 頁面的 [ 資源管理] 下,找到您的訂用帳戶金鑰和端點。

為您的電腦視覺訂用帳戶金鑰和端點建立變數。 將您的訂用帳戶金鑰和端點貼到下列程式碼中(如有指示)。 您電腦視覺端點的格式為 https://<your_computer_vision_resource_name>.cognitiveservices.azure.com/

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v2.0/computervision"
    "github.com/Azure/go-autorest/autorest"
    "io"
    "log"
    "os"
    "strings"
    "time"
)

// Declare global so don't have to pass it to all of the tasks.
var computerVisionContext context.Context

func main() {
    computerVisionKey := "PASTE_YOUR_COMPUTER_VISION_SUBSCRIPTION_KEY_HERE"
    endpointURL := "PASTE_YOUR_COMPUTER_VISION_ENDPOINT_HERE"

重要

當您完成時,請記得從程式碼中移除訂用帳戶金鑰,而不要公開張貼。 在生產環境中,請考慮使用安全的方式來儲存及存取您的認證。 例如,Azure金鑰保存庫

接下來,您將開始新增程式碼來執行不同的 OCR 作業。

物件模型

下列類別和介面會處理 OCR Go SDK 的一些主要功能。

Name 描述
BaseClient 所有電腦視覺功能都需要此類別,例如影像分析和文字閱讀。 您可以使用訂用帳戶資訊來具現化此類別,並使用它來進行大部分的影像作業。
ReadOperationResult 此類型包含批次讀取作業的結果。

程式碼範例

這些程式碼片段會示範如何使用適用于 Go 的 OCR 用戶端程式庫來執行下列工作:

驗證用戶端

注意

此步驟假設您已針對名為 COMPUTER_VISION_SUBSCRIPTION_KEYCOMPUTER_VISION_ENDPOINT 的電腦視覺金鑰和端點建立環境變數

建立 main 函式,並在其中新增下列程式碼,以使用您的端點和金鑰具現化用戶端。

/*  
 * Configure the Computer Vision client
 */
computerVisionClient := computervision.New(endpointURL);
computerVisionClient.Authorizer = autorest.NewCognitiveServicesAuthorizer(computerVisionKey)

computerVisionContext = context.Background()
/*
 * END - Configure the Computer Vision client
 */

讀取印刷和手寫文字

OCR 服務可以讀取影像中的可見文字,並將它轉換成字元資料流。 本節中的程式碼會定義 RecognizeTextReadAPIRemoteImage 函式,其使用用戶端物件來偵測及擷取影像中的印刷或手寫文字。

在您的 main 函式中新增範例影像參考和函式呼叫。

// Analyze text in an image, remote
BatchReadFileRemoteImage(computerVisionClient, printedImageURL)

提示

您也可以從本機影像擷取文字。 請參閱 BaseClient 方法,例如 BatchReadFileInStream。 或如需本機影像的相關案例,請參閱 GitHub 上的範例程式碼。

呼叫讀取 API

定義用來讀取文字的新函式 RecognizeTextReadAPIRemoteImage。 新增下列程式碼,以針對指定的影像呼叫 BatchReadFile 方法。 此方法會傳回作業識別碼,並啟動非同步程序來讀取影像的內容。

func BatchReadFileRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("BATCH READ FILE - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // The response contains a field called "Operation-Location", 
    // which is a URL with an ID that you'll use for GetReadOperationResult to access OCR results.
    textHeaders, err := client.BatchReadFile(computerVisionContext, remoteImage)
    if err != nil { log.Fatal(err) }

    // Use ExtractHeader from the autorest library to get the Operation-Location URL
    operationLocation := autorest.ExtractHeaderValue("Operation-Location", textHeaders.Response)

    numberOfCharsInOperationId := 36
    operationId := string(operationLocation[len(operationLocation)-numberOfCharsInOperationId : len(operationLocation)])

取得讀取結果

接下來,取得從 BatchReadFile 呼叫傳回的作業識別碼,並將其用於 GetReadOperationResult 方法,以查詢服務中的作業結果。 下列程式碼會以一秒的間隔檢查作業,直到傳回結果為止。 然後,它會將已解壓縮的文字資料輸出到主控台。

readOperationResult, err := client.GetReadOperationResult(computerVisionContext, operationId)
if err != nil { log.Fatal(err) }

// Wait for the operation to complete.
i := 0
maxRetries := 10

fmt.Println("Recognizing text in a remote image with the batch Read API ...")
for readOperationResult.Status != computervision.Failed &&
        readOperationResult.Status != computervision.Succeeded {
    if i >= maxRetries {
        break
    }
    i++

    fmt.Printf("Server status: %v, waiting %v seconds...\n", readOperationResult.Status, i)
    time.Sleep(1 * time.Second)

    readOperationResult, err = client.GetReadOperationResult(computerVisionContext, operationId)
    if err != nil { log.Fatal(err) }
}

顯示讀取結果

新增下列程式碼,以剖析並顯示已擷取的文字資料,並完成函式定義。

// Display the results.
fmt.Println()
for _, recResult := range *(readOperationResult.RecognitionResults) {
    for _, line := range *recResult.Lines {
        fmt.Println(*line.Text)
    }
}

執行應用程式

使用 go run 命令從您的應用程式目錄執行應用程式。

go run sample-app.go

清除資源

如果您想要清除和移除認知服務訂用帳戶,則可以刪除資源或資源群組。 刪除資源群組也會刪除其關聯的任何其他資源。

後續步驟

在本快速入門中,您已瞭解如何安裝 OCR 用戶端程式庫,並使用讀取 API。 接下來,深入瞭解讀取 API 功能。

使用光學字元辨識 REST API 讀取印刷和手寫文字。

注意

本快速入門會使用 cURL 命令來呼叫 REST API。 您也可以使用程式設計語言來呼叫 REST API。 如需 C#PythonJavaJavaScriptGo 的範例,請參閱 GitHub 範例。

必要條件

  • Azure 訂用帳戶 - 建立免費帳戶
  • 擁有 Azure 訂用帳戶之後,在 Azure 入口網站中建立電腦視覺資源,以取得您的金鑰和端點。 在其部署後,按一下 [前往資源]。
    • 您需要來自所建立資源的金鑰和端點,以將應用程式連線至 電腦視覺服務。 您稍後會在快速入門中將金鑰和端點貼到下列程式碼中。
    • 您可以使用免費定價層 (F0) 來試用服務,之後可升級至付費層以用於實際執行環境。
  • 已安裝 cURL

讀取印刷和手寫文字

OCR 服務可以讀取影像中的可見文字,並將它轉換成字元資料流。 如需文字辨識的詳細資訊,請參閱 光學字元辨識 (OCR) 總覽

呼叫讀取 API

若要建立並執行範例,請執行下列步驟:

  1. 將下列命令複製到文字編輯器。
  2. 視需要在命令中進行下列變更:
    1. <subscriptionKey> 的值取代為您的訂用帳戶金鑰。
    2. 將要求 URL 的第一個部分 (westcentralus) 取代為您端點 URL 中的文字。

      注意

      2019 年 7 月 1 日之後建立的新資源會使用自訂的子網域名稱。 如需詳細資訊和完整的區域端點清單,請參閱認知服務的自訂子網域名稱

    3. (選擇性) 將要求本文 (https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Atomist_quote_from_Democritus.png/338px-Atomist_quote_from_Democritus.png\) 中的影像 URL 變更為要分析之不同影像的 URL。
  3. 開啟 [命令提示字元] 視窗。
  4. 將文字編輯器中的命令貼到命令提示字元視窗中,然後執行該命令。
curl -v -X POST "https://westcentralus.api.cognitive.microsoft.com/vision/v3.2/read/analyze" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: <subscription key>" --data-ascii "{\"url\":\"https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Atomist_quote_from_Democritus.png/338px-Atomist_quote_from_Democritus.png\"}"

回應會包含 Operation-Location 標頭,其值為唯一的 URL。 您可以使用此 URL 來查詢讀取作業的結果。 URL 會在 48 小時後過期。

取得讀取結果

  1. 將下列命令複製到文字編輯器。
  2. 將 URL 取代為您在上一個步驟中複製的 Operation-Location 值。
  3. 視需要在命令中進行下列變更:
    1. <subscriptionKey> 的值取代為您的訂用帳戶金鑰。
  4. 開啟 [命令提示字元] 視窗。
  5. 將文字編輯器中的命令貼到命令提示字元視窗中,然後執行該命令。
curl -v -X GET "https://westcentralus.api.cognitive.microsoft.com/vision/v3.2/read/analyzeResults/{operationId}" -H "Ocp-Apim-Subscription-Key: {subscription key}" --data-ascii "{body}" 

檢查回應

成功的回應會以 JSON 的形式傳回。 範例應用程式會在命令提示字元視窗中剖析並顯示成功的回應,如下列範例所示:

{
  "status": "succeeded",
  "createdDateTime": "2021-04-08T21:56:17.6819115+00:00",
  "lastUpdatedDateTime": "2021-04-08T21:56:18.4161316+00:00",
  "analyzeResult": {
    "version": "3.2",
    "readResults": [
      {
        "page": 1,
        "angle": 0,
        "width": 338,
        "height": 479,
        "unit": "pixel",
        "lines": [
          {
            "boundingBox": [
              25,
              14,
              318,
              14,
              318,
              59,
              25,
              59
            ],
            "text": "NOTHING",
            "appearance": {
              "style": {
                "name": "other",
                "confidence": 0.971
              }
            },
            "words": [
              {
                "boundingBox": [
                  27,
                  15,
                  294,
                  15,
                  294,
                  60,
                  27,
                  60
                ],
                "text": "NOTHING",
                "confidence": 0.994
              }
            ]
          }
        ]
      }
    ]
  }
}

後續步驟

在本快速入門中,您已瞭解如何呼叫讀取 REST API。 接下來,深入瞭解讀取 API 功能。