Я пытаюсь получить образец кода для использования Azure Document Intelligence с файлами, расположенными на внутреннем сервере, но получаю следующую ошибку:
Azure.RequestFailedException: 'Resource not found
Status: 404 (Not Found)
ErrorCode: 404
Content:
{"error":{"code":"404","message":"Resource not found"}}
Headers:
Content-Length: 55
Content-Type: application/json
Date: Thu, 08 Aug 2024 14:08:41 GMT
Я следую инструкциям, описанным в этой статьеНачните работу с Document Intelligence, но я настроил его так, чтобы использовать локальный файл вместо URI.
Это мой код:
string endpoint = "https://<MyServiceInstance>.cognitiveservices.azure.com/";
string apiKey = "<MyApiKey>";
string filename = "C:\\..\\MyFile.jpg";
var client = new DocumentIntelligenceClient(new Uri(endpoint), new AzureKeyCredential(apiKey));
using (FileStream stream = new FileStream(filename, FileMode.Open))
{
var result = AnalyzeDocumentAsync(client, stream).GetAwaiter().GetResult();
Console.WriteLine(result);
}
static async Task<Operation<AnalyzeResult>> AnalyzeDocumentAsync(
DocumentIntelligenceClient client,
Stream documentStream)
{
string modelId = "MyModelId";
var content = new AnalyzeDocumentContent()
{
Base64Source = BinaryData.FromStream(documentStream)
};
var operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, modelId, content);
AnalyzeResult result = operation.Value;
Console.WriteLine($"Document was analyzed with model with ID: {result.ModelId}");
foreach (AnalyzedDocument document in result.Documents)
{
Console.WriteLine($"Document of type: {document.DocType}");
foreach (KeyValuePair<string, DocumentField> fieldKvp in document.Fields)
{
string fieldName = fieldKvp.Key;
DocumentField field = fieldKvp.Value;
Console.WriteLine($"Field '{fieldName}': ");
Console.WriteLine($" Content: '{field.Content}'");
Console.WriteLine($" Confidence: '{field.Confidence}'");
}
}
return operation;
}
Строка, вызывающая исключение:
var operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, modelId, content);
Я получаю настройки из Azure, как описано в статье:
Моя модель — это «Пользовательская модель», и я использую имя идентификатора, который использовал при обучении модели.
У кого-нибудь есть идеи, чего мне не хватает?
DocumentIntelligenceClient
— устаревшая конфигурация. Вместо него используйте DocumentAnalysisClient
, который является рекомендуемым классом для взаимодействия со службами Распознавателя форм Azure и Document Intelligence.Использование
AnalyzeDocumentAsync
сAnalyzeDocumentContent
иBase64Source
, что не является правильным подходом для текущих методов SDK.
AnalyzeDocumentAsync
напрямую с Stream
, что соответствует новейшим методам SDK.Код:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
using System;
using System.IO;
using System.Threading.Tasks;
namespace ConsoleApp9
{
internal class Program
{
static async Task Main(string[] args)
{
string endpoint = "https://<YourServiceInstance>.cognitiveservices.azure.com/";
string apiKey = "<YourApiKey>";
string filename = "C:\\path\\to\\your\\file.pdf"; // Update with your file path
string modelId = "<YourModelId>"; // Ensure this is the correct model ID
var client = new DocumentAnalysisClient(new Uri(endpoint), new AzureKeyCredential(apiKey));
using (FileStream stream = new FileStream(filename, FileMode.Open))
{
var result = await AnalyzeDocumentAsync(client, modelId, stream);
Console.WriteLine($"Model ID used: {result.ModelId}");
}
}
static async Task<AnalyzeResult> AnalyzeDocumentAsync(
DocumentAnalysisClient client,
string modelId,
Stream documentStream)
{
try
{
// Analyze the document with the specified model
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, modelId, documentStream);
AnalyzeResult result = operation.Value;
Console.WriteLine($"Document analyzed with model ID: {result.ModelId}");
// Process the analyzed document
foreach (AnalyzedDocument document in result.Documents)
{
Console.WriteLine($"Document has the following fields:");
foreach (KeyValuePair<string, DocumentField> fieldKvp in document.Fields)
{
string fieldName = fieldKvp.Key;
DocumentField field = fieldKvp.Value;
Console.WriteLine($"Field '{fieldName}': ");
Console.WriteLine($" Content: '{field.Content}'");
Console.WriteLine($" Confidence: '{field.Confidence}'");
}
}
return result;
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Error: {ex.Message}");
throw;
}
}
}
}
Тест модели на портале для справки:
Результат:
Огромное спасибо за это Сурешу! Не могу поверить, что потратил на это так много времени, а вы говорите мне, что DocumentIntelligenceClient устарел, и я получил это от Microsoft в разделе «Начало работы». Очень расстраиваю, но рада, что, по крайней мере, могу двигаться дальше. Еще раз спасибо :).
Используйте
DocumentAnalysisClient
— рекомендуемый класс для взаимодействия со службами Azure Form Recensor и Document Intelligence.