範例:建立表單辨識自訂技能 (封存)

此範例已封存且不支援。 它說明如何使用 C# 和 Visual Studio 建立表單辨識器自定義技能。

先決條件

  • Visual Studio (任何版本)。
  • 至少五種相同類型的形式。 您可以使用本指南所提供的範例數據。

建立表單辨識器資源

請參閱 建立窗體辨識器資源

訓練你的模型

在使用這項技能之前,您必須用輸入表單訓練表單辨識器模型。 使用表格識別器模型 說明如何訓練模型。 您可以使用範例資料或提供您自己的資料。

定型模型之後,將其標識碼值複製到安全的位置。

設定自定義技能

本教學課程使用 Azure 搜尋服務 Power Skills GitHub 存放庫中的 AnalyzeForm 專案。 將此存放庫複製到本機計算機,並流覽至 Vision/AnalyzeForm/ 以存取專案。 然後在 Visual Studio 中開啟 AnalyzeForm.csproj。 此專案會建立滿足自定義技能介面的 Azure Function 資源,並可用於 Azure 認知搜尋擴充。 它會採用表單檔做為輸入,並輸出您指定的索引鍵/值組(以文字形式)。

首先,新增專案層級環境變數。 在左窗格中找到 AnalyzeForm 專案,以滑鼠右鍵按兩下它,然後選取 [屬性] 。 在 [屬性] 視窗中,選取 [偵錯] 索引標籤,然後尋找 [環境變數] 字段。 選取 [],然後選擇 [新增] 以新增下列變數:

  • 將 FORMS_RECOGNIZER_ENDPOINT_URL 的值設定為您的端點 URL。
  • FORMS_RECOGNIZER_API_KEY 值設定為訂用帳戶金鑰。
  • FORMS_RECOGNIZER_MODEL_ID 值設定為您訓練之模型的識別碼。
  • FORMS_RECOGNIZER_RETRY_DELAY 值設定為 1000。 此值是程式在重試查詢之前所等候的時間,以毫秒為單位。
  • FORMS_RECOGNIZER_MAX_ATTEMPTS 值設定為100。 此值是程式在嘗試取得成功回應時查詢服務的次數。

接下來,開啟 AnalyzeForm.cs 並尋找參考 fieldMappings 檔案的 變數。 這個檔案(以及參考它的變數)會定義用來從窗體中擷取的鍵清單,以及每個鍵的自訂標籤。 例如,{ "Address:", "address" }, { "Invoice For:", "recipient" } 的值表示腳本只會儲存偵測到的 Address: 和 Invoice For: 欄位的值,而且會分別以 "address" 和 "recipient"標記這些值。

最後,記下 contentType 變數。 給定的指令碼會在 URL 所參考的遠端檔案上執行表單辨識模型,因此內容類型為 application/json。 如果您想要在 HTTP 要求中包含其位元組資料流來分析本機檔案,您必須將 contentType 變更為檔案的適當 MIME 類型。

從 Visual Studio 測試功能

編輯項目之後,請將它儲存並設定 AnalyzeForm 項目作為 Visual Studio 中的啟始專案(如果尚未設定)。 然後按 F5,在本機環境中執行函式。 使用 REST 服務,例如 Postman 來呼叫功能。

HTTP 要求

您將發出以下請求以呼叫函數。

POST http://localhost:7071/api/analyze-form

請求體

從請求正文範本開始

{
    "values": [
        {
            "recordId": "record1",
            "data": { 
                "formUrl": "<your-form-url>",
                "formSasToken": "<your-sas-token>"
            }
        }
    ]
}

在此,您需要提供與您訓練時使用之表單類型相同的表單 URL。 為了進行測試,您可以使用你的訓練表單。 如果您遵循 cURL 快速入門,您的表單會位於 Azure Blob 儲存帳戶中。 開啟 Azure 記憶體總管,找出表單檔,以滑鼠右鍵按鍵按下該檔案,然後選取 [取得共用存取簽章] 。 下一個對話框視窗會提供URL和SAS令牌。 分別在請求主體的 "formUrl" 和 "formSasToken" 欄位中輸入這些字串。

Azure 儲存體瀏覽器; 已選取 PDF 檔案

如果您想要分析不在 Azure Blob 記憶體中的遠端檔,請將其 URL 貼到 ["formUrl"] 字段中,並將 ["formSasToken"] 字段保留空白。

注意

當技能整合到技能集中時,認知搜尋會提供 URL 和 token。

回應

您應該會看到類似下列範例的回應:

{
    "values": [
        {
            "recordId": "record1",
            "data": {
                "address": "1111 8th st. Bellevue, WA 99501 ",
                "recipient": "Southridge Video 1060 Main St. Atlanta, GA 65024 "
            },
            "errors": null,
            "warnings": null
        }
    ]
}

將函式發佈至 Azure

當您滿意函式行為時,您可以發佈它。

  1. 在 Visual Studio 中的 [方案總管] 中,以滑鼠右鍵按專案,然後選取 [發佈]。 選擇 建立新>發行。
  2. 如果您尚未將 Visual Studio 連線至 Azure 帳戶,請選取 [[新增帳戶...]
  3. 遵循畫面上的提示。 指定應用程式服務、Azure 訂用帳戶、資源群組、主控方案和您想要使用的記憶體帳戶的唯一名稱。 如果您還沒有新的資源群組,您可以建立新的資源群組、新的主控方案和新的儲存體帳戶。 完成後,選擇 建立。
  4. 部署完成之後,請注意網站 URL。 此 URL 是 Azure 中函式應用程式的位址。 將它儲存到暫存位置。
  5. 在 Azure 入口網站的 中,瀏覽至 [資源群組],然後尋找您發佈的 AnalyzeForm 函數。 在 [管理] 區段底下,您應該會看到主機密鑰。 複製 預設 主機金鑰,並將它儲存到暫存位置。

連接到您的管道

若要在認知搜尋管線中使用此技能,您必須將技能定義新增至技能集。 下列 JSON 區塊是範例技能定義(您應該更新輸入和輸出,以反映您的特定案例和技能集環境)。 以函式 URL 取代 AzureFunctionEndpointUrl,並以主機金鑰取代 AzureFunctionDefaultHostKey。

{ 
  "description":"Skillset that invokes the Form Recognizer custom skill",
  "skills":[ 
    "[... your existing skills go here]",
    { 
      "@odata.type":"#Microsoft.Skills.Custom.WebApiSkill",
      "name":"formrecognizer",
      "description":"Extracts fields from a form using a pre-trained form recognition model",
      "uri":"[AzureFunctionEndpointUrl]/api/analyze-form?code=[AzureFunctionDefaultHostKey]",
      "httpMethod":"POST",
      "timeout":"PT30S",
      "context":"/document",
      "batchSize":1,
      "inputs":[ 
        { 
          "name":"formUrl",
          "source":"/document/metadata_storage_path"
        },
        { 
          "name":"formSasToken",
          "source":"/document/metadata_storage_sas_token"
        }
      ],
      "outputs":[ 
        { 
          "name":"address",
          "targetName":"address"
        },
        { 
          "name":"recipient",
          "targetName":"recipient"
        }
      ]
    }
  ]
}