Azure AI 文档智能是一种 Azure AI 服务,可让用户使用机器学习技术构建自动化数据处理软件。 使用文档智能,可以从文档中识别并提取文本、键值对、选择标记、表数据等内容。 结果以结构化数据的形式提供,其中包含原始文件中的关系。
以下代码示例是独立的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.1 GA 布局映像用作 3.0 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 文件。 例如,如果文件夹名为“文件”(与
docker-compose
文件位于同一文件夹中),则 .env 文件条目为 FILE_MOUNT_PATH="./files"
在本地计算机上创建文件夹,用于存储由文档智能服务写入的日志
- 将此文件夹命名为 output。
- 我们将以 {OUTPUT_MOUNT_PATH} 形式引用此文件夹的文件路径。
- 将文件路径复制到方便的位置,需要将其添加到 .env 文件。 例如,如果文件夹名为“输出”(与
docker-compose
文件位于同一文件夹中),则 .env 文件条目为 OUTPUT_MOUNT_PATH="./output"
创建一个文件夹,用于存储容器之间共享的内部处理
- 将此文件夹命名为 shared。
- 我们将以 {SHARED_MOUNT_PATH} 形式引用此文件夹的文件路径。
- 将文件路径复制到方便的位置,需要将其添加到 .env 文件。 例如,如果文件夹名为“共享”(与
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 编译文件
将此文件命名为 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 shell 中运行这些命令。
$cd <folder containing the docker-compose file>
$source .env
$docker-compose up
自定义模板容器需要几个不同的配置,并支持其他可选配置。
设置 |
必需 |
说明 |
EULA |
是 |
许可证接受示例:Eula=accept |
计费 |
是 |
FR 资源的计费终结点 URI |
ApiKey |
是 |
FR 资源的终结点密钥 |
Queue:Azure:ConnectionString |
否 |
Azure 队列连接字符串 |
Storage:ObjectStore:AzureBlob:ConnectionString |
否 |
Azure Blob 连接字符串 |
HealthCheck:MemoryUpperboundInMB |
否 |
用于报告运行不正常的内存阈值。 默认值:与建议的内存相同 |
StorageTimeToLiveInMinutes |
否 |
删除所有中间文件和最终文件的 TTL 持续时间。 默认值:两天,TTL 可设置的值为 5 分钟到 7 天 |
Task:MaxRunningTimeSpanInMinutes |
否 |
将请求视为超时的最大运行时间。 默认值:60 分钟 |
HTTP_PROXY_BYPASS_URLS |
否 |
指定绕过代理的 URL 示例:HTTP_PROXY_BYPASS_URLS = abc.com,xyz.com |
AzureCognitiveServiceReadHost (收据,仅 IdDocument 容器) |
是 |
指定读取容器 uri 示例:AzureCognitiveServiceReadHost=http://onprem-frread:5000 |
AzureCognitiveServiceLayoutHost (文档,仅发票容器) |
是 |
指定布局容器 uri 示例:AzureCognitiveServiceLayoutHost=http://onprem-frlayout:5000 |
使用文档智能工作室训练模型
收集至少有五个相同类型的表单。 使用此数据训练模型并测试表单。 可使用示例数据集(下载并提取 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 次尝试内连接到计费终结点,容器会停止处理请求。