Azure AI ドキュメント インテリジェンスは、機械学習テクノロジを利用して自動データ処理ソフトウェアを構築できる Azure AI サービスです。 ドキュメント インテリジェンスを使用すると、ドキュメントからテキスト、キーと値のペア、選択マーク、テーブル データなどを識別して抽出できます。 結果は、元のファイル内の関係を含む構造化データとして出力されます。 コンテナーは、提供されたデータのみを処理し、アクセスが許可されているリソースのみを利用します。 コンテナーは、他のリージョンのデータを処理できません。
この記事では、ドキュメント インテリジェンス コンテナーをダウンロード、インストール、実行する方法について説明します。 コンテナーを使用すると、独自の環境でドキュメント インテリジェンス サービスを実行できます。 コンテナーは、特定のセキュリティ要件とデータ ガバナンス要件に適しています。
ホストとは、Docker コンテナーを実行する x64 ベースのコンピューターのことです。 お客様のオンプレミス上のコンピューターを使用できるほか、次のような Azure 内の Docker ホスティング サービスを使用することもできます。
次のコード サンプルは、ドキュメント インテリジェンス レイアウト コンテナーを実行する自己完結 docker compose
型の例です。 docker compose
では、YAML ファイルを使用してアプリケーションのサービスを構成します。 次に、docker-compose up
コマンドを使用して、構成からすべてのサービスを作成し、開始します。 レイアウト コンテナー インスタンスの {FORM_RECOGNIZER_ENDPOINT_URI} と {FORM_RECOGNIZER_KEY} の値を入力します。
version: "3.9"
services:
azure-form-recognizer-read:
container_name: azure-form-recognizer-read
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/read-3.1
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
ports:
- "5000:5000"
networks:
- ocrvnet
networks:
ocrvnet:
driver: bridge
これで、docker compose コマンドを使用してサービスを開始できます。
docker-compose up
次のコード サンプルは、ドキュメント インテリジェンス一般ドキュメント コンテナーを実行する自己完結 docker compose
の例です。 docker compose
では、YAML ファイルを使用してアプリケーションのサービスを構成します。 次に、docker-compose up
コマンドを使用して、構成からすべてのサービスを作成し、開始します。 一般的なドキュメント コンテナー インスタンスとレイアウト コンテナー インスタンスの {FORM_RECOGNIZER_ENDPOINT_URI} と {FORM_RECOGNIZER_KEY} の値を入力します。
version: "3.9"
services:
azure-cognitive-service-document:
container_name: azure-cognitive-service-document
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/document-3.0
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
- AzureCognitiveServiceLayoutHost=http://azure-cognitive-service-layout:5000
ports:
- "5000:5050"
azure-cognitive-service-layout:
container_name: azure-cognitive-service-layout
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.0
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
これで、docker compose コマンドを使用してサービスを開始できます。
docker-compose up
マシン上のリソースを考えると、一般的なドキュメント コンテナーの起動に時間がかかる場合があります。
次のコード サンプルは、ドキュメント インテリジェンス レイアウト コンテナーを実行する自己完結 docker compose
型の例です。 docker compose
では、YAML ファイルを使用してアプリケーションのサービスを構成します。 次に、docker-compose up
コマンドを使用して、構成からすべてのサービスを作成し、開始します。 レイアウト コンテナー インスタンスの {FORM_RECOGNIZER_ENDPOINT_URI} と {FORM_RECOGNIZER_KEY} の値を入力します。
version: "3.9"
services:
azure-form-recognizer-layout:
container_name: azure-form-recognizer-layout
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.1
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
ports:
- "5000:5000"
networks:
- ocrvnet
networks:
ocrvnet:
driver: bridge
これで、docker compose コマンドを使用してサービスを開始できます。
docker-compose up
次のコード サンプルは、ドキュメント インテリジェンス請求書コンテナーを実行する自己完結 docker compose
の例です。 docker compose
では、YAML ファイルを使用してアプリケーションのサービスを構成します。 次に、docker-compose up
コマンドを使用して、構成からすべてのサービスを作成し、開始します。 請求書コンテナーおよびレイアウト コンテナー インスタンスの {FORM_RECOGNIZER_ENDPOINT_URI} と {FORM_RECOGNIZER_KEY} の値を入力します。
3.0 GA および 3.1 GA 請求書モデルではどちらもアップストリームとして 3.1 GA レイアウト イメージを使用する必要があります。
version: "3.9"
services:
azure-cognitive-service-invoice:
container_name: azure-cognitive-service-invoice
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/invoice-3.1
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
- AzureCognitiveServiceLayoutHost=http://azure-cognitive-service-layout:5000
ports:
- "5000:5050"
azure-cognitive-service-layout:
container_name: azure-cognitive-service-layout
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.1
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
これで、docker compose コマンドを使用してサービスを開始できます。
docker-compose up
次のコード サンプルは、ドキュメント インテリジェンス一般ドキュメント コンテナーを実行する自己完結 docker compose
の例です。 docker compose
では、YAML ファイルを使用してアプリケーションのサービスを構成します。 次に、docker-compose up
コマンドを使用して、構成からすべてのサービスを作成し、開始します。 レシート コンテナーおよび読み取りコンテナー インスタンスの {FORM_RECOGNIZER_ENDPOINT_URI} と {FORM_RECOGNIZER_KEY} の値を入力します。
読み取りイメージの代わりに 3.1 GA レイアウト イメージをアップストリームとして使用することができます。
version: "3.9"
services:
azure-cognitive-service-receipt:
container_name: azure-cognitive-service-receipt
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/receipt-3.1
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
- AzureCognitiveServiceReadHost=http://azure-cognitive-service-read:5000
ports:
- "5000:5050"
azure-cognitive-service-read:
container_name: azure-cognitive-service-read
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/read-3.1
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
これで、docker compose コマンドを使用してサービスを開始できます。
docker-compose up
次のコード サンプルは、ドキュメント インテリジェンス一般ドキュメント コンテナーを実行する自己完結 docker compose
の例です。 docker compose
では、YAML ファイルを使用してアプリケーションのサービスを構成します。 次に、docker-compose up
コマンドを使用して、構成からすべてのサービスを作成し、開始します。 ID コンテナーおよび読み取りコンテナー インスタンスの {FORM_RECOGNIZER_ENDPOINT_URI} と {FORM_RECOGNIZER_KEY} の値を入力します。
読み取りイメージの代わりに 3.1 GA レイアウト イメージをアップストリームとして使用することができます。
version: "3.9"
services:
azure-cognitive-service-id-document:
container_name: azure-cognitive-service-id-document
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/id-document-3.1
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
- AzureCognitiveServiceReadHost=http://azure-cognitive-service-read:5000
ports:
- "5000:5050"
azure-cognitive-service-read:
container_name: azure-cognitive-service-read
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/read-3.1
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
これで、docker compose コマンドを使用してサービスを開始できます。
docker-compose up
version: "3.9"
services:
azure-cognitive-service-invoice:
container_name: azure-cognitive-service-businesscard
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/businesscard-3.0
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
- AzureCognitiveServiceLayoutHost=http://azure-cognitive-service-layout:5000
ports:
- "5000:5050"
azure-cognitive-service-layout:
container_name: azure-cognitive-service-layout
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.0
environment:
- EULA=accept
- billing={FORM_RECOGNIZER_ENDPOINT_URI}
- apiKey={FORM_RECOGNIZER_KEY}
カスタム ドキュメントを処理するには、前提条件に加えて、次のことを行う必要があります。
フォルダーを作成して以下のファイルを保存する
- このフォルダーに「files」という名前を付けます。
- このフォルダーのファイル パスは、{FILE_MOUNT_PATH} として参照します。
- ファイル パスを便利な場所にコピーします。それを .env ファイルに追加する必要があります。 たとえば、フォルダーが files という名前で、
docker-compose
ファイルと同じフォルダーにある場合、.env ファイルのエントリは FILE_MOUNT_PATH="./files"
になります
ドキュメント インテリジェンス サービスによって作成されたログの格納先フォルダーをローカル マシンに作成する
- このフォルダーに「output」という名前を付けます。
- このフォルダーのファイル パスは、{OUTPUT_MOUNT_PATH} として参照します。
- ファイル パスを便利な場所にコピーします。それを .env ファイルに追加する必要があります。 たとえば、フォルダーが output という名前で、
docker-compose
ファイルと同じフォルダーにある場合、.env ファイルのエントリは OUTPUT_MOUNT_PATH="./output"
になります
コンテナー間で共有される内部処理を格納するためのフォルダーを作成する
- このフォルダーに「shared」という名前を付けます。
- このフォルダーのファイル パスは、{SHARED_MOUNT_PATH} として参照します。
- ファイル パスを便利な場所にコピーします。それを .env ファイルに追加する必要があります。 たとえば、フォルダーが shared という名前で、
docker-compose
ファイルと同じフォルダーにある場合、.env ファイルのエントリは SHARED_MOUNT_PATH="./shared"
になります
- このフォルダーに「db」という名前を付けます。
- このフォルダーのファイル パスは、{DB_MOUNT_PATH} として参照します。
- ファイル パスを便利な場所にコピーします。それを .env ファイルに追加する必要があります。 たとえば、フォルダーが db という名前で、
docker-compose
ファイルと同じフォルダーにある場合、.env ファイルのエントリは DB_MOUNT_PATH="./db"
になります
環境ファイルを作成する
このファイルに「 .env」という名前を付けます。
以下の環境変数を宣言します。
SHARED_MOUNT_PATH="./shared"
OUTPUT_MOUNT_PATH="./output"
FILE_MOUNT_PATH="./files"
DB_MOUNT_PATH="./db"
FORM_RECOGNIZER_ENDPOINT_URI="YourFormRecognizerEndpoint"
FORM_RECOGNIZER_KEY="YourFormRecognizerKey"
NGINX_CONF_FILE="./nginx.conf"
nginx ファイルを作成する
このファイルに「nginx.conf」という名前を付けます。
次の構成を入力します。
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
client_max_body_size 90M;
upstream docker-custom {
server azure-cognitive-service-custom-template:5000;
}
upstream docker-layout {
server azure-cognitive-service-layout:5000;
}
server {
listen 5000;
location = / {
proxy_set_header Host $host:$server_port;
proxy_set_header Referer $scheme://$host:$server_port;
proxy_pass http://docker-custom/;
}
location /status {
proxy_pass http://docker-custom/status;
}
location /test {
return 200 $scheme://$host:$server_port;
}
location /ready {
proxy_pass http://docker-custom/ready;
}
location /swagger {
proxy_pass http://docker-custom/swagger;
}
location /formrecognizer/documentModels/prebuilt-layout {
proxy_set_header Host $host:$server_port;
proxy_set_header Referer $scheme://$host:$server_port;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'cache-control,content-type,ocp-apim-subscription-key,x-ms-useragent' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
add_header 'Access-Control-Expose-Headers' '*' always;
if ($request_method = 'OPTIONS') {
return 200;
}
proxy_pass http://docker-layout/formrecognizer/documentModels/prebuilt-layout;
}
location /formrecognizer/documentModels {
proxy_set_header Host $host:$server_port;
proxy_set_header Referer $scheme://$host:$server_port;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'cache-control,content-type,ocp-apim-subscription-key,x-ms-useragent' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE' always;
add_header 'Access-Control-Expose-Headers' '*' always;
if ($request_method = 'OPTIONS') {
return 200;
}
proxy_pass http://docker-custom/formrecognizer/documentModels;
}
location /formrecognizer/operations {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'cache-control,content-type,ocp-apim-subscription-key,x-ms-useragent' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE, PATCH' always;
add_header 'Access-Control-Expose-Headers' '*' always;
if ($request_method = OPTIONS ) {
return 200;
}
proxy_pass http://docker-custom/formrecognizer/operations;
}
}
}
docker compose ファイルを作成する
このファイルに「docker-compose.yml」という名前を付けます。
次のコード サンプルは、Document Intelligence のレイアウト、スタジオ、カスタム テンプレート コンテナーを一緒に実行する自己完結型の docker compose
の例です。 docker compose
では、YAML ファイルを使用してアプリケーションのサービスを構成します。 次に、docker-compose up
コマンドを使用して、構成からすべてのサービスを作成し、開始します。
version: '3.3'
services:
nginx:
image: nginx:alpine
container_name: reverseproxy
volumes:
- ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf
ports:
- "5000:5000"
layout:
container_name: azure-cognitive-service-layout
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.0:latest
environment:
eula: accept
apikey: ${FORM_RECOGNIZER_KEY}
billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
Logging:Console:LogLevel:Default: Information
SharedRootFolder: /shared
Mounts:Shared: /shared
Mounts:Output: /logs
volumes:
- type: bind
source: ${SHARED_MOUNT_PATH}
target: /shared
- type: bind
source: ${OUTPUT_MOUNT_PATH}
target: /logs
expose:
- "5000"
custom-template:
container_name: azure-cognitive-service-custom-template
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/custom-template-3.0:latest
restart: always
depends_on:
- layout
environment:
AzureCognitiveServiceLayoutHost: http://azure-cognitive-service-layout:5000
eula: accept
apikey: ${FORM_RECOGNIZER_KEY}
billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
Logging:Console:LogLevel:Default: Information
SharedRootFolder: /shared
Mounts:Shared: /shared
Mounts:Output: /logs
volumes:
- type: bind
source: ${SHARED_MOUNT_PATH}
target: /shared
- type: bind
source: ${OUTPUT_MOUNT_PATH}
target: /logs
expose:
- "5000"
studio:
container_name: form-recognizer-studio
image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/studio:3.0
environment:
ONPREM_LOCALFILE_BASEPATH: /onprem_folder
STORAGE_DATABASE_CONNECTION_STRING: /onprem_db/Application.db
volumes:
- type: bind
source: ${FILE_MOUNT_PATH} # path to your local folder
target: /onprem_folder
- type: bind
source: ${DB_MOUNT_PATH} # path to your local folder
target: /onprem_db
ports:
- "5001:5001"
user: "1000:1000" # echo $(id -u):$(id -g)
カスタム テンプレート コンテナーとレイアウト コンテナーでは、Azure Storage キューまたはメモリ内キューを使用できます。 Storage:ObjectStore:AzureBlob:ConnectionString
および queue:azure:connectionstring
環境変数は、Azure Storage キューを使用している場合にのみ設定する必要があります。 ローカルで実行する場合は、これらの変数を削除します。
サービスが実行されていることを確認する
サービスが稼働していることを確認するには、 Ubuntu シェルでこれらのコマンドを実行します。
$cd <folder containing the docker-compose file>
$source .env
$docker-compose up
カスタム テンプレート コンテナーは、いくつかの異なる構成を必要とし、その他のオプション構成をサポートしています。
設定 |
Required |
Description |
EULA |
はい |
ライセンスへの同意の例: Eula=accept |
課金 |
はい |
FR リソースの課金エンドポイント URI |
ApiKey |
はい |
FR リソースのエンドポイント キー |
Queue:Azure:ConnectionString |
いいえ |
Azure Queue の接続文字列 |
Storage:ObjectStore:AzureBlob:ConnectionString |
いいえ |
Azure Blob の接続文字列 |
HealthCheck:MemoryUpperboundInMB |
いいえ |
異常を正常に報告するためのメモリしきい値。 既定値: 推奨されるメモリと同じ |
StorageTimeToLiveInMinutes |
いいえ |
中間ファイルと最終ファイルをすべて削除する TTL 期間。 既定値: 2 日間。TTL は 5 分から 7 日の間で設定できます |
Task:MaxRunningTimeSpanInMinutes |
いいえ |
要求をタイムアウトとして扱う最大実行時間。 既定値: 60 分 |
HTTP_PROXY_BYPASS_URLS |
いいえ |
プロキシをバイパスするための URL を指定する 例: HTTP_PROXY_BYPASS_URLS = abc.com, xyz.com |
AzureCognitiveServiceReadHost (Receipt、IdDocument コンテナーのみ) |
はい |
コンテナー URI の読み取りを指定する 例: AzureCognitiveServiceReadHost=http://onprem-frread:5000 |
AzureCognitiveServiceLayoutHost (ドキュメント、請求書コンテナーのみ) |
はい |
レイアウト コンテナー URI の読み取りを指定する 例: AzureCognitiveServiceLayoutHost=http://onprem-frlayout:5000 |
ドキュメント インテリジェンス スタジオを使用してモデルをトレーニングする
同じ種類の少なくとも 5 つのフォームのセットをまとめます。 このデータを使用して、モデルのトレーニングとフォームのテストを行います。 サンプル データセットを使用できます (sample_data.zip をダウンロードして展開します)。
コンテナーが実行されていることを確認できたら、ブラウザーを開いて、コンテナーがデプロイされているエンドポイントに移動します。 このデプロイがローカル コンピューターの場合、エンドポイントは [http://localhost:5001](http://localhost:5001)
です。
カスタム抽出モデル タイルを選択します。
Create project
オプションを選択します。
プロジェクト名と、必要に応じて説明を指定します
[リソースの構成] ステップで、カスタム テンプレート モデルにエンドポイントを指定します。 コンテナーをローカル マシンにデプロイした場合は、この URL [http://localhost:5000](http://localhost:5000)
を使用します。
files フォルダー内のトレーニング データが配置される場所のサブフォルダーを指定します。
最後に、プロジェクトを作成します
これで、ラベル付けの準備が整ったプロジェクトが作成されました。 トレーニング データをアップロードし、ラベル付けを開始します。 ラベル付けを初めて使用する場合は、「カスタム モデルの構築とトレーニング」を参照してください。
API を使用したトレーニング
API を直接呼び出してモデルをトレーニングする予定の場合、カスタム テンプレート モデル トレーニング API には、ラベル付けプロジェクトの内容である base64 でエンコードされた zip ファイルが必要です。 PDF またはイメージ ファイルを省略し、JSON ファイルのみを送信できます。
データセットにラベル付けし、*.ocr.json、*.labels.json、fields.json ファイルを zip に追加したら、PowerShell コマンドを使用して base64 でエンコードされた文字列を生成します。
$bytes = [System.IO.File]::ReadAllBytes("<your_zip_file>.zip")
$b64String = [System.Convert]::ToBase64String($bytes, [System.Base64FormattingOptions]::None)
ビルド モデル API を使用して要求を投稿します。
POST http://localhost:5000/formrecognizer/documentModels:build?api-version=2023-07-31
{
"modelId": "mymodel",
"description": "test model",
"buildMode": "template",
"base64Source": "<Your base64 encoded string>",
"tags": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
}
}
コンテナーには、実行する課金引数の値が必要です。 これらの値により、コンテナーは課金エンドポイントに接続することができます。 コンテナーから、約 10 ~ 15 分ごとに使用状況が報告されます。 許可された時間枠内でコンテナーが Azure に接続しなかった場合、コンテナーは引き続き実行されますが、課金エンドポイントが復元されるまでクエリには対応しません。 接続は、10 ~15 分の同じ時間間隔で、10 回試行されます。 10 回以内に課金エンドポイントに接続できなかった場合、コンテナーによる要求の処理は停止されます。 課金のために Microsoft に送信される情報の例については、Azure AI コンテナーに関する FAQ を参照してください。
これで終わりです。 この記事では、ドキュメント インテリジェンス コンテナーの概念と、コンテナーのダウンロード、インストール、および実行のワークフローについて学習しました。 要約すると: