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
下列程式代碼範例是一個獨立 docker compose
範例,可一起執行檔智慧版面配置、Studio 和自定義範本容器。 您可以使用 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 儲存體佇列或記憶體內部佇列。 只有在使用 Azure 儲存體佇列時,才需要設定 Storage:ObjectStore:AzureBlob:ConnectionString
和 queue:azure:connectionstring
環境變數。 在本機執行時,請刪除這些變數。
確保服務正在執行
為了確保服務已啟動並執行, 請在 Ubuntu 殼層中執行這些命令。
$cd <folder containing the docker-compose file>
$source .env
$docker-compose up
自定義範本容器需要幾個不同的組態,並支援其他選擇性組態。
AzureCognitiveServiceReadHost (僅限收據、身分證明文件容器)
指定讀取容器 URI。範例:AzureCognitiveServiceReadHost=http://onprem-frread:5000
AzureCognitiveServiceLayoutHost (僅限文件、發票容器)
指定版面配置容器 URI。範例:AzureCognitiveServiceLayoutHost=http://onprem-frlayout:5000
使用文件智慧服務工作室來定型模型
收集一組至少五個相同類型的表單。 您會使用此資料來定型模型和測試表單。 您可以使用範例資料集 (下載 sample_data.zip 並將其解壓縮)。
在能夠確認容器正在執行之後,請開啟瀏覽器並瀏覽至您已部署容器的端點。 如果此部署是本機電腦,則端點是 [http://localhost:5000](http://localhost:5000)
。
選取自訂擷取模型圖格。
選取 Create project
選項。
提供專案名稱和選擇性的描述
在 [設定您的資源] 步驟中,提供自訂範本模型的端點。 如果您將容器部署在本機電腦上,請使用此 URL [http://localhost:5000](http://localhost:5000)
。
在檔案資料夾內提供定型資料所在的子資料夾。
最後,建立專案
您現在應該已建立專案,並可供標記。 請上傳定型資料並開始使用標記。 如果您不熟悉標籤,請參閱 建置和定型自定義模型。
使用 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"
驗證服務正在執行
有數種方式可驗證容器正在執行:
容器會提供一個首頁 \
做為容器正在執行的視覺驗證。
您可以開啟您喜愛的網頁瀏覽器並瀏覽至有問題容器的「外部 IP」位址和公開的連接埠。 使用列出的要求 URL 來驗證容器是否正在執行。 列出的範例要求 URL 為 http://localhost:5000
,但您的特定容器可能會有所不同。 請記住,您將會瀏覽至容器的外部 IP 位址和公開的連接埠。
要求 URL
http://localhost:5000/ready
以 GET 提出要求,此要求會驗證容器是否已準備好接受對模型的查詢。 此要求可用來進行 Kubernetes 活躍度和整備度探查。
http://localhost:5000/status
以 GET 提出要求,此要求會在不需進行端點查詢的同時,確認用來啟動容器的 API 金鑰是否有效。 此要求可用來進行 Kubernetes 活躍度和整備度探查。
http://localhost:5000/swagger
容器會為端點提供一組完整的文件和立即試用功能。 使用此功能,您可以將自己的設定輸入至以 Web 為基礎的 HTML 表單並進行查詢,而無須撰寫任何程式碼。 查詢傳回之後,會提供範例 CURL 命令來示範必要的 HTTP 標頭和本文格式。
文件智慧服務容器會使用您 Azure 帳戶上的文件智慧服務資源,將計費資訊傳送至 Azure。
對容器的查詢會以 API Key
所使用的 Azure 資源定價層計費。 您必須針對每個用來處理文件和影像的容器執行個體支付費用。
連接到 Azure
容器需要計費引數值才能執行。 這些值讓容器能夠連線到計費端點。 容器會每隔 10 到 15 分鐘回報使用量。 如果容器未在允許的時間範圍內連線到 Azure,容器會繼續執行,但在還原計費端點之前不會提供查詢。 以 10 到 15 分鐘的相同時間間隔嘗試連線 10 次。 如果無法在 10 次嘗試內連線到計費端點,容器會停止處理要求。 請參閱 Azure AI 容器常見問題,以獲得需傳送哪些資訊給 Microsoft 以供計費的範例。
當下列三個選項都填入了有效值時,docker-compose up 命令便會啟動容器:
Azure AI 容器若未連線至用於計量的 Azure,即無法獲得執行的授權。 客戶必須啟用容器以持續與計量服務進行帳單資訊的通訊。 Azure AI 容器不會將客戶資料 (例如正在分析的影像或文字) 傳送至 Microsoft。
文件智慧服務容器組態設定
Azure 容器執行個體配方
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:https://aka.ms/ContentUserFeedback。
提交並檢視相關的意見反應