如何使用Azure Form Recognizer Docker容器调用收据分析?
当然可以用Form Recognizer容器实现收据识别!你之前的猜测完全正确,容器的c:\input(Windows容器)或/input(Linux容器)目录可以替代云服务中的Blob存储来提供待处理的收据图片,下面是具体的实现步骤和请求示例:
1. 确保容器运行时挂载输入目录
首先启动容器时,需要把本地存放收据的文件夹映射到容器的c:\input目录,让容器能访问到你的图片。比如本地有个C:\form-receipts文件夹存收据,Docker启动命令可以这么写:
docker run -it --rm -p 5000:5000 --memory 8g --cpus 2 ` -v C:\form-receipts:c:\input ` -v C:\form-output:c:\output ` mcr.microsoft.com/azure-cognitive-services/form-recognizer/receipts ` Eula=accept ` Billing=<你的Azure资源计费端点> ` ApiKey=<你的资源密钥>
注意:这里用的是预构建收据识别的专用容器镜像(
receipts),如果之前用的是通用自定义模型容器,需要切换到这个镜像才能直接使用预构建的收据识别能力。
2. API请求示例
容器版的预构建收据识别API调用逻辑和云服务类似,但指定数据源时可以直接用容器内的文件路径,也能直接上传图片二进制数据,两种方式都很灵活:
方法一:使用容器输入目录里的图片
请求详情:
- 请求方法:POST
- 端点:
http://localhost:5000/formrecognizer/v2.1/prebuilt/receipt/analyze - 请求头:
Content-Type: application/jsonOcp-Apim-Subscription-Key: <你的资源密钥>
- 请求体:
{ "source": "c:\\input\\your-receipt.jpg" }
获取识别结果:
发送请求后会返回202 Accepted,响应头里会有Operation-Location字段(比如http://localhost:5000/formrecognizer/v2.1/prebuilt/receipt/analyzeResults/<operation-id>)。用这个URL发送GET请求,就能拿到最终的识别结果:
- 请求方法:GET
- 端点:
{Operation-Location的值} - 请求头:
Ocp-Apim-Subscription-Key: <你的资源密钥>
当返回的status字段为succeeded时,analyzeResult里就包含了收据的所有识别信息——比如商家名称、消费总额、交易日期等。
方法二:直接上传图片二进制数据
如果不想依赖容器的输入目录,也可以直接把图片二进制数据作为请求体发送:
请求详情:
- 请求方法:POST
- 端点:
http://localhost:5000/formrecognizer/v2.1/prebuilt/receipt/analyze - 请求头:
Content-Type: image/jpeg(根据图片格式调整为image/png等)Ocp-Apim-Subscription-Key: <你的资源密钥>
- 请求体:直接上传本地的收据图片二进制数据(比如在Postman里选"Binary"选项,然后选中图片文件)
后续通过Operation-Location获取结果的步骤和方法一完全一致。
3. 关于容器的c:\output目录
c:\output目录主要用来存储容器的日志文件、临时数据,以及自定义模型的持久化信息(如果训练自定义模型的话)。对于预构建收据识别来说,识别结果主要通过API返回,这个目录只需要正常挂载即可,不需要额外配置就能用。
内容的提问来源于stack exchange,提问作者SliderBlues




