この例はアーカイブされ、サポート対象外です。 C# と Visual Studio を使用して Form Recognizer カスタム スキルを作成する方法について説明しました。
前提 条件
- Visual Studio (任意のエディション)。
- 同じ型の少なくとも 5 つのフォーム。 このガイドに記載されているサンプル データを使用できます。
Form Recognizer リソースを作成する
Form Recognizer リソースの作成を参照してください
モデルをトレーニングする
このスキルを使用する前に、入力フォームで Form Recognizer モデルをトレーニングする必要があります。 Form Recognizer モデルを使用して、モデル をトレーニングする方法について説明します。 サンプル データを使用することも、独自のデータを提供することもできます。
モデルがトレーニングされたら、その ID 値を安全な場所にコピーします。
カスタム スキルを設定する
このチュートリアルでは、Azure Search Power Skills GitHub リポジトリの AnalyzeForm プロジェクトを使用します。 このリポジトリをローカル コンピューターに複製し、 Vision/AnalyzeForm/ に移動してプロジェクトにアクセスします。 次に、Visual Studio で AnalyzeForm.csproj を開きます。 このプロジェクトでは、カスタム スキル インターフェイスを満たし、Azure Cognitive Search エンリッチメントに使用できる Azure 関数リソースを作成します。 フォーム ドキュメントを入力として受け取り、指定したキーと値のペアを (テキストとして) 出力します。
まず、プロジェクト レベルの環境変数を追加します。 左側のウィンドウで AnalyzeForm プロジェクトを見つけて右クリックし、[ プロパティ] を選択します。 [ プロパティ ] ウィンドウで、[ デバッグ ] タブを選択し、[ 環境変数 ] フィールドを見つけます。 [ 追加] を選択して、次の変数を追加します。
-
FORMS_RECOGNIZER_ENDPOINT_URLの値をエンドポイント URL に設定します。 - サブスクリプション キーの値として
FORMS_RECOGNIZER_API_KEYを設定します。 - 値をトレーニングしたモデルの ID に設定して
FORMS_RECOGNIZER_MODEL_IDします。 -
FORMS_RECOGNIZER_RETRY_DELAYを1000に設定します。 この値は、プログラムがクエリを再試行するまでに待機する時間 (ミリ秒単位) です。 -
FORMS_RECOGNIZER_MAX_ATTEMPTSの値を100に設定します。 この値は、正常な応答を取得しようとしたときに、プログラムがサービスに対してクエリを実行する回数です。
次に、AnalyzeForm.csを開き、field-mappings.jsonファイルを参照するfieldMappings変数を見つけます。 このファイル (およびそれを参照する変数) は、フォームから抽出するキーの一覧と、各キーのカスタム ラベルを定義します。 たとえば、{ "Address:", "address" }, { "Invoice For:", "recipient" } の値は、スクリプトが検出された Address: フィールドと Invoice For: フィールドの値のみを保存し、それらの値にそれぞれ "address" と "recipient"のラベルを付けます。
最後に、contentType 変数に注意してください。 このスクリプトは、URL によって参照されるリモート ドキュメントに対して指定された Form Recognizer モデルを実行するため、コンテンツ タイプは application/json。 バイト ストリームを HTTP 要求に含めてローカル ファイルを分析する場合は、 contentType をファイルの適切な MIME の種類 に変更する必要があります。
Visual Studio から関数をテストする
プロジェクトを編集したら、プロジェクトを保存し、 AnalyzeForm プロジェクトを Visual Studio のスタートアップ プロジェクトとして設定します (まだ設定されていない場合)。 次に、F5 押して、ローカル環境で関数を実行します。 Postman などの REST サービスを使用して関数を呼び出します。
HTTP 要求
関数を呼び出すには、次の要求を行います。
POST http://localhost:7071/api/analyze-form
リクエストボディ
要求本文テンプレートから始める
{
"values": [
{
"recordId": "record1",
"data": {
"formUrl": "<your-form-url>",
"formSasToken": "<your-sas-token>"
}
}
]
}
ここでは、トレーニングしたフォームと同じ種類のフォームの URL を指定する必要があります。 テスト目的で、いずれかのトレーニング フォームを使用できます。 cURL クイック スタートに従った場合、フォームは Azure Blob Storage アカウントに配置されます。 Azure Storage Explorer を開き、フォーム ファイルを見つけて右クリックし、[ Shared Access Signature の取得] を選択します。 次のダイアログ ウィンドウには、URL と SAS トークンが表示されます。 要求本文の "formUrl" フィールドと "formSasToken" フィールドに、これらの文字列をそれぞれ入力します。
Azure Blob Storage にないリモート ドキュメントを分析する場合は、その URL を "formUrl" フィールドに貼り付け、"formSasToken" フィールドを空白のままにします。
手記
スキルがスキルセットに統合されている場合、URL とトークンは Cognitive Search によって提供されます。
応答
次の例のような応答が表示されます。
{
"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 に発行する
関数の動作に満足したら、公開できます。
- Visual Studio の ソリューション エクスプローラー で、プロジェクトを右クリックし、[発行] を選択 します。 [ 新規作成>Publish] を選択します。
- Visual Studio を Azure アカウントにまだ接続していない場合は、[アカウントの追加...] を選択します。
- 画面の指示に従います。 アプリ サービス、Azure サブスクリプション、リソース グループ、ホスティング プラン、使用するストレージ アカウントの一意の名前を指定します。 新しいリソース グループ、新しいホスティング プラン、新しいストレージ アカウントをまだ作成していない場合は、作成できます。 完了したら、[ 作成] を選択します。
- デプロイが完了したら、サイトの URL に注目してください。 この URL は、Azure の関数アプリのアドレスです。 一時的な場所に保存します。
-
Azure portal でリソース グループに移動し、発行した
AnalyzeForm関数を探します。 [ の管理] セクションに、[ホスト キー] が表示されます。 既定のホスト キーをコピーし、一時的な場所に保存します。
パイプラインに接続する
Cognitive Search パイプラインでこのスキルを使用するには、スキルセットにスキル定義を追加する必要があります。 次の JSON ブロックは、サンプル スキル定義です (特定のシナリオとスキルセット環境を反映するように入力と出力を更新する必要があります)。
AzureFunctionEndpointUrl を関数の URL に置き換え、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"
}
]
}
]
}