偵測檔案中的文字

本頁面說明如何使用 Google Distributed Cloud (GDC) 無網路連線裝置上的光學字元辨識 (OCR) API,偵測檔案中的文字。

Vertex AI 的 OCR 服務會使用 BatchAnnotateFiles API 方法,偵測 GDC 無氣隙裝置上 PDF 和 TIFF 檔案中的文字。

事前準備

您必須先準備一個專案,並啟用 OCR API 和適當的憑證,才能開始使用 OCR API。您也可以安裝用戶端程式庫,協助您呼叫 API。詳情請參閱「設定字元辨識專案」。

使用內嵌要求偵測文字

BatchAnnotateFiles 方法會從批次的 PDF 或 TIFF 檔案中偵測文字。 您直接在 API 要求中傳送要偵測文字的檔案做為內容。系統會在 API 回應中,以 JSON 格式傳回偵測到的文字。

您必須在 API 要求的 JSON 主體中指定欄位值。下表說明使用 BatchAnnotateFiles API 方法發出文字偵測要求時,必須提供的要求主體欄位:

要求主體欄位 欄位說明
content 要偵測文字的檔案。您提供二進位檔案內容的 Base64 表示法 (ASCII 字串)。
mime_type 這是來源檔案類型你必須將其設為下列其中一個值:
  • application/pdf PDF 檔案
  • TIFF 檔案的 image/tiff
type 您要從檔案中偵測的文字類型。

指定其中一個註解功能:
  • TEXT_DETECTION 可偵測並擷取任何檔案中的文字。JSON 回應包含擷取的字串、個別字詞及其周框。
  • DOCUMENT_TEXT_DETECTION 也會從檔案中擷取文字,但這項服務會針對密集文字和文件最佳化回覆內容。JSON 檔案包含頁面、區塊、段落、字詞和換行資訊。
如要進一步瞭解這些註解功能,請參閱「光學字元辨識功能」。
language_hints (選用步驟) 用於文字偵測的語言清單。

如果這個欄位的值為空白,系統會解讀為自動偵測語言。

如果語言採用拉丁字母,則不需要設定 language_hints 欄位。

如果知道檔案中的文字語言,設定提示可提升結果品質。
pages (選用步驟) 要處理的檔案頁數,用於文字偵測。

最多可指定五個網頁。如未指定頁數,服務會處理檔案的前五頁。

提出內嵌 API 要求

使用 REST API 方法向 OCR 預先訓練的 API 提出要求。否則,請透過 Python 指令碼與 OCR 預先訓練的 API 互動,從 PDF 或 TIFF 檔案偵測文字。

下列範例說明如何使用 OCR 偵測檔案中的文字:

REST

如要使用 REST API 方法偵測檔案中的文字,請按照下列步驟操作:

  1. 請儲存下列 request.json 檔案做為要求主體:

    cat <<- EOF > request.json
    {
      "requests": [
        {
          "input_config": {
            "content": BASE64_ENCODED_FILE,
            "mime_type": "application/pdf"
          },
          "features": [
            {
              "type": "FEATURE_TYPE"
            }
          ],
          "image_context": {
            "language_hints": [
              "LANGUAGE_HINT_1",
              "LANGUAGE_HINT_2",
              ...
            ]
          },
          "pages": []
        }
      ]
    }
    EOF
    

    更改下列內容:

    • BASE64_ENCODED_FILE:二進位檔案內容的 Base64 表示法 (ASCII 字串)。這個字串開頭的字元與 /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q== 類似。
    • FEATURE_TYPE:您需要從檔案中偵測的文字類型。允許的值為 TEXT_DETECTIONDOCUMENT_TEXT_DETECTION
    • LANGUAGE_HINT:用來做為文字偵測語言提示的 BCP 47 語言代碼,例如 en-t-i0-handwrit。這個欄位為選填,系統會將空白值解讀為自動偵測語言。
  2. 取得驗證權杖

  3. 提出要求:

    curl

    curl -X POST \
      -H "Authorization: Bearer TOKEN" \
      -H "x-goog-user-project: projects/PROJECT_ID" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
      https://ENDPOINT/v1/files:annotate
    

    更改下列內容:

    PowerShell

    $headers = @{
      "Authorization" = "Bearer TOKEN"
      "x-goog-user-project" = "projects/PROJECT_ID"
    }
    
    Invoke-WebRequest
      -Method POST
      -Headers $headers
      -ContentType: "application/json; charset=utf-8"
      -InFile request.json
      -Uri "ENDPOINT/v1/files:annotate" | Select-Object -Expand Content
    

    更改下列內容:

Python

請按照下列步驟,透過 Python 指令碼使用 OCR 服務偵測檔案中的文字:

  1. 安裝最新版 OCR 用戶端程式庫

  2. 在 Python 指令碼中設定必要的環境變數

  3. 驗證 API 要求

  4. 在您建立的 Python 指令碼中新增下列程式碼:

    from google.cloud import vision
    import google.auth
    from google.auth.transport import requests
    from google.api_core.client_options import ClientOptions
    
    audience = "https://ENDPOINT:443"
    api_endpoint="ENDPOINT:443"
    
    def vision_client(creds):
      opts = ClientOptions(api_endpoint=api_endpoint)
      return vision.ImageAnnotatorClient(credentials=creds, client_options=opts)
    
    def main():
      creds = None
      try:
        creds, project_id = google.auth.default()
        creds = creds.with_gdch_audience(audience)
        req = requests.Request()
        creds.refresh(req)
        print("Got token: ")
        print(creds.token)
      except Exception as e:
        print("Caught exception" + str(e))
        raise e
      return creds
    
    def vision_func(creds):
      vc = vision_client(creds)
      input_config = {"content": "BASE64_ENCODED_FILE"}
      features = [{"type_": vision.Feature.Type.FEATURE_TYPE}]
      # Each requests element corresponds to a single file. To annotate more
      # files, create a request element for each file and add it to
      # the array of requests
      req = {"input_config": input_config, "features": features}
    
      metadata = [("x-goog-user-project", "projects/PROJECT_ID")]
    
      resp = vc.annotate_file(req,metadata=metadata)
    
      print(resp)
    
    if __name__=="__main__":
      creds = main()
      vision_func(creds)
    

    更改下列內容:

    • ENDPOINT:貴機構使用的 OCR 端點。詳情請參閱服務狀態和端點
    • BASE64_ENCODED_FILE:檔案內容的 Base64 表示法 (ASCII 字串)。這個字串開頭的字元與 /9j/4QAYRXhpZgAA...9tAVx/zDQDlGxn//2Q== 類似。
    • FEATURE_TYPE:您需要從檔案中偵測的文字類型。允許的值為 TEXT_DETECTIONDOCUMENT_TEXT_DETECTION
    • PROJECT_ID:您的專案 ID。
  5. 儲存 Python 指令碼。

  6. 執行 Python 指令碼,偵測檔案中的文字:

    python SCRIPT_NAME
    

    SCRIPT_NAME 替換為您為 Python 指令碼提供的名稱,例如 vision.py