从 Azure 函数(Blob 触发器(中调用 Azure 表单识别器 .NET SDK 时出现错误 (BadRequest(
我基本上使用的是文档中的 C# 快速入门中的示例代码。我已经训练了模型,并且可以从 .NET Core 命令行应用以及使用 cURL 成功调用表单识别器。我现在想要触发相同的流,但是当 PDF 上传到 Azure 存储 Blob 时。在函数中使用相同的 modelId、订阅和端点,我在调用 AnalyzeWithCustomModelAsync(( 时收到 BadRequest 错误。我已经在myBlob Stream上尝试了许多变体,创建了一个FileStream,MemoryStream,使用传递给函数的uri创建了一个新的Stream等等。
[FunctionName("ImportInvoice")]
public static async System.Threading.Tasks.Task RunAsync([BlobTrigger("originals/{name}", Connection = "invoiceConn")]Stream myBlob, string name, Uri uri, string blobTrigger, ILogger log)
{
log.LogInformation($"ImportInvoice Function triggered by new invoice: {name} size: {myBlob.Length} Bytes");
log.LogInformation($"Invoice Uri: {uri.AbsoluteUri}");
log.LogInformation($"System.IO.Stream.CanRead is: {myBlob.CanRead}");
try
{
IFormRecognizerClient formClient = new FormRecognizerClient(new ApiKeyServiceClientCredentials(subscriptionKey))
{
Endpoint = formRecognizerEndpoint
};
using (Stream invoiceStream = myBlob)
{
log.LogInformation($"About to analyse with custom model {modelId}");
// Fails here with BadRequest
AnalyzeResult result = await formClient.AnalyzeWithCustomModelAsync(modelId, myBlob, contentType: "application/pdf");
log.LogInformation("Invoice analysed");
foreach (var page in result.Pages)
{
foreach (var kv in page.KeyValuePairs)
{
if (kv.Key.Count > 0 && kv.Value.Count > 0)
log.LogInformation(kv.Key[0].Text + ": " + kv.Value[0].Text);
}
}
}
}
catch (ErrorResponseException e)
{
log.LogInformation("Analyze PDF form : " + e.Message);
}
catch (Exception ex)
{
log.LogInformation("Analyze PDF form : " + ex.Message);
}
}
我正在传递模型Id,传递给函数(myBlob(的流和正确的内容类型(应用程序/pdf(。我希望formClient.AnalyzeWithCustomModelAsync(modelId,myBlob,contentType:"application/pdf"(调用成功并查看键和值(相同的代码在函数外部工作(,但我得到以下内容:
Executing 'ImportInvoice' (Reason='New blob detected: originals/NewCareInvoice5.pdf', Id=63f26c79-f269-4ea8-b6e8-8b4f6d6eb6e2)
ImportInvoice Function triggered by new invoice: NewCareInvoice5.pdf size: 134507 Bytes
Invoice Uri: https://myinvoices.blob.core.windows.net/originals/NewCareInvoice5.pdf
System.IO.Stream.CanRead is: True
About to analyse with custom model <correct model id shown here>
Analyze PDF form : Operation returned an invalid status code 'BadRequest'
我假设问题是流,但我绕圈子试图引用它或创建或复制一个新流,似乎缺少一些东西。我无法获得有关该错误的更多详细信息(例如来自InnerException(。
任何帮助非常感谢!
Microsoft已将表单识别更新为 V2.0 预览版,并更新了 API 和教程,请尝试新版本。 http://aka.ms/formrecognizer
这是表单识别器 SDK 上的一个错误。 我希望它能尽快修复。
https://github.com/MicrosoftDocs/azure-docs/issues/40938