Ekinlikler
17 Mar 23 - 21 Mar 23
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunBu tarayıcı artık desteklenmiyor.
En son özelliklerden, güvenlik güncelleştirmelerinden ve teknik destekten faydalanmak için Microsoft Edge’e yükseltin.
Önemli
Bu içerik şunlar için geçerlidir: v4.0 (GA)Önceki sürümler:
v3.1 (GA)
v3.0 (GA)
2024-11-30
(GA) ile çalışmaya başlayın.
Bu içerik şunlar için geçerlidir: v3.1 (GA)Önceki sürümler:
v3.0
v2.1
2023-07-31
) kullanmaya başlayın.
Bu içerik şunlar için geçerlidir:v3.0 (GA) Daha yeni sürüm:
v3.1
v2.1
2022-08-31
) kullanmaya başlayın.Azure AI Belge Zekası / Form Tanıma, belgelerinizden anahtar-değer çiftlerini, metinleri, tabloları ve anahtar verilerini ayıklamak için makine öğrenmesini kullanan bulut tabanlı bir Azure yapay zeka hizmetidir.
Programlama dili SDK'sını kullanarak veya REST API'yi çağırarak belge işleme modellerini iş akışlarınızla ve uygulamalarınızla kolayca tümleştirebilirsiniz.
Bu hızlı başlangıç için teknolojiyi öğrenirken ücretsiz hizmeti kullanmanızı öneririz. Ücretsiz sayfa sayısının ayda 500 ile sınırlı olduğunu unutmayın.
API özellikleri ve geliştirme seçenekleri hakkında daha fazla bilgi edinmek için Genel Bakış sayfamızı ziyaret edin.
İstemci kitaplığı | SDK başvurusu | REST API başvurusu | Paket| Örnekleri|Desteklenen REST API sürümü
İstemci kitaplığı | SDK başvuru | API'si başvuru | Paketi (NuGet) | Örnekleri | Desteklenen REST API sürümü
İstemci kitaplığı | SDK başvurusu | REST API başvurusu | Paket | Örnekleri |Desteklenen REST API sürümü
Bu hızlı başlangıçta, formlardan ve belgelerden veri ve değerleri analiz etmek ve ayıklamak için aşağıdaki özellikleri kullanın:
Düzen modeli— Model eğitmeye gerek kalmadan belgelerdeki radyo düğmeleri ve onay kutuları gibi tabloları, satırları, sözcükleri ve seçim işaretlerini analiz edin ve ayıklayın.
Önceden oluşturulmuş model—Önceden oluşturulmuş bir model kullanarak belirli belge türlerinde ortak alanları analiz edin ve ayıklayın.
Azure aboneliği - Ücretsiz bir abonelik oluşturun.
Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya Azure AI çok hizmetli bir kaynak oluşturun.
Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız vardır.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Azure AI hizmetleri veya Form Tanıma kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya Azure AI çok hizmetli bir kaynak oluşturun.
Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Form Tanıma erişim için bir Form Tanıma kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız vardır.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Form Tanıma API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Visual Studio'yu başlatın.
Başlangıç sayfasında Yeni proje oluştur'u seçin.
Yeni proje oluştur sayfasında, arama kutusuna konsol yazın. Konsol Uygulaması şablonunu ve ardından İleri'yi seçin.
doc_intel_quickstart
. Ardından İleri'yi seçin.form_recognizer_quickstart
. Ardından İleri'yi seçin.Ek bilgiler iletişim kutusunda .NET 8.0 (uzun süreli destek) öğesini ve ardından Oluştur'u seçin.
doc_intel_quickstart projenize sağ tıklayın ve NuGet Paketlerini Yönet... öğesini seçin.
Gözat sekmesini seçin ve Azure.AI.DocumentIntelligence yazın.
Include prerelease
Onay kutusunu seçin.
Açılan menüden bir sürüm seçin ve paketi projenize yükleyin.
form_recognizer_quickstart projenize sağ tıklayın ve NuGet Paketlerini Yönet... öğesini seçin.
Gözat sekmesini seçin ve Azure.AI.FormRecognizer yazın. Açılan menüden sürüm 4.1.0'ı seçin
form_recognizer_quickstart projenize sağ tıklayın ve NuGet Paketlerini Yönet... öğesini seçin.
Gözat sekmesini seçin ve Azure.AI.FormRecognizer yazın. Açılan menüden sürüm 4.0.0'ı seçin
Belge Yönetim Bilgileri hizmetiyle etkileşim kurmak için sınıfının bir örneğini DocumentIntelligenceClient
oluşturmanız gerekir. Bunu yapmak için Azure portalından ile key
bir ve ve Belge Zekanız endpoint
ile AzureKeyCredential
bir DocumentIntelligenceClient
örnek oluşturursunuzAzureKeyCredential
.
Form Tanıma hizmetiyle etkileşim kurmak için sınıfının bir örneğini DocumentAnalysisClient
oluşturmanız gerekir. Bunu yapmak için Azure portalından ile key
ve ile bir örnek endpoint
AzureKeyCredential
Form Tanıma oluşturursunuzAzureKeyCredential
.DocumentAnalysisClient
Not
console
yeni projeler önceki sürümlerden farklı yeni bir program stili oluşturur.Main
yazmanız gerekir. Üst düzey deyimleri, genel using yönergelerini veya örtük using yönergelerini eklemeniz gerekmez.Program.cs dosyasını açın.
satırı Console.Writeline("Hello World!")
da dahil olmak üzere mevcut kodu silin ve uygulamanızın Program.cs dosyasına kopyalayıp yapıştırmak için aşağıdaki kod örneklerinden birini seçin:
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
Belgelerden metin, seçim işaretleri, metin stilleri, tablo yapıları ve sınırlayıcı bölge koordinatlarını ayıklayın.
Uri fileUri
en üstündeki değişkene ekledik.StartAnalyzeDocumentFromUri
ve model kimliği olarak geçirin prebuilt-layout
. Döndürülen değer, gönderilen belgedeki verileri içeren bir AnalyzeResult
nesnedir.aşağıdaki kod örneğini Program.cs dosyasına ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
using Azure;
using Azure.AI.DocumentIntelligence;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentIntelligenceClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentIntelligenceClient client = new DocumentIntelligenceClient(new Uri(endpoint), credential);
//sample document
Uri fileUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf");
AnalyzeDocumentContent content = new AnalyzeDocumentContent()
{
UrlSource= fileUri
};
Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-layout", content);
AnalyzeResult result = operation.Value;
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Document Page {page.PageNumber} has {page.Lines.Count} line(s), {page.Words.Count} word(s)," +
$" and {page.SelectionMarks.Count} selection mark(s).");
for (int i = 0; i < page.Lines.Count; i++)
{
DocumentLine line = page.Lines[i];
Console.WriteLine($" Line {i}:");
Console.WriteLine($" Content: '{line.Content}'");
Console.Write(" Bounding polygon, with points ordered clockwise:");
for (int j = 0; j < line.Polygon.Count; j += 2)
{
Console.Write($" ({line.Polygon[j]}, {line.Polygon[j + 1]})");
}
Console.WriteLine();
}
for (int i = 0; i < page.SelectionMarks.Count; i++)
{
DocumentSelectionMark selectionMark = page.SelectionMarks[i];
Console.WriteLine($" Selection Mark {i} is {selectionMark.State}.");
Console.WriteLine($" State: {selectionMark.State}");
Console.Write(" Bounding polygon, with points ordered clockwise:");
for (int j = 0; j < selectionMark.Polygon.Count; j++)
{
Console.Write($" ({selectionMark.Polygon[j]}, {selectionMark.Polygon[j + 1]})");
}
Console.WriteLine();
}
}
for (int i = 0; i < result.Paragraphs.Count; i++)
{
DocumentParagraph paragraph = result.Paragraphs[i];
Console.WriteLine($"Paragraph {i}:");
Console.WriteLine($" Content: {paragraph.Content}");
if (paragraph.Role != null)
{
Console.WriteLine($" Role: {paragraph.Role}");
}
}
foreach (DocumentStyle style in result.Styles)
{
// Check the style and style confidence to see if text is handwritten.
// Note that value '0.8' is used as an example.
bool isHandwritten = style.IsHandwritten.HasValue && style.IsHandwritten == true;
if (isHandwritten && style.Confidence > 0.8)
{
Console.WriteLine($"Handwritten content found:");
foreach (DocumentSpan span in style.Spans)
{
var handwrittenContent = result.Content.Substring(span.Offset, span.Length);
Console.WriteLine($" {handwrittenContent}");
}
}
}
for (int i = 0; i < result.Tables.Count; i++)
{
DocumentTable table = result.Tables[i];
Console.WriteLine($"Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) is a '{cell.Kind}' with content: {cell.Content}");
}
}
Uygulamanızı çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra, programınızı oluşturmak ve çalıştırmak için formRecognizer_quickstart yanındaki yeşil Başlangıç düğmesini seçin veya F5 tuşuna basın.
aşağıdaki kod örneğini Program.cs dosyasına ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Form Tanıma örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentAnalysisClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
//sample document
Uri fileUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf");
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentFromUriAsync(WaitUntil.Completed, "prebuilt-layout", fileUri);
AnalyzeResult result = operation.Value;
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Document Page {page.PageNumber} has {page.Lines.Count} line(s), {page.Words.Count} word(s),");
Console.WriteLine($"and {page.SelectionMarks.Count} selection mark(s).");
for (int i = 0; i < page.Lines.Count; i++)
{
DocumentLine line = page.Lines[i];
Console.WriteLine($" Line {i} has content: '{line.Content}'.");
Console.WriteLine($" Its bounding box is:");
Console.WriteLine($" Upper left => X: {line.Polygon[0].X}, Y= {line.Polygon[0].Y}");
Console.WriteLine($" Upper right => X: {line.Polygon[1].X}, Y= {line.Polygon[1].Y}");
Console.WriteLine($" Lower right => X: {line.Polygon[2].X}, Y= {line.Polygon[2].Y}");
Console.WriteLine($" Lower left => X: {line.Polygon[3].X}, Y= {line.Polygon[3].Y}");
}
for (int i = 0; i < page.SelectionMarks.Count; i++)
{
DocumentSelectionMark selectionMark = page.SelectionMarks[i];
Console.WriteLine($" Selection Mark {i} is {selectionMark.State}.");
Console.WriteLine($" Its bounding box is:");
Console.WriteLine($" Upper left => X: {selectionMark.Polygon[0].X}, Y= {selectionMark.Polygon[0].Y}");
Console.WriteLine($" Upper right => X: {selectionMark.Polygon[1].X}, Y= {selectionMark.Polygon[1].Y}");
Console.WriteLine($" Lower right => X: {selectionMark.Polygon[2].X}, Y= {selectionMark.Polygon[2].Y}");
Console.WriteLine($" Lower left => X: {selectionMark.Polygon[3].X}, Y= {selectionMark.Polygon[3].Y}");
}
}
foreach (DocumentStyle style in result.Styles)
{
// Check the style and style confidence to see if text is handwritten.
// Note that value '0.8' is used as an example.
bool isHandwritten = style.IsHandwritten.HasValue && style.IsHandwritten == true;
if (isHandwritten && style.Confidence > 0.8)
{
Console.WriteLine($"Handwritten content found:");
foreach (DocumentSpan span in style.Spans)
{
Console.WriteLine($" Content: {result.Content.Substring(span.Index, span.Length)}");
}
}
}
Console.WriteLine("The following tables were extracted:");
for (int i = 0; i < result.Tables.Count; i++)
{
DocumentTable table = result.Tables[i];
Console.WriteLine($" Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) has kind '{cell.Kind}' and content: '{cell.Content}'.");
}
}
Uygulamanızı çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra, programınızı oluşturmak ve çalıştırmak için formRecognizer_quickstart yanındaki yeşil Başlangıç düğmesini seçin veya F5 tuşuna basın.
Beklenen çıkışın kod parçacığı aşağıdadır:
Document Page 1 has 69 line(s), 425 word(s), and 15 selection mark(s).
Line 0 has content: 'UNITED STATES'.
Its bounding box is:
Upper left => X: 3.4915, Y= 0.6828
Upper right => X: 5.0116, Y= 0.6828
Lower right => X: 5.0116, Y= 0.8265
Lower left => X: 3.4915, Y= 0.8265
Line 1 has content: 'SECURITIES AND EXCHANGE COMMISSION'.
Its bounding box is:
Upper left => X: 2.1937, Y= 0.9061
Upper right => X: 6.297, Y= 0.9061
Lower right => X: 6.297, Y= 1.0498
Lower left => X: 2.1937, Y= 1.0498
Çıkışın tamamını görüntülemek için GitHub'daki Azure örnekleri deposunu ziyaret edin ve düzen modeli çıkışını görüntüleyin.
aşağıdaki kod örneğini Program.cs dosyasına ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Form Tanıma örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentAnalysisClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
//sample document
Uri fileUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf");
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentFromUriAsync(WaitUntil.Completed, "prebuilt-layout", fileUri);
AnalyzeResult result = operation.Value;
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Document Page {page.PageNumber} has {page.Lines.Count} line(s), {page.Words.Count} word(s),");
Console.WriteLine($"and {page.SelectionMarks.Count} selection mark(s).");
for (int i = 0; i < page.Lines.Count; i++)
{
DocumentLine line = page.Lines[i];
Console.WriteLine($" Line {i} has content: '{line.Content}'.");
Console.WriteLine($" Its bounding polygon (points ordered clockwise):");
for (int j = 0; j < line.Polygon.Count; j++)
{
Console.WriteLine($" Point {j} => X: {line.Polygon[j].X}, Y: {line.Polygon[j].Y}");
}
}
for (int i = 0; i < page.SelectionMarks.Count; i++)
{
DocumentSelectionMark selectionMark = page.SelectionMarks[i];
Console.WriteLine($" Selection Mark {i} is {selectionMark.State}.");
Console.WriteLine($" Its bounding polygon (points ordered clockwise):");
for (int j = 0; j < selectionMark.Polygon.Count; j++)
{
Console.WriteLine($" Point {j} => X: {selectionMark.Polygon[j].X}, Y: {selectionMark.Polygon[j].Y}");
}
}
}
Console.WriteLine("Paragraphs:");
foreach (DocumentParagraph paragraph in result.Paragraphs)
{
Console.WriteLine($" Paragraph content: {paragraph.Content}");
if (paragraph.Role != null)
{
Console.WriteLine($" Role: {paragraph.Role}");
}
}
foreach (DocumentStyle style in result.Styles)
{
// Check the style and style confidence to see if text is handwritten.
// Note that value '0.8' is used as an example.
bool isHandwritten = style.IsHandwritten.HasValue && style.IsHandwritten == true;
if (isHandwritten && style.Confidence > 0.8)
{
Console.WriteLine($"Handwritten content found:");
foreach (DocumentSpan span in style.Spans)
{
Console.WriteLine($" Content: {result.Content.Substring(span.Index, span.Length)}");
}
}
}
Console.WriteLine("The following tables were extracted:");
for (int i = 0; i < result.Tables.Count; i++)
{
DocumentTable table = result.Tables[i];
Console.WriteLine($" Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) has kind '{cell.Kind}' and content: '{cell.Content}'.");
}
}
Extract the layout of a document from a file stream
To extract the layout from a given file at a file stream, use the AnalyzeDocument method and pass prebuilt-layout as the model ID. The returned value is an AnalyzeResult object containing data about the submitted document.
string filePath = "<filePath>";
using var stream = new FileStream(filePath, FileMode.Open);
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-layout", stream);
AnalyzeResult result = operation.Value;
foreach (DocumentPage page in result.Pages)
{
Console.WriteLine($"Document Page {page.PageNumber} has {page.Lines.Count} line(s), {page.Words.Count} word(s),");
Console.WriteLine($"and {page.SelectionMarks.Count} selection mark(s).");
for (int i = 0; i < page.Lines.Count; i++)
{
DocumentLine line = page.Lines[i];
Console.WriteLine($" Line {i} has content: '{line.Content}'.");
Console.WriteLine($" Its bounding polygon (points ordered clockwise):");
for (int j = 0; j < line.Polygon.Count; j++)
{
Console.WriteLine($" Point {j} => X: {line.Polygon[j].X}, Y: {line.Polygon[j].Y}");
}
}
for (int i = 0; i < page.SelectionMarks.Count; i++)
{
DocumentSelectionMark selectionMark = page.SelectionMarks[i];
Console.WriteLine($" Selection Mark {i} is {selectionMark.State}.");
Console.WriteLine($" Its bounding polygon (points ordered clockwise):");
for (int j = 0; j < selectionMark.Polygon.Count; j++)
{
Console.WriteLine($" Point {j} => X: {selectionMark.Polygon[j].X}, Y: {selectionMark.Polygon[j].Y}");
}
}
}
Console.WriteLine("Paragraphs:");
foreach (DocumentParagraph paragraph in result.Paragraphs)
{
Console.WriteLine($" Paragraph content: {paragraph.Content}");
if (paragraph.Role != null)
{
Console.WriteLine($" Role: {paragraph.Role}");
}
}
foreach (DocumentStyle style in result.Styles)
{
// Check the style and style confidence to see if text is handwritten.
// Note that value '0.8' is used as an example.
bool isHandwritten = style.IsHandwritten.HasValue && style.IsHandwritten == true;
if (isHandwritten && style.Confidence > 0.8)
{
Console.WriteLine($"Handwritten content found:");
foreach (DocumentSpan span in style.Spans)
{
Console.WriteLine($" Content: {result.Content.Substring(span.Index, span.Length)}");
}
}
}
Console.WriteLine("The following tables were extracted:");
for (int i = 0; i < result.Tables.Count; i++)
{
DocumentTable table = result.Tables[i];
Console.WriteLine($" Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (DocumentTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) has kind '{cell.Kind}' and content: '{cell.Content}'.");
}
}
Uygulamanızı çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra, programınızı oluşturmak ve çalıştırmak için formRecognizer_quickstart yanındaki yeşil Başlangıç düğmesini seçin veya F5 tuşuna basın.
Önceden oluşturulmuş bir model kullanarak belirli belge türlerinden ortak alanları analiz edin ve ayıklayın. Bu örnekte, önceden oluşturulmuş fatura modelini kullanarak bir faturayı analiz ediyoruz.
İpucu
Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. İşlem için analyze
kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Bkz. model veri ayıklama.
Uri invoiceUri
Program.cs dosyasının en üstündeki değişkene ekledik.StartAnalyzeDocumentFromUri
ve model kimliği olarak geçirin prebuilt-invoice
. Döndürülen değer, gönderilen belgedeki verileri içeren bir AnalyzeResult
nesnedir.aşağıdaki kod örneğini Program.cs dosyanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
using Azure;
using Azure.AI.DocumentIntelligence;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentIntelligenceClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentIntelligenceClient client = new DocumentIntelligenceClient(new Uri(endpoint), credential);
//sample invoice document
Uri invoiceUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf");
AnalyzeDocumentContent content = new AnalyzeDocumentContent()
{
UrlSource = invoiceUri
};
Operation<AnalyzeResult> operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-invoice", content);
AnalyzeResult result = operation.Value;
for (int i = 0; i < result.Documents.Count; i++)
{
Console.WriteLine($"Document {i}:");
AnalyzedDocument document = result.Documents[i];
if (document.Fields.TryGetValue("VendorName", out DocumentField vendorNameField)
&& vendorNameField.Type == DocumentFieldType.String)
{
string vendorName = vendorNameField.ValueString;
Console.WriteLine($"Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
if (document.Fields.TryGetValue("CustomerName", out DocumentField customerNameField)
&& customerNameField.Type == DocumentFieldType.String)
{
string customerName = customerNameField.ValueString;
Console.WriteLine($"Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
if (document.Fields.TryGetValue("Items", out DocumentField itemsField)
&& itemsField.Type == DocumentFieldType.List)
{
foreach (DocumentField itemField in itemsField.ValueList)
{
Console.WriteLine("Item:");
if (itemField.Type == DocumentFieldType.Dictionary)
{
IReadOnlyDictionary<string, DocumentField> itemFields = itemField.ValueDictionary;
if (itemFields.TryGetValue("Description", out DocumentField itemDescriptionField)
&& itemDescriptionField.Type == DocumentFieldType.String)
{
string itemDescription = itemDescriptionField.ValueString;
Console.WriteLine($" Description: '{itemDescription}', with confidence {itemDescriptionField.Confidence}");
}
if (itemFields.TryGetValue("Amount", out DocumentField itemAmountField)
&& itemAmountField.Type == DocumentFieldType.Currency)
{
CurrencyValue itemAmount = itemAmountField.ValueCurrency;
Console.WriteLine($" Amount: '{itemAmount.CurrencySymbol}{itemAmount.Amount}', with confidence {itemAmountField.Confidence}");
}
}
}
}
if (document.Fields.TryGetValue("SubTotal", out DocumentField subTotalField)
&& subTotalField.Type == DocumentFieldType.Currency)
{
CurrencyValue subTotal = subTotalField.ValueCurrency;
Console.WriteLine($"Sub Total: '{subTotal.CurrencySymbol}{subTotal.Amount}', with confidence {subTotalField.Confidence}");
}
if (document.Fields.TryGetValue("TotalTax", out DocumentField totalTaxField)
&& totalTaxField.Type == DocumentFieldType.Currency)
{
CurrencyValue totalTax = totalTaxField.ValueCurrency;
Console.WriteLine($"Total Tax: '{totalTax.CurrencySymbol}{totalTax.Amount}', with confidence {totalTaxField.Confidence}");
}
if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField)
&& invoiceTotalField.Type == DocumentFieldType.Currency)
{
CurrencyValue invoiceTotal = invoiceTotalField.ValueCurrency;
Console.WriteLine($"Invoice Total: '{invoiceTotal.CurrencySymbol}{invoiceTotal.Amount}', with confidence {invoiceTotalField.Confidence}");
}
}
Uygulamanızı çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra, programınızı oluşturmak ve çalıştırmak için formRecognizer_quickstart yanındaki yeşil Başlangıç düğmesini seçin veya F5 tuşuna basın.
aşağıdaki kod örneğini Program.cs dosyanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Form Tanıma örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `FormRecognizerClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
//sample invoice document
Uri invoiceUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf");
Operation operation = await client.AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-invoice", invoiceUri);
AnalyzeResult result = operation.Value;
for (int i = 0; i < result.Documents.Count; i++)
{
Console.WriteLine($"Document {i}:");
AnalyzedDocument document = result.Documents[i];
if (document.Fields.TryGetValue("VendorName", out DocumentField vendorNameField))
{
if (vendorNameField.FieldType == DocumentFieldType.String)
{
string vendorName = vendorNameField.Value.AsString();
Console.WriteLine($"Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
}
if (document.Fields.TryGetValue("CustomerName", out DocumentField customerNameField))
{
if (customerNameField.FieldType == DocumentFieldType.String)
{
string customerName = customerNameField.Value.AsString();
Console.WriteLine($"Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
}
if (document.Fields.TryGetValue("Items", out DocumentField itemsField))
{
if (itemsField.FieldType == DocumentFieldType.List)
{
foreach (DocumentField itemField in itemsField.Value.AsList())
{
Console.WriteLine("Item:");
if (itemField.FieldType == DocumentFieldType.Dictionary)
{
IReadOnlyDictionary<string, DocumentField> itemFields = itemField.Value.AsDictionary();
if (itemFields.TryGetValue("Description", out DocumentField itemDescriptionField))
{
if (itemDescriptionField.FieldType == DocumentFieldType.String)
{
string itemDescription = itemDescriptionField.Value.AsString();
Console.WriteLine($" Description: '{itemDescription}', with confidence {itemDescriptionField.Confidence}");
}
}
if (itemFields.TryGetValue("Amount", out DocumentField itemAmountField))
{
if (itemAmountField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue itemAmount = itemAmountField.Value.AsCurrency();
Console.WriteLine($" Amount: '{itemAmount.Symbol}{itemAmount.Amount}', with confidence {itemAmountField.Confidence}");
}
}
}
}
}
}
if (document.Fields.TryGetValue("SubTotal", out DocumentField subTotalField))
{
if (subTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue subTotal = subTotalField.Value.AsCurrency();
Console.WriteLine($"Sub Total: '{subTotal.Symbol}{subTotal.Amount}', with confidence {subTotalField.Confidence}");
}
}
if (document.Fields.TryGetValue("TotalTax", out DocumentField totalTaxField))
{
if (totalTaxField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue totalTax = totalTaxField.Value.AsCurrency();
Console.WriteLine($"Total Tax: '{totalTax.Symbol}{totalTax.Amount}', with confidence {totalTaxField.Confidence}");
}
}
if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField))
{
if (invoiceTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue invoiceTotal = invoiceTotalField.Value.AsCurrency();
Console.WriteLine($"Invoice Total: '{invoiceTotal.Symbol}{invoiceTotal.Amount}', with confidence {invoiceTotalField.Confidence}");
}
}
}
Uygulamanızı çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra, programınızı oluşturmak ve çalıştırmak için formRecognizer_quickstart yanındaki yeşil Başlangıç düğmesini seçin veya F5 tuşuna basın.
Beklenen çıkışın kod parçacığı aşağıdadır:
Document 0:
Vendor Name: 'CONTOSO LTD.', with confidence 0.962
Customer Name: 'MICROSOFT CORPORATION', with confidence 0.951
Item:
Description: 'Test for 23 fields', with confidence 0.899
Amount: '100', with confidence 0.902
Sub Total: '100', with confidence 0.979
Çıkışın tamamını görüntülemek için GitHub'daki Azure örnekleri deposunu ziyaret edin ve önceden oluşturulmuş fatura modeli çıkışını görüntüleyin.
aşağıdaki kod örneğini Program.cs dosyanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Form Tanıma örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
using Azure;
using Azure.AI.FormRecognizer.DocumentAnalysis;
//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `FormRecognizerClient` instance
string endpoint = "<your-endpoint>";
string key = "<your-key>";
AzureKeyCredential credential = new AzureKeyCredential(key);
DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
//sample invoice document
Uri invoiceUri = new Uri ("https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf");
AnalyzeDocumentOperation operation = await client.AnalyzeDocumentFromUriAsync(WaitUntil.Completed, "prebuilt-invoice", invoiceUri);
AnalyzeResult result = operation.Value;
for (int i = 0; i < result.Documents.Count; i++)
{
Console.WriteLine($"Document {i}:");
AnalyzedDocument document = result.Documents[i];
if (document.Fields.TryGetValue("VendorName", out DocumentField vendorNameField))
{
if (vendorNameField.FieldType == DocumentFieldType.String)
{
string vendorName = vendorNameField.Value.AsString();
Console.WriteLine($"Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
}
if (document.Fields.TryGetValue("CustomerName", out DocumentField customerNameField))
{
if (customerNameField.FieldType == DocumentFieldType.String)
{
string customerName = customerNameField.Value.AsString();
Console.WriteLine($"Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
}
if (document.Fields.TryGetValue("Items", out DocumentField itemsField))
{
if (itemsField.FieldType == DocumentFieldType.List)
{
foreach (DocumentField itemField in itemsField.Value.AsList())
{
Console.WriteLine("Item:");
if (itemField.FieldType == DocumentFieldType.Dictionary)
{
IReadOnlyDictionary<string, DocumentField> itemFields = itemField.Value.AsDictionary();
if (itemFields.TryGetValue("Description", out DocumentField itemDescriptionField))
{
if (itemDescriptionField.FieldType == DocumentFieldType.String)
{
string itemDescription = itemDescriptionField.Value.AsString();
Console.WriteLine($" Description: '{itemDescription}', with confidence {itemDescriptionField.Confidence}");
}
}
if (itemFields.TryGetValue("Amount", out DocumentField itemAmountField))
{
if (itemAmountField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue itemAmount = itemAmountField.Value.AsCurrency();
Console.WriteLine($" Amount: '{itemAmount.Symbol}{itemAmount.Amount}', with confidence {itemAmountField.Confidence}");
}
}
}
}
}
}
if (document.Fields.TryGetValue("SubTotal", out DocumentField subTotalField))
{
if (subTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue subTotal = subTotalField.Value.AsCurrency();
Console.WriteLine($"Sub Total: '{subTotal.Symbol}{subTotal.Amount}', with confidence {subTotalField.Confidence}");
}
}
if (document.Fields.TryGetValue("TotalTax", out DocumentField totalTaxField))
{
if (totalTaxField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue totalTax = totalTaxField.Value.AsCurrency();
Console.WriteLine($"Total Tax: '{totalTax.Symbol}{totalTax.Amount}', with confidence {totalTaxField.Confidence}");
}
}
if (document.Fields.TryGetValue("InvoiceTotal", out DocumentField invoiceTotalField))
{
if (invoiceTotalField.FieldType == DocumentFieldType.Currency)
{
CurrencyValue invoiceTotal = invoiceTotalField.Value.AsCurrency();
Console.WriteLine($"Invoice Total: '{invoiceTotal.Symbol}{invoiceTotal.Amount}', with confidence {invoiceTotalField.Confidence}");
}
}
}
Uygulamanızı çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra, programınızı oluşturmak ve çalıştırmak için formRecognizer_quickstart yanındaki yeşil Başlangıç düğmesini seçin veya F5 tuşuna basın.
İstemci kitaplığı | SDK başvurusu | REST API başvuru | Paketi (Maven) | Desteklenen REST API sürümü örnekleri |
İstemci kitaplığı | SDK başvurusu | REST API başvuru | Paketi (Maven) | Desteklenen REST API sürümü örnekleri|
İstemci kitaplığı | SDK başvurusu | REST API başvuru | Paketi (Maven) | Desteklenen REST API sürümü örnekleri|
Bu hızlı başlangıçta, formlardan ve belgelerden veri ve değerleri analiz etmek ve ayıklamak için aşağıdaki özellikleri kullanın:
Düzen— Model eğitmeye gerek kalmadan belgelerdeki radyo düğmeleri ve onay kutuları gibi tabloları, çizgileri, sözcükleri ve seçim işaretlerini analiz edin ve ayıklayın.
Önceden oluşturulmuş Fatura— Önceden eğitilmiş bir model kullanarak belirli belge türlerinde ortak alanları analiz edin ve ayıklayın.
Azure aboneliği - Ücretsiz bir abonelik oluşturun.
Visual Studio Code'un en son sürümü veya tercih ettiğiniz IDE. Bkz.Visual Studio Code'da Java.
İpucu
Visual Studio Code kullanmıyorsanız, geliştirme ortamınızda aşağıdakilerin yüklü olduğundan emin olun:
Java Geliştirme Seti (JDK) sürüm 8 veya üzeri. Daha fazla bilgi için bkz. OpenJDK'nin Microsoft Derlemesi.
Gradle, sürüm 6.8 veya üzeri.
Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız vardır.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Daha sonra anahtarınızı ve uç noktanızı koda yapıştırırsınız:
Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için doc-intel-app adlı yeni bir dizin oluşturun ve bu dizine gidin.
mkdir doc-intel-app && doc-intel-app
mkdir doc-intel-app; cd doc-intel-app
gradle init
Komutunu çalışma dizininizden çalıştırın. Bu komut, uygulamanızı oluşturmak ve yapılandırmak için çalışma zamanında kullanılan build.gradle.kts dahil olmak üzere Gradle için temel derleme dosyaları oluşturur.
gradle init --type basic
DSL seçmeniz istendiğinde Kotlin'i seçin.
İade veya Enter'ı seçerek varsayılan proje adını (doc-intel-app) kabul edin.
Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için form-recognize-app adlı yeni bir dizin oluşturun ve bu dizine gidin.
mkdir form-recognize-app && form-recognize-app
mkdir form-recognize-app; cd form-recognize-app
gradle init
Komutunu çalışma dizininizden çalıştırın. Bu komut, uygulamanızı oluşturmak ve yapılandırmak için çalışma zamanında kullanılan build.gradle.kts dahil olmak üzere Gradle için temel derleme dosyaları oluşturur.
gradle init --type basic
DSL seçmeniz istendiğinde Kotlin'i seçin.
İade veya Enter'ı seçerek varsayılan proje adını (form-recognize-app) kabul edin.
Bu hızlı başlangıçta Gradle bağımlılık yöneticisi kullanılır. Maven Central Repository'de diğer bağımlılık yöneticilerinin istemci kitaplığını ve bilgilerini bulabilirsiniz.
IDE'nizde projenin build.gradle.kts dosyasını açın. İstemci kitaplığını gerekli eklentiler ve ayarlarla birlikte bir implementation
deyim olarak eklemek için aşağıdaki kodu birlikte ödenin ve yapıştırın.
plugins {
java
application
}
application {
mainClass.set("DocIntelligence")
}
repositories {
mavenCentral()
}
dependencies {
implementation group: 'com.azure', name: 'azure-ai-documentintelligence', version: '1.0.0'
}
Bu hızlı başlangıçta Gradle bağımlılık yöneticisi kullanılır. Maven Central Repository'de diğer bağımlılık yöneticilerinin istemci kitaplığını ve bilgilerini bulabilirsiniz.
IDE'nizde projenin build.gradle.kts dosyasını açın. İstemci kitaplığını gerekli eklentiler ve ayarlarla birlikte bir implementation
deyim olarak eklemek için aşağıdaki kodu birlikte ödenin ve yapıştırın.
plugins {
java
application
}
application {
mainClass.set("FormRecognizer")
}
repositories {
mavenCentral()
}
dependencies {
implementation group: 'com.azure', name: 'azure-ai-formrecognizer', version: '4.1.0'
}
Bu hızlı başlangıçta Gradle bağımlılık yöneticisi kullanılır. Maven Central Repository'de diğer bağımlılık yöneticilerinin istemci kitaplığını ve bilgilerini bulabilirsiniz.
IDE'nizde projenin build.gradle.kts dosyasını açın. İstemci kitaplığını gerekli eklentiler ve ayarlarla birlikte bir implementation
deyim olarak eklemek için aşağıdaki kodu birlikte ödenin ve yapıştırın.
plugins {
java
application
}
application {
mainClass.set("FormRecognizer")
}
repositories {
mavenCentral()
}
dependencies {
implementation group: 'com.azure', name: 'azure-ai-formrecognizer', version: '4.0.0'
}
Belge Yönetim Bilgileri hizmetiyle etkileşim kurmak için sınıfının bir örneğini DocumentIntelligenceClient
oluşturmanız gerekir. Bunu yapmak için Azure portalından ile key
bir ve ve Belge Zekanız endpoint
ile AzureKeyCredential
bir DocumentIntelligenceClient
örnek oluşturursunuzAzureKeyCredential
.
Belge Yönetim Bilgileri hizmetiyle etkileşim kurmak için sınıfının bir örneğini DocumentAnalysisClient
oluşturmanız gerekir. Bunu yapmak için Azure portalından ile key
bir ve ve Belge Zekanız endpoint
ile AzureKeyCredential
bir DocumentAnalysisClient
örnek oluşturursunuzAzureKeyCredential
.
doc-intel-app dizininden aşağıdaki komutu çalıştırın:
mkdir -p src/main/java
Aşağıdaki dizin yapısını oluşturursunuz:
dizinine java
gidin ve adlı DocIntelligence.java
bir dosya oluşturun.
İpucu
DocIntelligence.java
dosyasını açın. Aşağıdaki kod örneklerinden birini kopyalayıp uygulamanıza yapıştırın:
dizinine java
gidin ve adlı FormRecognizer.java
bir dosya oluşturun.
İpucu
FormRecognizer.java
dosyasını açın. Aşağıdaki kod örneklerinden birini kopyalayıp uygulamanıza yapıştırın:
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
Belgelerden metin, seçim işaretleri, metin stilleri, tablo yapıları ve sınırlayıcı bölge koordinatlarını ayıklayın.
beginAnalyzeDocumentFromUrl
ve model kimliği olarak geçireceksiniz prebuilt-layout
. Döndürülen değer, gönderilen belgeyle ilgili verileri içeren bir AnalyzeResult
nesnedir.documentUrl
dosya URI değerini ekledik.Aşağıdaki kod örneğini dosyaya DocIntelligence.java
ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
import com.azure.ai.documentintelligence.models.AnalyzeDocumentRequest;
import com.azure.ai.documentintelligence.models.AnalyzeResult;
import com.azure.ai.documentintelligence.models.AnalyzeResultOperation;
import com.azure.ai.documentintelligence.models.DocumentTable;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.util.List;
public class DocIntelligence {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// create your `DocumentIntelligenceClient` instance and `AzureKeyCredential` variable
DocumentIntelligenceClient client = new DocumentIntelligenceClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String modelId = "prebuilt-layout";
String documentUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
SyncPoller <AnalyzeResultOperation, AnalyzeResultOperation> analyzeLayoutPoller =
client.beginAnalyzeDocument(modelId,
null,
null,
null,
null,
null,
null,
new AnalyzeDocumentRequest().setUrlSource(documentUrl));
AnalyzeResult analyzeLayoutResult = analyzeLayoutPoller.getFinalResult().getAnalyzeResult();
// pages
analyzeLayoutResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line '%s' is within a bounding polygon %s.%n",
documentLine.getContent(),
documentLine.getPolygon()));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f.%n",
documentWord.getContent(),
documentWord.getConfidence()));
// selection marks
documentPage.getSelectionMarks().forEach(documentSelectionMark ->
System.out.printf("Selection mark is '%s' and is within a bounding polygon %s with confidence %.2f.%n",
documentSelectionMark.getState().toString(),
documentSelectionMark.getPolygon(),
documentSelectionMark.getConfidence()));
});
// tables
List < DocumentTable > tables = analyzeLayoutResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n", documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
// styles
analyzeLayoutResult.getStyles().forEach(documentStyle -
> System.out.printf("Document is handwritten %s.%n", documentStyle.isHandwritten()));
}
}
Uygulamayı derleme ve çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra ana proje dizininize (doc-intel-app) geri gidin.
Uygulamanızı şu komutla build
oluşturun:
gradle build
Uygulamanızı şu komutla run
çalıştırın:
gradle run
Aşağıdaki kod örneğini dosyaya FormRecognizer.java
ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
import com.azure.ai.formrecognizer.documentanalysis.models.*;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClient;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClientBuilder;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.io.IOException;
import java.util.List;
import java.util.Arrays;
import java.time.LocalDate;
import java.util.Map;
import java.util.stream.Collectors;
public class FormRecognizer {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String documentUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
String modelId = "prebuilt-layout";
SyncPoller < OperationResult, AnalyzeResult > analyzeLayoutResultPoller =
client.beginAnalyzeDocumentFromUrl(modelId, documentUrl);
AnalyzeResult analyzeLayoutResult = analyzeLayoutResultPoller.getFinalResult();
// pages
analyzeLayoutResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line %s is within a bounding polygon %s.%n",
documentLine.getContent(),
documentLine.getPolygon().toString()));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f%n",
documentWord.getContent(),
documentWord.getConfidence()));
// selection marks
documentPage.getSelectionMarks().forEach(documentSelectionMark ->
System.out.printf("Selection mark is %s and is within a bounding polygon %s with confidence %.2f.%n",
documentSelectionMark.getState().toString(),
documentSelectionMark.getPolygon().toString(),
documentSelectionMark.getConfidence()));
});
// tables
List < DocumentTable > tables = analyzeLayoutResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n", documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
}
// Utility function to get the bounding polygon coordinates
private static String getBoundingCoordinates(List < Point > Polygon) {
return Polygon.stream().map(point -> String.format("[%.2f, %.2f]", point.getX(),
point.getY())).collect(Collectors.joining(", "));
}
}
Uygulamayı derleme ve çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra ana proje dizininize (form-recognize-app) geri gidin.
Uygulamanızı şu komutla build
oluşturun:
gradle build
Uygulamanızı şu komutla run
çalıştırın:
gradle run
Beklenen çıkışın kod parçacığı aşağıdadır:
Table 0 has 5 rows and 3 columns.
Cell 'Title of each class', has row index 0 and column index 0.
Cell 'Trading Symbol', has row index 0 and column index 1.
Cell 'Name of exchange on which registered', has row index 0 and column index 2.
Cell 'Common stock, $0.00000625 par value per share', has row index 1 and column index 0.
Cell 'MSFT', has row index 1 and column index 1.
Cell 'NASDAQ', has row index 1 and column index 2.
Cell '2.125% Notes due 2021', has row index 2 and column index 0.
Cell 'MSFT', has row index 2 and column index 1.
Cell 'NASDAQ', has row index 2 and column index 2.
Cell '3.125% Notes due 2028', has row index 3 and column index 0.
Cell 'MSFT', has row index 3 and column index 1.
Cell 'NASDAQ', has row index 3 and column index 2.
Cell '2.625% Notes due 2033', has row index 4 and column index 0.
Cell 'MSFT', has row index 4 and column index 1.
Cell 'NASDAQ', has row index 4 and column index 2.
Çıkışın tamamını görüntülemek için GitHub'daki Azure örnekleri deposunu ziyaret edin ve düzen modeli çıkışını görüntüleyin.
Aşağıdaki kod örneğini dosyaya FormRecognizer.java
ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClient;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClientBuilder;
import com.azure.ai.formrecognizer.documentanalysis.models.AnalyzeResult;
import com.azure.ai.formrecognizer.documentanalysis.models.OperationResult;
import com.azure.ai.formrecognizer.documentanalysis.models.DocumentTable;
import com.azure.ai.formrecognizer.documentanalysis.models.Point;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.util.List;
import java.util.stream.Collectors;
public class FormRecognizer {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String documentUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
String modelId = "prebuilt-layout";
SyncPoller < OperationResult, AnalyzeResult > analyzeLayoutPoller =
client.beginAnalyzeDocumentFromUrl(modelId, documentUrl);
AnalyzeResult analyzeLayoutResult = analyzeLayoutPoller.getFinalResult();
// pages
analyzeLayoutResult.getPages().forEach(documentPage -> {
System.out.printf("Page has width: %.2f and height: %.2f, measured with unit: %s%n",
documentPage.getWidth(),
documentPage.getHeight(),
documentPage.getUnit());
// lines
documentPage.getLines().forEach(documentLine ->
System.out.printf("Line '%s' is within a bounding polygon %s.%n",
documentLine.getContent(),
getBoundingCoordinates(documentLine.getPolygon())));
// words
documentPage.getWords().forEach(documentWord ->
System.out.printf("Word '%s' has a confidence score of %.2f.%n",
documentWord.getContent(),
documentWord.getConfidence()));
// selection marks
documentPage.getSelectionMarks().forEach(documentSelectionMark ->
System.out.printf("Selection mark is '%s' and is within a bounding polygon %s with confidence %.2f.%n",
documentSelectionMark.getSelectionMarkState().toString(),
getBoundingCoordinates(documentSelectionMark.getPolygon()),
documentSelectionMark.getConfidence()));
});
// tables
List < DocumentTable > tables = analyzeLayoutResult.getTables();
for (int i = 0; i < tables.size(); i++) {
DocumentTable documentTable = tables.get(i);
System.out.printf("Table %d has %d rows and %d columns.%n", i, documentTable.getRowCount(),
documentTable.getColumnCount());
documentTable.getCells().forEach(documentTableCell -> {
System.out.printf("Cell '%s', has row index %d and column index %d.%n", documentTableCell.getContent(),
documentTableCell.getRowIndex(), documentTableCell.getColumnIndex());
});
System.out.println();
}
// styles
analyzeLayoutResult.getStyles().forEach(documentStyle -
> System.out.printf("Document is handwritten %s.%n", documentStyle.isHandwritten()));
}
/**
* Utility function to get the bounding polygon coordinates.
*/
private static String getBoundingCoordinates(List < Point > Polygon) {
return Polygon.stream().map(point -> String.format("[%.2f, %.2f]", point.getX(),
point.getY())).collect(Collectors.joining(", "));
}
}
Uygulamayı derleme ve çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra ana proje dizininize (form-recognize-app) geri gidin.
Uygulamanızı şu komutla build
oluşturun:
gradle build
Uygulamanızı şu komutla run
çalıştırın:
gradle run
Önceden oluşturulmuş bir model kullanarak belirli belge türlerinden ortak alanları analiz edin ve ayıklayın. Bu örnekte, önceden oluşturulmuş fatura modelini kullanarak bir faturayı analiz ediyoruz.
İpucu
Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. İşlem için analyze
kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Bkz. model veri ayıklama.
invoiceUrl
dosya URL'si değerini ekledik.beginAnalyzeDocuments
ve model kimliği olarak geçireceksiniz PrebuiltModels.Invoice
. Döndürülen değer, gönderilen belgeyle ilgili verileri içeren bir result
nesnedir.Aşağıdaki kod örneğini dosyaya DocIntelligence.java
ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
import com.azure.ai.documentintelligence.models.AnalyzeDocumentRequest;
import com.azure.ai.documentintelligence.models.AnalyzeResult;
import com.azure.ai.documentintelligence.models.AnalyzeResultOperation;
import com.azure.ai.documentintelligence.models.Document;
import com.azure.ai.documentintelligence.models.DocumentField;
import com.azure.ai.documentintelligence.models.DocumentFieldType;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
public class DocIntelligence {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// sample document
String modelId = "prebuilt-invoice";
String invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
public static void main(final String[] args) throws IOException {
// Instantiate a client that will be used to call the service.
DocumentIntelligenceClient client = new DocumentIntelligenceClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
SyncPoller<AnalyzeResultOperation, AnalyzeResultOperation > analyzeInvoicesPoller =
client.beginAnalyzeDocument(modelId,
null,
null,
null,
null,
null,
null,
new AnalyzeDocumentRequest().setUrlSource(invoiceUrl));
AnalyzeResult analyzeInvoiceResult = analyzeInvoicesPoller.getFinalResult().getAnalyzeResult();
for (int i = 0; i < analyzeInvoiceResult.getDocuments().size(); i++) {
Document analyzedInvoice = analyzeInvoiceResult.getDocuments().get(i);
Map < String, DocumentField > invoiceFields = analyzedInvoice.getFields();
System.out.printf("----------- Analyzing invoice %d -----------%n", i);
DocumentField vendorNameField = invoiceFields.get("VendorName");
if (vendorNameField != null) {
if (DocumentFieldType.STRING == vendorNameField.getType()) {
String merchantName = vendorNameField.getValueString();
System.out.printf("Vendor Name: %s, confidence: %.2f%n",
merchantName, vendorNameField.getConfidence());
}
}
DocumentField vendorAddressField = invoiceFields.get("VendorAddress");
if (vendorAddressField != null) {
if (DocumentFieldType.STRING == vendorAddressField.getType()) {
String merchantAddress = vendorAddressField.getValueString();
System.out.printf("Vendor address: %s, confidence: %.2f%n",
merchantAddress, vendorAddressField.getConfidence());
}
}
DocumentField customerNameField = invoiceFields.get("CustomerName");
if (customerNameField != null) {
if (DocumentFieldType.STRING == customerNameField.getType()) {
String merchantAddress = customerNameField.getValueString();
System.out.printf("Customer Name: %s, confidence: %.2f%n",
merchantAddress, customerNameField.getConfidence());
}
}
DocumentField customerAddressRecipientField = invoiceFields.get("CustomerAddressRecipient");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.STRING == customerAddressRecipientField.getType()) {
String customerAddr = customerAddressRecipientField.getValueString();
System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n",
customerAddr, customerAddressRecipientField.getConfidence());
}
}
DocumentField invoiceIdField = invoiceFields.get("InvoiceId");
if (invoiceIdField != null) {
if (DocumentFieldType.STRING == invoiceIdField.getType()) {
String invoiceId = invoiceIdField.getValueString();
System.out.printf("Invoice ID: %s, confidence: %.2f%n",
invoiceId, invoiceIdField.getConfidence());
}
}
DocumentField invoiceDateField = invoiceFields.get("InvoiceDate");
if (customerNameField != null) {
if (DocumentFieldType.DATE == invoiceDateField.getType()) {
LocalDate invoiceDate = invoiceDateField.getValueDate();
System.out.printf("Invoice Date: %s, confidence: %.2f%n",
invoiceDate, invoiceDateField.getConfidence());
}
}
DocumentField invoiceTotalField = invoiceFields.get("InvoiceTotal");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.NUMBER == invoiceTotalField.getType()) {
Double invoiceTotal = invoiceTotalField.getValueNumber();
System.out.printf("Invoice Total: %.2f, confidence: %.2f%n",
invoiceTotal, invoiceTotalField.getConfidence());
}
}
DocumentField invoiceItemsField = invoiceFields.get("Items");
if (invoiceItemsField != null) {
System.out.printf("Invoice Items: %n");
if (DocumentFieldType.ARRAY == invoiceItemsField.getType()) {
List < DocumentField > invoiceItems = invoiceItemsField.getValueArray();
invoiceItems.stream()
.filter(invoiceItem -> DocumentFieldType.OBJECT == invoiceItem.getType())
.map(documentField -> documentField.getValueObject())
.forEach(documentFieldMap -> documentFieldMap.forEach((key, documentField) -> {
// See a full list of fields found on an invoice here:
// https://aka.ms/documentintelligence/invoicefields
if ("Description".equals(key)) {
if (DocumentFieldType.STRING == documentField.getType()) {
String name = documentField.getValueString();
System.out.printf("Description: %s, confidence: %.2fs%n",
name, documentField.getConfidence());
}
}
if ("Quantity".equals(key)) {
if (DocumentFieldType.NUMBER == documentField.getType()) {
Double quantity = documentField.getValueNumber();
System.out.printf("Quantity: %f, confidence: %.2f%n",
quantity, documentField.getConfidence());
}
}
if ("UnitPrice".equals(key)) {
if (DocumentFieldType.NUMBER == documentField.getType()) {
Double unitPrice = documentField.getValueNumber();
System.out.printf("Unit Price: %f, confidence: %.2f%n",
unitPrice, documentField.getConfidence());
}
}
if ("ProductCode".equals(key)) {
if (DocumentFieldType.NUMBER == documentField.getType()) {
Double productCode = documentField.getValueNumber();
System.out.printf("Product Code: %f, confidence: %.2f%n",
productCode, documentField.getConfidence());
}
}
}));
}
}
}
}
}
}
Uygulamayı derleme ve çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra ana proje dizininize (doc-intel-app) geri gidin.
Uygulamanızı şu komutla build
oluşturun:
gradle build
Uygulamanızı şu komutla run
çalıştırın:
gradle run
Aşağıdaki kod örneğini dosyaya FormRecognizer.java
ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
import com.azure.ai.formrecognizer.documentanalysis.models.*;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClient;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClientBuilder;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.io.IOException;
import java.util.List;
import java.util.Arrays;
import java.time.LocalDate;
import java.util.Map;
import java.util.stream.Collectors;
public class FormRecognizer {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(final String[] args) throws IOException {
// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String modelId = "prebuilt-invoice";
String invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
SyncPoller < OperationResult, AnalyzeResult > analyzeInvoicePoller = client.beginAnalyzeDocumentFromUrl(modelId, invoiceUrl);
AnalyzeResult analyzeInvoiceResult = analyzeInvoicePoller.getFinalResult();
for (int i = 0; i < analyzeInvoiceResult.getDocuments().size(); i++) {
AnalyzedDocument analyzedInvoice = analyzeInvoiceResult.getDocuments().get(i);
Map < String, DocumentField > invoiceFields = analyzedInvoice.getFields();
System.out.printf("----------- Analyzing invoice %d -----------%n", i);
DocumentField vendorNameField = invoiceFields.get("VendorName");
if (vendorNameField != null) {
if (DocumentFieldType.STRING == vendorNameField.getType()) {
String merchantName = vendorNameField.getValueAsString();
System.out.printf("Vendor Name: %s, confidence: %.2f%n",
merchantName, vendorNameField.getConfidence());
}
}
DocumentField vendorAddressField = invoiceFields.get("VendorAddress");
if (vendorAddressField != null) {
if (DocumentFieldType.STRING == vendorAddressField.getType()) {
String merchantAddress = vendorAddressField.getValueAsString();
System.out.printf("Vendor address: %s, confidence: %.2f%n",
merchantAddress, vendorAddressField.getConfidence());
}
}
DocumentField customerNameField = invoiceFields.get("CustomerName");
if (customerNameField != null) {
if (DocumentFieldType.STRING == customerNameField.getType()) {
String merchantAddress = customerNameField.getValueAsString();
System.out.printf("Customer Name: %s, confidence: %.2f%n",
merchantAddress, customerNameField.getConfidence());
}
}
DocumentField customerAddressRecipientField = invoiceFields.get("CustomerAddressRecipient");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.STRING == customerAddressRecipientField.getType()) {
String customerAddr = customerAddressRecipientField.getValueAsString();
System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n",
customerAddr, customerAddressRecipientField.getConfidence());
}
}
DocumentField invoiceIdField = invoiceFields.get("InvoiceId");
if (invoiceIdField != null) {
if (DocumentFieldType.STRING == invoiceIdField.getType()) {
String invoiceId = invoiceIdField.getValueAsString();
System.out.printf("Invoice ID: %s, confidence: %.2f%n",
invoiceId, invoiceIdField.getConfidence());
}
}
DocumentField invoiceDateField = invoiceFields.get("InvoiceDate");
if (customerNameField != null) {
if (DocumentFieldType.DATE == invoiceDateField.getType()) {
LocalDate invoiceDate = invoiceDateField.getValueAsDate();
System.out.printf("Invoice Date: %s, confidence: %.2f%n",
invoiceDate, invoiceDateField.getConfidence());
}
}
DocumentField invoiceTotalField = invoiceFields.get("InvoiceTotal");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.DOUBLE == invoiceTotalField.getType()) {
Double invoiceTotal = invoiceTotalField.getValueAsDouble();
System.out.printf("Invoice Total: %.2f, confidence: %.2f%n",
invoiceTotal, invoiceTotalField.getConfidence());
}
}
DocumentField invoiceItemsField = invoiceFields.get("Items");
if (invoiceItemsField != null) {
System.out.printf("Invoice Items: %n");
if (DocumentFieldType.LIST == invoiceItemsField.getType()) {
List < DocumentField > invoiceItems = invoiceItemsField.getValueAsList();
invoiceItems.stream()
.filter(invoiceItem -> DocumentFieldType.MAP == invoiceItem.getType())
.map(documentField -> documentField.getValueAsMap())
.forEach(documentFieldMap -> documentFieldMap.forEach((key, documentField) -> {
// See a full list of fields found on an invoice here:
// https://aka.ms/formrecognizer/invoicefields
if ("Description".equals(key)) {
if (DocumentFieldType.STRING == documentField.getType()) {
String name = documentField.getValueAsString();
System.out.printf("Description: %s, confidence: %.2fs%n",
name, documentField.getConfidence());
}
}
if ("Quantity".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double quantity = documentField.getValueAsDouble();
System.out.printf("Quantity: %f, confidence: %.2f%n",
quantity, documentField.getConfidence());
}
}
if ("UnitPrice".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double unitPrice = documentField.getValueAsDouble();
System.out.printf("Unit Price: %f, confidence: %.2f%n",
unitPrice, documentField.getConfidence());
}
}
if ("ProductCode".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double productCode = documentField.getValueAsDouble();
System.out.printf("Product Code: %f, confidence: %.2f%n",
productCode, documentField.getConfidence());
}
}
}));
}
}
}
}
}
Uygulamayı derleme ve çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra ana proje dizininize (doc-intel-app) geri gidin.
Uygulamanızı şu komutla build
oluşturun:
gradle build
Uygulamanızı şu komutla run
çalıştırın:
gradle run
Beklenen çıkışın kod parçacığı aşağıdadır:
----------- Analyzing invoice 0 -----------
Analyzed document has doc type invoice with confidence : 1.00
Vendor Name: CONTOSO LTD., confidence: 0.92
Vendor address: 123 456th St New York, NY, 10001, confidence: 0.91
Customer Name: MICROSOFT CORPORATION, confidence: 0.84
Customer Address Recipient: Microsoft Corp, confidence: 0.92
Invoice ID: INV-100, confidence: 0.97
Invoice Date: 2019-11-15, confidence: 0.97
Çıkışın tamamını görüntülemek için GitHub'daki Azure örnekleri deposunu ziyaret edin ve önceden oluşturulmuş fatura modeli çıkışını görüntüleyin.
Aşağıdaki kod örneğini dosyaya FormRecognizer.java
ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClient;
import com.azure.ai.formrecognizer.documentanalysis.DocumentAnalysisClientBuilder;
import com.azure.ai.formrecognizer.documentanalysis.models.AnalyzeResult;
import com.azure.ai.formrecognizer.documentanalysis.models.AnalyzedDocument;
import com.azure.ai.formrecognizer.documentanalysis.models.DocumentField;
import com.azure.ai.formrecognizer.documentanalysis.models.DocumentFieldType;
import com.azure.ai.formrecognizer.documentanalysis.models.OperationResult;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.io.IOException;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
public class FormRecognizer {
// set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
private static final String endpoint = "<your-endpoint>";
private static final String key = "<your-key>";
public static void main(String[] args) {
// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
.credential(new AzureKeyCredential(key))
.endpoint(endpoint)
.buildClient();
// sample document
String modelId = "prebuilt-invoice";
String invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
SyncPoller < OperationResult, AnalyzeResult > analyzeInvoicePoller = client.beginAnalyzeDocumentFromUrl(modelId, invoiceUrl);
AnalyzeResult analyzeInvoiceResult = analyzeInvoicePoller.getFinalResult();
for (int i = 0; i < analyzeInvoiceResult.getDocuments().size(); i++) {
AnalyzedDocument analyzedInvoice = analyzeInvoiceResult.getDocuments().get(i);
Map < String, DocumentField > invoiceFields = analyzedInvoice.getFields();
System.out.printf("----------- Analyzing invoice %d -----------%n", i);
DocumentField vendorNameField = invoiceFields.get("VendorName");
if (vendorNameField != null) {
if (DocumentFieldType.STRING == vendorNameField.getType()) {
String merchantName = vendorNameField.getValueAsString();
System.out.printf("Vendor Name: %s, confidence: %.2f%n",
merchantName, vendorNameField.getConfidence());
}
}
DocumentField vendorAddressField = invoiceFields.get("VendorAddress");
if (vendorAddressField != null) {
if (DocumentFieldType.STRING == vendorAddressField.getType()) {
String merchantAddress = vendorAddressField.getValueAsString();
System.out.printf("Vendor address: %s, confidence: %.2f%n",
merchantAddress, vendorAddressField.getConfidence());
}
}
DocumentField customerNameField = invoiceFields.get("CustomerName");
if (customerNameField != null) {
if (DocumentFieldType.STRING == customerNameField.getType()) {
String merchantAddress = customerNameField.getValueAsString();
System.out.printf("Customer Name: %s, confidence: %.2f%n",
merchantAddress, customerNameField.getConfidence());
}
}
DocumentField customerAddressRecipientField = invoiceFields.get("CustomerAddressRecipient");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.STRING == customerAddressRecipientField.getType()) {
String customerAddr = customerAddressRecipientField.getValueAsString();
System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n",
customerAddr, customerAddressRecipientField.getConfidence());
}
}
DocumentField invoiceIdField = invoiceFields.get("InvoiceId");
if (invoiceIdField != null) {
if (DocumentFieldType.STRING == invoiceIdField.getType()) {
String invoiceId = invoiceIdField.getValueAsString();
System.out.printf("Invoice ID: %s, confidence: %.2f%n",
invoiceId, invoiceIdField.getConfidence());
}
}
DocumentField invoiceDateField = invoiceFields.get("InvoiceDate");
if (customerNameField != null) {
if (DocumentFieldType.DATE == invoiceDateField.getType()) {
LocalDate invoiceDate = invoiceDateField.getValueAsDate();
System.out.printf("Invoice Date: %s, confidence: %.2f%n",
invoiceDate, invoiceDateField.getConfidence());
}
}
DocumentField invoiceTotalField = invoiceFields.get("InvoiceTotal");
if (customerAddressRecipientField != null) {
if (DocumentFieldType.DOUBLE == invoiceTotalField.getType()) {
Double invoiceTotal = invoiceTotalField.getValueAsDouble();
System.out.printf("Invoice Total: %.2f, confidence: %.2f%n",
invoiceTotal, invoiceTotalField.getConfidence());
}
}
DocumentField invoiceItemsField = invoiceFields.get("Items");
if (invoiceItemsField != null) {
System.out.printf("Invoice Items: %n");
if (DocumentFieldType.LIST == invoiceItemsField.getType()) {
List < DocumentField > invoiceItems = invoiceItemsField.getValueAsList();
invoiceItems.stream()
.filter(invoiceItem -> DocumentFieldType.MAP == invoiceItem.getType())
.map(documentField -> documentField.getValueAsMap())
.forEach(documentFieldMap -> documentFieldMap.forEach((key, documentField) -> {
// See a full list of fields found on an invoice here:
// https://aka.ms/formrecognizer/invoicefields
if ("Description".equals(key)) {
if (DocumentFieldType.STRING == documentField.getType()) {
String name = documentField.getValueAsString();
System.out.printf("Description: %s, confidence: %.2fs%n",
name, documentField.getConfidence());
}
}
if ("Quantity".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double quantity = documentField.getValueAsDouble();
System.out.printf("Quantity: %f, confidence: %.2f%n",
quantity, documentField.getConfidence());
}
}
if ("UnitPrice".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double unitPrice = documentField.getValueAsDouble();
System.out.printf("Unit Price: %f, confidence: %.2f%n",
unitPrice, documentField.getConfidence());
}
}
if ("ProductCode".equals(key)) {
if (DocumentFieldType.DOUBLE == documentField.getType()) {
Double productCode = documentField.getValueAsDouble();
System.out.printf("Product Code: %f, confidence: %.2f%n",
productCode, documentField.getConfidence());
}
}
}));
}
}
}
}
}
Uygulamayı derleme ve çalıştırma
Uygulamanıza bir kod örneği ekledikten sonra ana proje dizininize (doc-intel-app) geri gidin.
Uygulamanızı şu komutla build
oluşturun:
gradle build
Uygulamanızı şu komutla run
çalıştırın:
gradle run
İstemci kitaplığı | SDK başvurusu | REST API başvuru | Paketi (npm) | Desteklenen REST API sürümü örnekleri |
İstemci kitaplığı | SDK başvurusu | REST API başvuru | Paketi (npm) | Desteklenen REST API sürümü örnekleri |
Bu hızlı başlangıçta, formlardan ve belgelerden veri ve değerleri analiz etmek ve ayıklamak için aşağıdaki özellikleri kullanın:
Düzen— Model eğitmeye gerek kalmadan belgelerdeki radyo düğmeleri ve onay kutuları gibi tabloları, çizgileri, sözcükleri ve seçim işaretlerini analiz edin ve ayıklayın.
Önceden oluşturulmuş Fatura— Önceden eğitilmiş bir fatura modeli kullanarak belirli belge türlerinde ortak alanları analiz edin ve ayıklayın.
Azure aboneliği - Ücretsiz bir abonelik oluşturun.
Visual Studio Code'un en son sürümü veya tercih ettiğiniz IDE. Daha fazla bilgi için bkz. Visual Studio Code'da Node.js.
Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız vardır.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Yeni Node.js Express uygulaması oluşturma: Bir konsol penceresinde (cmd, PowerShell veya Bash gibi) uygulamanız için adlı doc-intel-app
yeni bir dizin oluşturun ve bu dizine gidin.
mkdir doc-intel-app && cd doc-intel-app
npm init
Uygulamayı başlatmak ve projenizin iskelesini yapmak için komutunu çalıştırın.
npm init
Terminalde sunulan istemleri kullanarak projenizin özniteliklerini belirtin.
index.js
öneririz. Açıklama, test komutu, GitHub deposu, anahtar sözcükler, yazar ve lisans bilgileri isteğe bağlı özniteliklerdir; bunlar bu proje için atlanabilir.package.json
dosya oluşturulur.İstemci kitaplığını ai-document-intelligence
ve azure/identity
npm paketlerini yükleyin:
npm i @azure-rest/ai-document-intelligence@1.0.0 @azure/core-auth
Uygulamanızın package.json
dosyası bağımlılıklarla güncelleştirilir.
İstemci kitaplığını ai-form-recognizer
ve azure/identity
npm paketlerini yükleyin:
npm i @azure/ai-form-recognizer@5.0.0 @azure/identity
package.json
dosyası bağımlılıklarla güncelleştirilir.İstemci kitaplığını ai-form-recognizer
ve azure/identity
npm paketlerini yükleyin:
npm i @azure/ai-form-recognizer@4.0.0 @azure/identity
Uygulama dizininde adlı index.js
bir dosya oluşturun.
İpucu
Belge Yönetim Bilgileri hizmetiyle etkileşim kurmak için sınıfının bir örneğini DocumentIntelligenceClient
oluşturmanız gerekir. Bunu yapmak için Azure portalından ile key
bir ve ve Belge Zekanız endpoint
ile AzureKeyCredential
bir DocumentIntelligenceClient
örnek oluşturursunuzAzureKeyCredential
.
Belge Yönetim Bilgileri hizmetiyle etkileşim kurmak için sınıfının bir örneğini DocumentAnalysisClient
oluşturmanız gerekir. Bunu yapmak için Azure portalından ile key
ve ile bir örnek endpoint
AzureKeyCredential
Form Tanıma oluşturursunuzAzureKeyCredential
.DocumentAnalysisClient
index.js
Dosyayı Visual Studio Code'da veya sık kullandığınız IDE'de açın. Aşağıdaki kod örneklerinden birini kopyalayıp uygulamanıza yapıştırın:
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
Belgelerden metin, seçim işaretleri, metin stilleri, tablo yapıları ve sınırlayıcı bölge koordinatlarını ayıklayın.
- Bu örnekte, URL'den bir belge dosyası gerekir. Bu hızlı başlangıç için örnek belgemizi kullanabilirsiniz.
- Dosyanın üst kısmındaki değişkene
formUrl
dosya URL'si değerini ekledik.- Url'den belirli bir dosyayı analiz etmek için yöntemini kullanır
beginAnalyzeDocuments
ve model kimliği olarak geçirirsinizprebuilt-layout
.
const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default,
{ getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence");
const { AzureKeyCredential } = require("@azure/core-auth");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
async function main() {
const client = DocumentIntelligence(endpoint, new AzureKeyCredential(key));
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-layout")
.post({
contentType: "application/json",
body: {
urlSource: formUrl
},
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = await getLongRunningPoller(client, initialResponse);
const analyzeResult = (await poller.pollUntilDone()).body.analyzeResult;
const documents = analyzeResult?.documents;
const document = documents && documents[0];
if (!document) {
throw new Error("Expected at least one document in the result.");
}
console.log(
"Extracted document:",
document.docType,
`(confidence: ${document.confidence || "<undefined>"})`,
);
console.log("Fields:", document.fields);
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Uygulamanızı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı çalıştırın:
Belge Yönetim Bilgileri uygulamanızın (doc-intel-app) bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
node index.js
Aşağıdaki kod örneğini dosyaya index.js
ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
async function main() {
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginAnalyzeDocumentFromUrl("prebuilt-layout", formUrl);
const {
pages,
tables
} = await poller.pollUntilDone();
if (pages.length <= 0) {
console.log("No pages were extracted from the document.");
} else {
console.log("Pages:");
for (const page of pages) {
console.log("- Page", page.pageNumber, `(unit: ${page.unit})`);
console.log(` ${page.width}x${page.height}, angle: ${page.angle}`);
console.log(` ${page.lines.length} lines, ${page.words.length} words`);
}
}
if (tables.length <= 0) {
console.log("No tables were extracted from the document.");
} else {
console.log("Tables:");
for (const table of tables) {
console.log(
`- Extracted table: ${table.columnCount} columns, ${table.rowCount} rows (${table.cells.length} cells)`
);
}
}
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Uygulamanızı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı çalıştırın:
Belge Yönetim Bilgileri uygulamanızın (doc-intel-app) bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
node index.js
Beklenen çıkışın kod parçacığı aşağıdadır:
Pages:
- Page 1 (unit: inch)
8.5x11, angle: 0
69 lines, 425 words
Tables:
- Extracted table: 3 columns, 5 rows (15 cells)
Çıkışın tamamını görüntülemek için GitHub'daki Azure örnekleri deposunu ziyaret edin ve düzen modeli çıkışını görüntüleyin.
Bu örnekte, önceden oluşturulmuş fatura modelini kullanarak bir faturayı analiz ediyoruz.
İpucu
Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. İşlem için analyze
kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Bkz. model veri ayıklama.
invoiceUrl
dosya URL'si değerini ekledik.beginAnalyzeDocuments
ve model kimliği olarak geçireceksiniz PrebuiltModels.Invoice
. Döndürülen değer, gönderilen belgeyle ilgili verileri içeren bir result
nesnedir.
const DocumentIntelligence = require("@azure-rest/ai-document-intelligence").default,
{ getLongRunningPoller, isUnexpected } = require("@azure-rest/ai-document-intelligence");
const { AzureKeyCredential } = require("@azure/core-auth");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
const invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
async function main() {
const client = DocumentIntelligence(endpoint, new AzureKeyCredential(key));
const initialResponse = await client
.path("/documentModels/{modelId}:analyze", "prebuilt-invoice")
.post({
contentType: "application/json",
body: {
// The Document Intelligence service will access the URL to the invoice image and extract data from it
urlSource: invoiceUrl,
},
});
if (isUnexpected(initialResponse)) {
throw initialResponse.body.error;
}
const poller = await getLongRunningPoller(client, initialResponse);
poller.onProgress((state) => console.log("Operation:", state.result, state.status));
const analyzeResult = (await poller.pollUntilDone()).body.analyzeResult;
const documents = analyzeResult?.documents;
const result = documents && documents[0];
if (result) {
console.log(result.fields);
} else {
throw new Error("Expected at least one invoice in the result.");
}
console.log(
"Extracted invoice:",
document.docType,
`(confidence: ${document.confidence || "<undefined>"})`,
);
console.log("Fields:", document.fields);
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Uygulamanızı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı çalıştırın:
Belge Yönetim Bilgileri uygulamanızın (doc-intel-app) bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
node index.js
const {
AzureKeyCredential,
DocumentAnalysisClient
} = require("@azure/ai-form-recognizer");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
async function main() {
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginAnalyzeDocumentFromUrl("prebuilt-invoice", invoiceUrl);
const {
pages,
tables
} = await poller.pollUntilDone();
if (pages.length <= 0) {
console.log("No pages were extracted from the document.");
} else {
console.log("Pages:");
for (const page of pages) {
console.log("- Page", page.pageNumber, `(unit: ${page.unit})`);
console.log(` ${page.width}x${page.height}, angle: ${page.angle}`);
console.log(` ${page.lines.length} lines, ${page.words.length} words`);
if (page.lines && page.lines.length > 0) {
console.log(" Lines:");
for (const line of page.lines) {
console.log(` - "${line.content}"`);
// The words of the line can also be iterated independently. The words are computed based on their
// corresponding spans.
for (const word of line.words()) {
console.log(` - "${word.content}"`);
}
}
}
}
}
if (tables.length <= 0) {
console.log("No tables were extracted from the document.");
} else {
console.log("Tables:");
for (const table of tables) {
console.log(
`- Extracted table: ${table.columnCount} columns, ${table.rowCount} rows (${table.cells.length} cells)`
);
}
}
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Uygulamanızı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı çalıştırın:
Belge Yönetim Bilgileri uygulamanızın (doc-intel-app) bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
node index.js
Beklenen çıkışın kod parçacığı aşağıdadır:
Vendor Name: CONTOSO LTD.
Customer Name: MICROSOFT CORPORATION
Invoice Date: 2019-11-15T00:00:00.000Z
Due Date: 2019-12-15T00:00:00.000Z
Items:
- <no product code>
Description: Test for 23 fields
Quantity: 1
Date: undefined
Unit: undefined
Unit Price: 1
Tax: undefined
Amount: 100
Çıkışın tamamını görüntülemek için GitHub'daki Azure örnekleri deposunu ziyaret edin ve önceden oluşturulmuş fatura modeli çıkışını görüntüleyin.
const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
// set `<your-key>` and `<your-endpoint>` variables with the values from the Azure portal.
const key = "<your-key>";
const endpoint = "<your-endpoint>";
// sample document
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
async function main() {
const client = new DocumentAnalysisClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginAnalyzeDocument("prebuilt-invoice", invoiceUrl);
const {
documents: [document],
} = await poller.pollUntilDone();
if (document) {
const {
vendorName,
customerName,
invoiceDate,
dueDate,
items,
subTotal,
previousUnpaidBalance,
totalTax,
amountDue,
} = document.fields;
// The invoice model has many fields. For details, *see* [Invoice model field extraction](../../prebuilt/invoice.md#field-extraction)
console.log("Vendor Name:", vendorName && vendorName.value);
console.log("Customer Name:", customerName && customerName.value);
console.log("Invoice Date:", invoiceDate && invoiceDate.value);
console.log("Due Date:", dueDate && dueDate.value);
console.log("Items:");
for (const item of (items && items.values) || []) {
const { productCode, description, quantity, date, unit, unitPrice, tax, amount } =
item.properties;
console.log("-", (productCode && productCode.value) || "<no product code>");
console.log(" Description:", description && description.value);
console.log(" Quantity:", quantity && quantity.value);
console.log(" Date:", date && date.value);
console.log(" Unit:", unit && unit.value);
console.log(" Unit Price:", unitPrice && unitPrice.value);
console.log(" Tax:", tax && tax.value);
console.log(" Amount:", amount && amount.value);
}
console.log("Subtotal:", subTotal && subTotal.value);
console.log("Previous Unpaid Balance:", previousUnpaidBalance && previousUnpaidBalance.value);
console.log("Tax:", totalTax && totalTax.value);
console.log("Amount Due:", amountDue && amountDue.value);
} else {
throw new Error("Expected at least one receipt in the result.");
}
}
main().catch((error) => {
console.error("An error occurred:", error);
process.exit(1);
});
Uygulamanızı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı çalıştırın:
Belge Yönetim Bilgileri uygulamanızın (doc-intel-app) bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
node index.js
İstemci kitaplığı |SDK başvurusu | REST API başvuru | Paketi (PyPi) | Örnekleri | Desteklenen REST API sürümü
İstemci kitaplığı |SDK başvurusu | REST API başvuru | Paketi (PyPi) | Örnekleri | Desteklenen REST API sürümü
İstemci kitaplığı | SDK başvurusu | REST API başvuru | Paketi (PyPi) | Örnekleri | Desteklenen REST API sürümü
Bu hızlı başlangıçta, form ve belgelerden verileri analiz etmek ve ayıklamak için aşağıdaki özellikleri kullanın:
Düzen— Model eğitmeye gerek kalmadan radyo düğmeleri, onay kutuları ve anahtar-değer çiftleri gibi tabloları, çizgileri, sözcükleri ve seçim işaretlerini analiz edip ayıklayın.
Önceden oluşturulmuş Fatura— Önceden eğitilmiş bir model kullanarak belirli belge türlerinde ortak alanları analiz edin ve ayıklayın.
Azure aboneliği - Ücretsiz bir abonelik oluşturun.
pip --version
. Python'ın en son sürümünü yükleyerek pip alın.Visual Studio Code'un en son sürümü veya tercih ettiğiniz IDE. Daha fazla bilgi için bkz. Visual Studio Code'da Python'ı Kullanmaya Başlama.
Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız vardır.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Yerel ortamınızda bir terminal penceresi açın ve pip ile Python için Azure AI Document Intelligence istemci kitaplığını yükleyin:
pip install azure-ai-documentintelligence==1.0.0b4
pip install azure-ai-formrecognizer==3.3.0
pip install azure-ai-formrecognizer==3.2.0b6
Belge Yönetim Bilgileri hizmetiyle etkileşim kurmak için sınıfının bir örneğini DocumentIntelligenceClient
oluşturmanız gerekir. Bunu yapmak için Azure portalından ile key
bir ve ve Belge Zekanız endpoint
ile AzureKeyCredential
bir DocumentIntelligenceClient
örnek oluşturursunuzAzureKeyCredential
.
Tercih ettiğiniz düzenleyicide veya IDE'de doc_intel_quickstart.py adlı yeni bir Python dosyası oluşturun.
doc_intel_quickstart.py dosyasını açın ve aşağıdaki kod örneklerinden birini seçerek kopyalayıp uygulamanıza yapıştırın:
Belge Yönetim Bilgileri hizmetiyle etkileşim kurmak için sınıfının bir örneğini DocumentAnalysisClient
oluşturmanız gerekir. Bunu yapmak için Azure portalından ile key
bir ve ve Belge Zekanız endpoint
ile AzureKeyCredential
bir DocumentAnalysisClient
örnek oluşturursunuzAzureKeyCredential
.
Tercih ettiğiniz düzenleyicide veya IDE'de form_recognizer_quickstart.py adlı yeni bir Python dosyası oluşturun.
form_recognizer_quickstart.py dosyasını açın ve aşağıdaki kod örneklerinden birini seçerek kopyalayıp uygulamanıza yapıştırın:
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
Belgelerden metin, seçim işaretleri, metin stilleri, tablo yapıları ve sınırlayıcı bölge koordinatlarını ayıklayın.
aşağıdaki kod örneğini doc_intel_quickstart.py uygulamanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
# import libraries
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.ai.documentintelligence.models import AnalyzeResult
from azure.ai.documentintelligence.models import AnalyzeDocumentRequest
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
# helper functions
def get_words(page, line):
result = []
for word in page.words:
if _in_span(word, line.spans):
result.append(word)
return result
def _in_span(word, spans):
for span in spans:
if word.span.offset >= span.offset and (
word.span.offset + word.span.length
) <= (span.offset + span.length):
return True
return False
def analyze_layout():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
document_intelligence_client = DocumentIntelligenceClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-layout", AnalyzeDocumentRequest(url_source=formUrl
))
result: AnalyzeResult = poller.result()
if result.styles and any([style.is_handwritten for style in result.styles]):
print("Document contains handwritten content")
else:
print("Document does not contain handwritten content")
for page in result.pages:
print(f"----Analyzing layout from page #{page.page_number}----")
print(
f"Page has width: {page.width} and height: {page.height}, measured with unit: {page.unit}"
)
if page.lines:
for line_idx, line in enumerate(page.lines):
words = get_words(page, line)
print(
f"...Line # {line_idx} has word count {len(words)} and text '{line.content}' "
f"within bounding polygon '{line.polygon}'"
)
for word in words:
print(
f"......Word '{word.content}' has a confidence of {word.confidence}"
)
if page.selection_marks:
for selection_mark in page.selection_marks:
print(
f"Selection mark is '{selection_mark.state}' within bounding polygon "
f"'{selection_mark.polygon}' and has a confidence of {selection_mark.confidence}"
)
if result.tables:
for table_idx, table in enumerate(result.tables):
print(
f"Table # {table_idx} has {table.row_count} rows and "
f"{table.column_count} columns"
)
if table.bounding_regions:
for region in table.bounding_regions:
print(
f"Table # {table_idx} location on page: {region.page_number} is {region.polygon}"
)
for cell in table.cells:
print(
f"...Cell[{cell.row_index}][{cell.column_index}] has text '{cell.content}'"
)
if cell.bounding_regions:
for region in cell.bounding_regions:
print(
f"...content on page {region.page_number} is within bounding polygon '{region.polygon}'"
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_layout()
Uygulamayı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı derleyip çalıştırın:
doc_intel_quickstart.py dosyanızın bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
python doc_intel_quickstart.py
Url'deki belirli bir dosyayı analiz etmek için yöntemini kullanın begin_analyze_document_from_url
ve model kimliği olarak geçirin prebuilt-layout
. Döndürülen değer, gönderilen belgeyle ilgili verileri içeren bir result
nesnedir.
aşağıdaki kod örneğini form_recognizer_quickstart.py uygulamanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Form Tanıma örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
# import libraries
import os
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def format_polygon(polygon):
if not polygon:
return "N/A"
return ", ".join(["[{}, {}]".format(p.x, p.y) for p in polygon])
def analyze_layout():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", formUrl)
result = poller.result()
for idx, style in enumerate(result.styles):
print(
"Document contains {} content".format(
"handwritten" if style.is_handwritten else "no handwritten"
)
)
for page in result.pages:
print("----Analyzing layout from page #{}----".format(page.page_number))
print(
"Page has width: {} and height: {}, measured with unit: {}".format(
page.width, page.height, page.unit
)
)
for line_idx, line in enumerate(page.lines):
words = line.get_words()
print(
"...Line # {} has word count {} and text '{}' within bounding box '{}'".format(
line_idx,
len(words),
line.content,
format_polygon(line.polygon),
)
)
for word in words:
print(
"......Word '{}' has a confidence of {}".format(
word.content, word.confidence
)
)
for selection_mark in page.selection_marks:
print(
"...Selection mark is '{}' within bounding box '{}' and has a confidence of {}".format(
selection_mark.state,
format_polygon(selection_mark.polygon),
selection_mark.confidence,
)
)
for table_idx, table in enumerate(result.tables):
print(
"Table # {} has {} rows and {} columns".format(
table_idx, table.row_count, table.column_count
)
)
for region in table.bounding_regions:
print(
"Table # {} location on page: {} is {}".format(
table_idx,
region.page_number,
format_polygon(region.polygon),
)
)
for cell in table.cells:
print(
"...Cell[{}][{}] has content '{}'".format(
cell.row_index,
cell.column_index,
cell.content,
)
)
for region in cell.bounding_regions:
print(
"...content on page {} is within bounding box '{}'".format(
region.page_number,
format_polygon(region.polygon),
)
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_layout()
Uygulamayı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı derleyip çalıştırın:
form_recognizer_quickstart.py dosyanızın bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
python form_recognizer_quickstart.py
Beklenen çıkışın kod parçacığı aşağıdadır:
----Analyzing layout from page #1----
Page has width: 8.5 and height: 11.0, measured with unit: inch
...Line # 0 has word count 2 and text 'UNITED STATES' within bounding box '[3.4915, 0.6828], [5.0116, 0.6828], [5.0116, 0.8265], [3.4915, 0.8265]'
......Word 'UNITED' has a confidence of 1.0
......Word 'STATES' has a confidence of 1.0
...Line # 1 has word count 4 and text 'SECURITIES AND EXCHANGE COMMISSION' within bounding box '[2.1937, 0.9061], [6.297, 0.9061], [6.297, 1.0498], [2.1937, 1.0498]'
......Word 'SECURITIES' has a confidence of 1.0
......Word 'AND' has a confidence of 1.0
......Word 'EXCHANGE' has a confidence of 1.0
......Word 'COMMISSION' has a confidence of 1.0
...Line # 2 has word count 3 and text 'Washington, D.C. 20549' within bounding box '[3.4629, 1.1179], [5.031, 1.1179], [5.031, 1.2483], [3.4629, 1.2483]'
......Word 'Washington,' has a confidence of 1.0
......Word 'D.C.' has a confidence of 1.0
Çıkışın tamamını görüntülemek için GitHub'daki Azure örnekleri deposunu ziyaret edin ve düzen modeli çıkışını görüntüleyin.
aşağıdaki kod örneğini form_recognizer_quickstart.py uygulamanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Form Tanıma örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
# import libraries
import os
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def analyze_layout():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", formUrl
)
result = poller.result()
for idx, style in enumerate(result.styles):
print(
"Document contains {} content".format(
"handwritten" if style.is_handwritten else "no handwritten"
)
)
for page in result.pages:
print("----Analyzing layout from page #{}----".format(page.page_number))
print(
"Page has width: {} and height: {}, measured with unit: {}".format(
page.width, page.height, page.unit
)
)
for line_idx, line in enumerate(page.lines):
words = line.get_words()
print(
"...Line # {} has word count {} and text '{}' within bounding polygon '{}'".format(
line_idx,
len(words),
line.content,
format_polygon(line.polygon),
)
)
for word in words:
print(
"......Word '{}' has a confidence of {}".format(
word.content, word.confidence
)
)
for selection_mark in page.selection_marks:
print(
"...Selection mark is '{}' within bounding polygon '{}' and has a confidence of {}".format(
selection_mark.state,
format_polygon(selection_mark.polygon),
selection_mark.confidence,
)
)
for table_idx, table in enumerate(result.tables):
print(
"Table # {} has {} rows and {} columns".format(
table_idx, table.row_count, table.column_count
)
)
for region in table.bounding_regions:
print(
"Table # {} location on page: {} is {}".format(
table_idx,
region.page_number,
format_polygon(region.polygon),
)
)
for cell in table.cells:
print(
"...Cell[{}][{}] has content '{}'".format(
cell.row_index,
cell.column_index,
cell.content,
)
)
for region in cell.bounding_regions:
print(
"...content on page {} is within bounding polygon '{}'".format(
region.page_number,
format_polygon(region.polygon),
)
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_layout()
Uygulamayı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı derleyip çalıştırın:
form_recognizer_quickstart.py dosyanızın bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
python form_recognizer_quickstart.py
Önceden oluşturulmuş bir model kullanarak belirli belge türlerinden ortak alanları analiz edin ve ayıklayın. Bu örnekte, önceden oluşturulmuş fatura modelini kullanarak bir faturayı analiz ediyoruz.
İpucu
Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. İşlem için analyze
kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Bkz. model veri ayıklama.
invoiceUrl
dosya URL'si değerini ekledik.aşağıdaki kod örneğini doc_intel_quickstart.py uygulamanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
# import libraries
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.ai.documentintelligence.models import AnalyzeResult
from azure.ai.documentintelligence.models import AnalyzeDocumentRequest
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def analyze_invoice():
# sample document
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
document_intelligence_client = DocumentIntelligenceClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_intelligence_client.begin_analyze_document(
"prebuilt-invoice", AnalyzeDocumentRequest(url_source=invoiceUrl)
)
invoices = poller.result()
if invoices.documents:
for idx, invoice in enumerate(invoices.documents):
print(f"--------Analyzing invoice #{idx + 1}--------")
vendor_name = invoice.fields.get("VendorName")
if vendor_name:
print(
f"Vendor Name: {vendor_name.get('content')} has confidence: {vendor_name.get('confidence')}"
)
vendor_address = invoice.fields.get("VendorAddress")
if vendor_address:
print(
f"Vendor Address: {vendor_address.get('content')} has confidence: {vendor_address.get('confidence')}"
)
vendor_address_recipient = invoice.fields.get("VendorAddressRecipient")
if vendor_address_recipient:
print(
f"Vendor Address Recipient: {vendor_address_recipient.get('content')} has confidence: {vendor_address_recipient.get('confidence')}"
)
customer_name = invoice.fields.get("CustomerName")
if customer_name:
print(
f"Customer Name: {customer_name.get('content')} has confidence: {customer_name.get('confidence')}"
)
customer_id = invoice.fields.get("CustomerId")
if customer_id:
print(
f"Customer Id: {customer_id.get('content')} has confidence: {customer_id.get('confidence')}"
)
customer_address = invoice.fields.get("CustomerAddress")
if customer_address:
print(
f"Customer Address: {customer_address.get('content')} has confidence: {customer_address.get('confidence')}"
)
customer_address_recipient = invoice.fields.get("CustomerAddressRecipient")
if customer_address_recipient:
print(
f"Customer Address Recipient: {customer_address_recipient.get('content')} has confidence: {customer_address_recipient.get('confidence')}"
)
invoice_id = invoice.fields.get("InvoiceId")
if invoice_id:
print(
f"Invoice Id: {invoice_id.get('content')} has confidence: {invoice_id.get('confidence')}"
)
invoice_date = invoice.fields.get("InvoiceDate")
if invoice_date:
print(
f"Invoice Date: {invoice_date.get('content')} has confidence: {invoice_date.get('confidence')}"
)
invoice_total = invoice.fields.get("InvoiceTotal")
if invoice_total:
print(
f"Invoice Total: {invoice_total.get('content')} has confidence: {invoice_total.get('confidence')}"
)
due_date = invoice.fields.get("DueDate")
if due_date:
print(
f"Due Date: {due_date.get('content')} has confidence: {due_date.get('confidence')}"
)
purchase_order = invoice.fields.get("PurchaseOrder")
if purchase_order:
print(
f"Purchase Order: {purchase_order.get('content')} has confidence: {purchase_order.get('confidence')}"
)
billing_address = invoice.fields.get("BillingAddress")
if billing_address:
print(
f"Billing Address: {billing_address.get('content')} has confidence: {billing_address.get('confidence')}"
)
billing_address_recipient = invoice.fields.get("BillingAddressRecipient")
if billing_address_recipient:
print(
f"Billing Address Recipient: {billing_address_recipient.get('content')} has confidence: {billing_address_recipient.get('confidence')}"
)
shipping_address = invoice.fields.get("ShippingAddress")
if shipping_address:
print(
f"Shipping Address: {shipping_address.get('content')} has confidence: {shipping_address.get('confidence')}"
)
shipping_address_recipient = invoice.fields.get("ShippingAddressRecipient")
if shipping_address_recipient:
print(
f"Shipping Address Recipient: {shipping_address_recipient.get('content')} has confidence: {shipping_address_recipient.get('confidence')}"
)
print("Invoice items:")
for idx, item in enumerate(invoice.fields.get("Items").get("valueArray")):
print(f"...Item #{idx + 1}")
item_description = item.get("valueObject").get("Description")
if item_description:
print(
f"......Description: {item_description.get('content')} has confidence: {item_description.get('confidence')}"
)
item_quantity = item.get("valueObject").get("Quantity")
if item_quantity:
print(
f"......Quantity: {item_quantity.get('content')} has confidence: {item_quantity.get('confidence')}"
)
unit = item.get("valueObject").get("Unit")
if unit:
print(
f"......Unit: {unit.get('content')} has confidence: {unit.get('confidence')}"
)
unit_price = item.get("valueObject").get("UnitPrice")
if unit_price:
unit_price_code = (
unit_price.get("valueCurrency").get("currencyCode")
if unit_price.get("valueCurrency").get("currencyCode")
else ""
)
print(
f"......Unit Price: {unit_price.get('content')}{unit_price_code} has confidence: {unit_price.get('confidence')}"
)
product_code = item.get("valueObject").get("ProductCode")
if product_code:
print(
f"......Product Code: {product_code.get('content')} has confidence: {product_code.get('confidence')}"
)
item_date = item.get("valueObject").get("Date")
if item_date:
print(
f"......Date: {item_date.get('content')} has confidence: {item_date.get('confidence')}"
)
tax = item.get("valueObject").get("Tax")
if tax:
print(
f"......Tax: {tax.get('content')} has confidence: {tax.get('confidence')}"
)
amount = item.get("valueObject").get("Amount")
if amount:
print(
f"......Amount: {amount.get('content')} has confidence: {amount.get('confidence')}"
)
subtotal = invoice.fields.get("SubTotal")
if subtotal:
print(
f"Subtotal: {subtotal.get('content')} has confidence: {subtotal.get('confidence')}"
)
total_tax = invoice.fields.get("TotalTax")
if total_tax:
print(
f"Total Tax: {total_tax.get('content')} has confidence: {total_tax.get('confidence')}"
)
previous_unpaid_balance = invoice.fields.get("PreviousUnpaidBalance")
if previous_unpaid_balance:
print(
f"Previous Unpaid Balance: {previous_unpaid_balance.get('content')} has confidence: {previous_unpaid_balance.get('confidence')}"
)
amount_due = invoice.fields.get("AmountDue")
if amount_due:
print(
f"Amount Due: {amount_due.get('content')} has confidence: {amount_due.get('confidence')}"
)
service_start_date = invoice.fields.get("ServiceStartDate")
if service_start_date:
print(
f"Service Start Date: {service_start_date.get('content')} has confidence: {service_start_date.get('confidence')}"
)
service_end_date = invoice.fields.get("ServiceEndDate")
if service_end_date:
print(
f"Service End Date: {service_end_date.get('content')} has confidence: {service_end_date.get('confidence')}"
)
service_address = invoice.fields.get("ServiceAddress")
if service_address:
print(
f"Service Address: {service_address.get('content')} has confidence: {service_address.get('confidence')}"
)
service_address_recipient = invoice.fields.get("ServiceAddressRecipient")
if service_address_recipient:
print(
f"Service Address Recipient: {service_address_recipient.get('content')} has confidence: {service_address_recipient.get('confidence')}"
)
remittance_address = invoice.fields.get("RemittanceAddress")
if remittance_address:
print(
f"Remittance Address: {remittance_address.get('content')} has confidence: {remittance_address.get('confidence')}"
)
remittance_address_recipient = invoice.fields.get(
"RemittanceAddressRecipient"
)
if remittance_address_recipient:
print(
f"Remittance Address Recipient: {remittance_address_recipient.get('content')} has confidence: {remittance_address_recipient.get('confidence')}"
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_invoice()
Uygulamayı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı derleyip çalıştırın:
doc_intel_quickstart.py dosyanızın bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
python doc_intel_quickstart.py
URI'de belirli bir dosyayı analiz etmek için yöntemini kullanın begin_analyze_document_from_url
ve model kimliği olarak geçirin prebuilt-invoice
. Döndürülen değer, gönderilen belgeyle ilgili verileri içeren bir result
nesnedir.
aşağıdaki kod örneğini form_recognizer_quickstart.py uygulamanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Form Tanıma örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
# import libraries
import os
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def format_bounding_region(bounding_regions):
if not bounding_regions:
return "N/A"
return ", ".join(
"Page #{}: {}".format(region.page_number, format_polygon(region.polygon))
for region in bounding_regions
)
def format_polygon(polygon):
if not polygon:
return "N/A"
return ", ".join(["[{}, {}]".format(p.x, p.y) for p in polygon])
def analyze_invoice():
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-invoice", invoiceUrl
)
invoices = poller.result()
for idx, invoice in enumerate(invoices.documents):
print("--------Recognizing invoice #{}--------".format(idx + 1))
vendor_name = invoice.fields.get("VendorName")
if vendor_name:
print(
"Vendor Name: {} has confidence: {}".format(
vendor_name.value, vendor_name.confidence
)
)
vendor_address = invoice.fields.get("VendorAddress")
if vendor_address:
print(
"Vendor Address: {} has confidence: {}".format(
vendor_address.value, vendor_address.confidence
)
)
vendor_address_recipient = invoice.fields.get("VendorAddressRecipient")
if vendor_address_recipient:
print(
"Vendor Address Recipient: {} has confidence: {}".format(
vendor_address_recipient.value, vendor_address_recipient.confidence
)
)
customer_name = invoice.fields.get("CustomerName")
if customer_name:
print(
"Customer Name: {} has confidence: {}".format(
customer_name.value, customer_name.confidence
)
)
customer_id = invoice.fields.get("CustomerId")
if customer_id:
print(
"Customer Id: {} has confidence: {}".format(
customer_id.value, customer_id.confidence
)
)
customer_address = invoice.fields.get("CustomerAddress")
if customer_address:
print(
"Customer Address: {} has confidence: {}".format(
customer_address.value, customer_address.confidence
)
)
customer_address_recipient = invoice.fields.get("CustomerAddressRecipient")
if customer_address_recipient:
print(
"Customer Address Recipient: {} has confidence: {}".format(
customer_address_recipient.value,
customer_address_recipient.confidence,
)
)
invoice_id = invoice.fields.get("InvoiceId")
if invoice_id:
print(
"Invoice Id: {} has confidence: {}".format(
invoice_id.value, invoice_id.confidence
)
)
invoice_date = invoice.fields.get("InvoiceDate")
if invoice_date:
print(
"Invoice Date: {} has confidence: {}".format(
invoice_date.value, invoice_date.confidence
)
)
invoice_total = invoice.fields.get("InvoiceTotal")
if invoice_total:
print(
"Invoice Total: {} has confidence: {}".format(
invoice_total.value, invoice_total.confidence
)
)
due_date = invoice.fields.get("DueDate")
if due_date:
print(
"Due Date: {} has confidence: {}".format(
due_date.value, due_date.confidence
)
)
purchase_order = invoice.fields.get("PurchaseOrder")
if purchase_order:
print(
"Purchase Order: {} has confidence: {}".format(
purchase_order.value, purchase_order.confidence
)
)
billing_address = invoice.fields.get("BillingAddress")
if billing_address:
print(
"Billing Address: {} has confidence: {}".format(
billing_address.value, billing_address.confidence
)
)
billing_address_recipient = invoice.fields.get("BillingAddressRecipient")
if billing_address_recipient:
print(
"Billing Address Recipient: {} has confidence: {}".format(
billing_address_recipient.value,
billing_address_recipient.confidence,
)
)
shipping_address = invoice.fields.get("ShippingAddress")
if shipping_address:
print(
"Shipping Address: {} has confidence: {}".format(
shipping_address.value, shipping_address.confidence
)
)
shipping_address_recipient = invoice.fields.get("ShippingAddressRecipient")
if shipping_address_recipient:
print(
"Shipping Address Recipient: {} has confidence: {}".format(
shipping_address_recipient.value,
shipping_address_recipient.confidence,
)
)
print("Invoice items:")
for idx, item in enumerate(invoice.fields.get("Items").value):
print("...Item #{}".format(idx + 1))
item_description = item.value.get("Description")
if item_description:
print(
"......Description: {} has confidence: {}".format(
item_description.value, item_description.confidence
)
)
item_quantity = item.value.get("Quantity")
if item_quantity:
print(
"......Quantity: {} has confidence: {}".format(
item_quantity.value, item_quantity.confidence
)
)
unit = item.value.get("Unit")
if unit:
print(
"......Unit: {} has confidence: {}".format(
unit.value, unit.confidence
)
)
unit_price = item.value.get("UnitPrice")
if unit_price:
print(
"......Unit Price: {} has confidence: {}".format(
unit_price.value, unit_price.confidence
)
)
product_code = item.value.get("ProductCode")
if product_code:
print(
"......Product Code: {} has confidence: {}".format(
product_code.value, product_code.confidence
)
)
item_date = item.value.get("Date")
if item_date:
print(
"......Date: {} has confidence: {}".format(
item_date.value, item_date.confidence
)
)
tax = item.value.get("Tax")
if tax:
print(
"......Tax: {} has confidence: {}".format(tax.value, tax.confidence)
)
amount = item.value.get("Amount")
if amount:
print(
"......Amount: {} has confidence: {}".format(
amount.value, amount.confidence
)
)
subtotal = invoice.fields.get("SubTotal")
if subtotal:
print(
"Subtotal: {} has confidence: {}".format(
subtotal.value, subtotal.confidence
)
)
total_tax = invoice.fields.get("TotalTax")
if total_tax:
print(
"Total Tax: {} has confidence: {}".format(
total_tax.value, total_tax.confidence
)
)
previous_unpaid_balance = invoice.fields.get("PreviousUnpaidBalance")
if previous_unpaid_balance:
print(
"Previous Unpaid Balance: {} has confidence: {}".format(
previous_unpaid_balance.value, previous_unpaid_balance.confidence
)
)
amount_due = invoice.fields.get("AmountDue")
if amount_due:
print(
"Amount Due: {} has confidence: {}".format(
amount_due.value, amount_due.confidence
)
)
service_start_date = invoice.fields.get("ServiceStartDate")
if service_start_date:
print(
"Service Start Date: {} has confidence: {}".format(
service_start_date.value, service_start_date.confidence
)
)
service_end_date = invoice.fields.get("ServiceEndDate")
if service_end_date:
print(
"Service End Date: {} has confidence: {}".format(
service_end_date.value, service_end_date.confidence
)
)
service_address = invoice.fields.get("ServiceAddress")
if service_address:
print(
"Service Address: {} has confidence: {}".format(
service_address.value, service_address.confidence
)
)
service_address_recipient = invoice.fields.get("ServiceAddressRecipient")
if service_address_recipient:
print(
"Service Address Recipient: {} has confidence: {}".format(
service_address_recipient.value,
service_address_recipient.confidence,
)
)
remittance_address = invoice.fields.get("RemittanceAddress")
if remittance_address:
print(
"Remittance Address: {} has confidence: {}".format(
remittance_address.value, remittance_address.confidence
)
)
remittance_address_recipient = invoice.fields.get("RemittanceAddressRecipient")
if remittance_address_recipient:
print(
"Remittance Address Recipient: {} has confidence: {}".format(
remittance_address_recipient.value,
remittance_address_recipient.confidence,
)
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_invoice()
Uygulamayı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı derleyip çalıştırın:
form_recognizer_quickstart.py dosyanızın bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
python form_recognizer_quickstart.py
Beklenen çıkışın kod parçacığı aşağıdadır:
--------Recognizing invoice #1--------
Vendor Name: CONTOSO LTD. has confidence: 0.919
Vendor Address: 123 456th St New York, NY, 10001 has confidence: 0.907
Vendor Address Recipient: Contoso Headquarters has confidence: 0.919
Customer Name: MICROSOFT CORPORATION has confidence: 0.84
Customer Id: CID-12345 has confidence: 0.956
Customer Address: 123 Other St, Redmond WA, 98052 has confidence: 0.909
Customer Address Recipient: Microsoft Corp has confidence: 0.917
Invoice Id: INV-100 has confidence: 0.972
Invoice Date: 2019-11-15 has confidence: 0.971
Invoice Total: CurrencyValue(amount=110.0, symbol=$) has confidence: 0.97
Due Date: 2019-12-15 has confidence: 0.973
Çıkışın tamamını görüntülemek için GitHub'daki Azure örnekleri deposunu ziyaret edin ve önceden oluşturulmuş fatura modeli çıkışını görüntüleyin.
aşağıdaki kod örneğini form_recognizer_quickstart.py uygulamanıza ekleyin. Anahtar ve uç nokta değişkenlerini Azure portal Form Tanıma örneğinizdeki değerlerle güncelleştirdiğinizden emin olun:
# import libraries
import os
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
# set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal
endpoint = "<your-endpoint>"
key = "<your-key>"
def format_polygon(polygon):
if not polygon:
return "N/A"
return ", ".join(["[{}, {}]".format(p.x, p.y) for p in polygon])
def analyze_layout():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = document_analysis_client.begin_analyze_document_from_url(
"prebuilt-layout", formUrl
)
result = poller.result()
for idx, style in enumerate(result.styles):
print(
"Document contains {} content".format(
"handwritten" if style.is_handwritten else "no handwritten"
)
)
for page in result.pages:
print("----Analyzing layout from page #{}----".format(page.page_number))
print(
"Page has width: {} and height: {}, measured with unit: {}".format(
page.width, page.height, page.unit
)
)
for line_idx, line in enumerate(page.lines):
words = line.get_words()
print(
"...Line # {} has word count {} and text '{}' within bounding polygon '{}'".format(
line_idx,
len(words),
line.content,
format_polygon(line.polygon),
)
)
for word in words:
print(
"......Word '{}' has a confidence of {}".format(
word.content, word.confidence
)
)
for selection_mark in page.selection_marks:
print(
"...Selection mark is '{}' within bounding polygon '{}' and has a confidence of {}".format(
selection_mark.state,
format_polygon(selection_mark.polygon),
selection_mark.confidence,
)
)
for table_idx, table in enumerate(result.tables):
print(
"Table # {} has {} rows and {} columns".format(
table_idx, table.row_count, table.column_count
)
)
for region in table.bounding_regions:
print(
"Table # {} location on page: {} is {}".format(
table_idx,
region.page_number,
format_polygon(region.polygon),
)
)
for cell in table.cells:
print(
"...Cell[{}][{}] has content '{}'".format(
cell.row_index,
cell.column_index,
cell.content,
)
)
for region in cell.bounding_regions:
print(
"...content on page {} is within bounding polygon '{}'".format(
region.page_number,
format_polygon(region.polygon),
)
)
print("----------------------------------------")
if __name__ == "__main__":
analyze_layout()
Uygulamayı çalıştırma
Uygulamanıza kod örneği ekledikten sonra programınızı derleyip çalıştırın:
form_recognizer_quickstart.py dosyanızın bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
python form_recognizer_quickstart.py
Bu hızlı başlangıçta, belgelerdeki verileri ve değerleri analiz etmek ve ayıklamak için Belge Zekası REST API'sini kullanmayı öğrenin:
Azure aboneliği - Ücretsiz olarak oluşturun
curl komut satırı aracı yüklendi.
PowerShell sürüm 7.*+ (veya benzer bir komut satırı uygulaması).):
PowerShell sürümünüzü denetlemek için işletim sisteminize göre aşağıdaki komutu yazın:
Get-Host | Select-Object Version
$PSVersionTable
Belge Zekası (tek hizmetli) veya Azure AI hizmetleri (çok hizmetli) kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız vardır.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
POST isteği, belgeleri önceden oluşturulmuş veya özel bir modelle analiz etmek için kullanılır. Get isteği, belge çözümleme çağrısının sonucunu almak için kullanılır. , modelId
POST ve resultId
GET işlemleriyle birlikte kullanılır.
cURL komutunu çalıştırmadan önce, istek sonrası için aşağıdaki değişiklikleri yapın:
değerini Azure portal Belge Zekası örneğinizdeki uç nokta değeriyle değiştirin {endpoint}
.
değerini Azure portal Belge Zekası örneğinizdeki anahtar değeriyle değiştirin {key}
.
Başvuru olarak aşağıdaki tabloyu kullanarak ve {your-document-url}
değerlerini istediğiniz değerlerle değiştirin{modelID}
.
URL'de bir belge dosyası gerekir. Bu hızlı başlangıç için, her özellik için aşağıdaki tabloda sağlanan örnek formları kullanabilirsiniz:
Örnek belgeler
Özellik | {modelID} | {your-document-url} |
---|---|---|
Okuma | prebuilt-read |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/read.png |
Düzen | prebuilt-layout |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/layout.png |
Sağlık sigortası kartı | prebuilt-healthInsuranceCard.us |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/insurance-card.png |
W-2 | prebuilt-tax.us.w2 |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/w2.png |
Fatura | prebuilt-invoice |
https://github.com/Azure-Samples/cognitive-services-REST-api-samples/raw/master/curl/form-recognizer/rest-api/invoice.pdf |
Makbuz | prebuilt-receipt |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/receipt.png |
Kimlik belgesi | prebuilt-idDocument |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/identity_documents.png |
Örnek belgeler
Özellik | {modelID} | {your-document-url} |
---|---|---|
Genel Belge | prebuilt-document |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf |
Okuma | prebuilt-read |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/read.png |
Düzen | prebuilt-layout |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/layout.png |
Sağlık sigortası kartı | prebuilt-healthInsuranceCard.us |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/insurance-card.png |
W-2 | prebuilt-tax.us.w2 |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/w2.png |
Fatura | prebuilt-invoice |
https://github.com/Azure-Samples/cognitive-services-REST-api-samples/raw/master/curl/form-recognizer/rest-api/invoice.pdf |
Makbuz | prebuilt-receipt |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/receipt.png |
Kimlik belgesi | prebuilt-idDocument |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/rest-api/identity_documents.png |
Kartvizit | prebuilt-businessCard |
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/de5e0d8982ab754823c54de47a47e8e499351523/curl/form-recognizer/rest-api/business_card.jpg |
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
curl -v -i POST "{endpoint}/documentintelligence/documentModels/{modelId}:analyze?api-version=2024-11-30" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
curl -v -i POST "{endpoint}/formrecognizer/documentModels/{modelID}:analyze?api-version=2023-07-31" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
curl -v -i POST "{endpoint}/formrecognizer/documentModels/{modelId}:analyze?api-version=2022-08-31" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
Salt okunur operation-location 202 (Success)
üst bilgisi içeren bir yanıt alırsınız. Bu üst bilginin değeri, zaman uyumsuz işlemin durumunu almak ve aynı kaynak abonelik anahtarınızla bir GET isteği kullanarak sonuçları almak için sorgulanabilen bir içerir resultID
:
&preserve-view=true&tabs=HTTP) API'sini çağırdıktan Analyze document
sonra, işlemin ve ayıklanan verilerin durumunu almak için Get analyze result&preserve-view=true&tabs=HTTP) API'sini çağırın. Komutu çalıştırmadan önce şu değişiklikleri yapın:
API'yi Analyze document
çağırdıktan sonra, işlemin ve ayıklanan verilerin durumunu almak için Çözümle sonuç API'sini çağırın. Komutu çalıştırmadan önce şu değişiklikleri yapın:
API'yi Analyze document
çağırdıktan sonra, işlemin ve ayıklanan verilerin durumunu almak için Çözümle sonuç API'sini çağırın. Komutu çalıştırmadan önce şu değişiklikleri yapın:
POST yanıtından Operation-Location üst bilgisini değiştirin{resultID}
.
değerini Azure portalındaki Belge Zekası örneğinizdeki anahtar değeriyle değiştirin {key}
.
curl -v -X GET "{endpoint}/documentintelligence/documentModels/{modelId}/analyzeResults/{resultId}?api-version=2024-11-30" -H "Ocp-Apim-Subscription-Key: {key}"
curl -v -X GET "{endpoint}/formrecognizer/documentModels/{modelId}/analyzeResults/{resultId}?api-version=2023-07-31" -H "Ocp-Apim-Subscription-Key: {key}"
curl -v -X GET "{endpoint}/formrecognizer/documentModels/{modelId}/analyzeResults/{resultId}?api-version=2022-08-31" -H "Ocp-Apim-Subscription-Key: {key}"
JSON çıkışıyla bir 200 (Success)
yanıt alırsınız. İlk alan olan "status"
, işlemin durumunu gösterir. İşlem tamamlanmazsa veya "notStarted"
değeridir "status"
"running"
ve API'yi el ile veya bir betik aracılığıyla yeniden çağırmalısınız. Aramalar arasında bir saniyelik veya daha fazla bir aralık öneririz.
{
"status": "succeeded",
"createdDateTime": "2024-03-25T19:31:37Z",
"lastUpdatedDateTime": "2024-03-25T19:31:43Z",
"analyzeResult": {
"apiVersion": "2024-11-30",
"modelId": "prebuilt-invoice",
"stringIndexType": "textElements"...
..."pages": [
{
"pageNumber": 1,
"angle": 0,
"width": 8.5,
"height": 11,
"unit": "inch",
"words": [
{
"content": "CONTOSO",
"boundingBox": [
0.5911,
0.6857,
1.7451,
0.6857,
1.7451,
0.8664,
0.5911,
0.8664
],
"confidence": 1,
"span": {
"offset": 0,
"length": 7
}
}],
}]
}
}
{
"status": "succeeded",
"createdDateTime": "2023-08-25T19:31:37Z",
"lastUpdatedDateTime": "2023-08-25T19:31:43Z",
"analyzeResult": {
"apiVersion": "2023-07-31",
"modelId": "prebuilt-invoice",
"stringIndexType": "textElements"...
..."pages": [
{
"pageNumber": 1,
"angle": 0,
"width": 8.5,
"height": 11,
"unit": "inch",
"words": [
{
"content": "CONTOSO",
"boundingBox": [
0.5911,
0.6857,
1.7451,
0.6857,
1.7451,
0.8664,
0.5911,
0.8664
],
"confidence": 1,
"span": {
"offset": 0,
"length": 7
}
}],
}]
}
}
{
"status": "succeeded",
"createdDateTime": "2022-09-25T19:31:37Z",
"lastUpdatedDateTime": "2022-09-25T19:31:43Z",
"analyzeResult": {
"apiVersion": "2022-08-31",
"modelId": "prebuilt-invoice",
"stringIndexType": "textElements"...
..."pages": [
{
"pageNumber": 1,
"angle": 0,
"width": 8.5,
"height": 11,
"unit": "inch",
"words": [
{
"content": "CONTOSO",
"boundingBox": [
0.5911,
0.6857,
1.7451,
0.6857,
1.7451,
0.8664,
0.5911,
0.8664
],
"confidence": 1,
"span": {
"offset": 0,
"length": 7
}
}],
}]
}
}
Önceden oluşturulmuş modeller, önceden tanımlanmış belge alanı kümelerini ayıklar. Ayıklanan alan adları, türleri, açıklamaları ve örnekler için bkz . Model veri ayıklama .
İşte bu kadar, tebrikler!
Bu hızlı başlangıçta, çeşitli formları ve belgeleri analiz etmek için bir belge Yönetim Bilgileri modeli kullandınız. Ardından, Belge Zekası API'sini ayrıntılı olarak öğrenmek için Document Intelligence Studio'yu inceleyin ve belgelere başvurun.
Gelişmiş bir deneyim ve gelişmiş model kalitesi için Document Intelligence Studio'yu deneyin
v3.1 ile v4.0 arasında geçiş için bkz . Changelog Geçişi kılavuzları.
Bu içerik şunlar için geçerlidir:v2.1 | En son sürüm:
v4.0 (GA)
İstediğiniz programlama dilini veya REST API'yi kullanarak Azure AI Belge Zekası'nı kullanmaya başlayın. Belge Zekası, belgelerinizden anahtar-değer çiftlerini, metinleri ve tabloları ayıklamak için makine öğrenmesini kullanan bulut tabanlı bir Azure yapay zeka hizmetidir. Teknolojiyi öğrenirken ücretsiz hizmeti kullanmanızı öneririz. Ücretsiz sayfa sayısının ayda 500 ile sınırlı olduğunu unutmayın.
Belge Zekası özellikleri ve geliştirme seçenekleri hakkında daha fazla bilgi edinmek için Genel Bakış sayfamızı ziyaret edin.
Başvuru belgeleri | Kitaplık kaynak kodu | Paketi (NuGet)Örnekleri |
Bu hızlı başlangıçta, formlardan ve belgelerden yapılandırılmış verileri ayıklamak için aşağıdaki API'leri kullanacaksınız:
Azure aboneliği - Ücretsiz bir abonelik oluşturun.
Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız olduğunu lütfen unutmayın.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Visual Studio 2019'u başlatın.
Başlangıç sayfasında Yeni proje oluştur'u seçin.
Yeni proje oluştur sayfasında, arama kutusuna konsol yazın. Konsol Uygulaması şablonunu ve ardından İleri'yi seçin.
Yeni projenizi yapılandırın iletişim penceresinde Proje adı kutusuna girinformRecognizer_quickstart
. Ardından İleri'yi seçin.
Ek bilgiler iletişim kutusunda .NET 5.0 (Geçerli) öğesini ve ardından Oluştur'u seçin.
formRecognizer_quickstart projenize sağ tıklayın ve NuGet Paketlerini Yönet... öğesini seçin.
Gözat sekmesini seçin ve Azure.AI.FormRecognizer yazın.
Açılan menüden sürüm 3.1.1'i ve ardından Yükle'yi seçin.
Belge Yönetim Bilgileri hizmetiyle etkileşim kurmak için sınıfının bir örneğini FormRecognizerClient
oluşturmanız gerekir. Bunu yapmak için anahtarınız ile bir AzureKeyCredential
ve ve Belge Zekası endpoint
ile AzureKeyCredential
bir FormRecognizerClient
örnek oluşturursunuz.
Not
console
yeni projeler önceki sürümlerden farklı yeni bir program stili oluşturur.Main
yazmanız gerekir. Üst düzey deyimleri, genel using yönergelerini veya örtük using yönergelerini eklemeniz gerekmez.Program.cs dosyasını açın.
Aşağıdaki kullanım yönergelerini ekleyin:
using Azure;
using Azure.AI.FormRecognizer;
using Azure.AI.FormRecognizer.Models;
using System.Threading.Tasks;
endpoint
ayarlayın ve ve FormRecognizerClient
örneğinizi AzureKeyCredential
oluşturun:key
private static readonly string endpoint = "your-form-recognizer-endpoint";
private static readonly string key = "your-api-key";
private static readonly AzureKeyCredential credential = new AzureKeyCredential(key);
satırını Console.Writeline("Hello World!");
silin ve Try It kod örneklerinden birini Program.cs dosyasına ekleyin:
Uygulamanızın Main yöntemine kopyalayıp yapıştırmak için bir kod örneği seçin:
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.
Belgelerden sınırlayıcı bölge koordinatlarıyla birlikte metin, seçim işaretleri, metin stilleri ve tablo yapılarını ayıklayın.
FormRecognizerClient recognizerClient = AuthenticateClient();
Task recognizeContent = RecognizeContent(recognizerClient);
Task.WaitAll(recognizeContent);
private static FormRecognizerClient AuthenticateClient()
{
var credential = new AzureKeyCredential(key);
var client = new FormRecognizerClient(new Uri(endpoint), credential);
return client;
}
private static async Task RecognizeContent(FormRecognizerClient recognizerClient)
{
string formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
FormPageCollection formPages = await recognizerClient
.StartRecognizeContentFromUri(new Uri(formUrl))
.WaitForCompletionAsync();
foreach (FormPage page in formPages)
{
Console.WriteLine($"Form Page {page.PageNumber} has {page.Lines.Count} lines.");
for (int i = 0; i < page.Lines.Count; i++)
{
FormLine line = page.Lines[i];
Console.WriteLine($" Line {i} has {line.Words.Count} word{(line.Words.Count > 1 ? "s" : "")}, and text: '{line.Text}'.");
}
for (int i = 0; i < page.Tables.Count; i++)
{
FormTable table = page.Tables[i];
Console.WriteLine($"Table {i} has {table.RowCount} rows and {table.ColumnCount} columns.");
foreach (FormTableCell cell in table.Cells)
{
Console.WriteLine($" Cell ({cell.RowIndex}, {cell.ColumnIndex}) contains text: '{cell.Text}'.");
}
}
}
}
}
}
Bu örnek, örnek olarak fatura kullanarak önceden eğitilmiş modellerle belirli ortak belge türlerindeki verilerin nasıl çözümlendiğini gösterir.
invoiceUri
dosya URI değerini ekledik.StartRecognizeInvoicesFromUriAsync
.Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. Analiz işlemi için kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Belge Yönetim Bilgileri hizmeti tarafından şu anda desteklenen önceden oluşturulmuş modeller şunlardır:
FormRecognizerClient recognizerClient = AuthenticateClient();
Task analyzeinvoice = AnalyzeInvoice(recognizerClient, invoiceUrl);
Task.WaitAll(analyzeinvoice);
private static FormRecognizerClient AuthenticateClient() {
var credential = new AzureKeyCredential(key);
var client = new FormRecognizerClient(new Uri(endpoint), credential);
return client;
}
static string invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
private static async Task AnalyzeInvoice(FormRecognizerClient recognizerClient, string invoiceUrl) {
var options = new RecognizeInvoicesOptions() {
Locale = "en-US"
};
RecognizedFormCollection invoices = await recognizerClient.StartRecognizeInvoicesFromUriAsync(new Uri(invoiceUrl), options).WaitForCompletionAsync();
RecognizedForm invoice = invoices[0];
FormField invoiceIdField;
if (invoice.Fields.TryGetValue("InvoiceId", out invoiceIdField)) {
if (invoiceIdField.Value.ValueType == FieldValueType.String) {
string invoiceId = invoiceIdField.Value.AsString();
Console.WriteLine($" Invoice Id: '{invoiceId}', with confidence {invoiceIdField.Confidence}");
}
}
FormField invoiceDateField;
if (invoice.Fields.TryGetValue("InvoiceDate", out invoiceDateField)) {
if (invoiceDateField.Value.ValueType == FieldValueType.Date) {
DateTime invoiceDate = invoiceDateField.Value.AsDate();
Console.WriteLine($" Invoice Date: '{invoiceDate}', with confidence {invoiceDateField.Confidence}");
}
}
FormField dueDateField;
if (invoice.Fields.TryGetValue("DueDate", out dueDateField)) {
if (dueDateField.Value.ValueType == FieldValueType.Date) {
DateTime dueDate = dueDateField.Value.AsDate();
Console.WriteLine($" Due Date: '{dueDate}', with confidence {dueDateField.Confidence}");
}
}
FormField vendorNameField;
if (invoice.Fields.TryGetValue("VendorName", out vendorNameField)) {
if (vendorNameField.Value.ValueType == FieldValueType.String) {
string vendorName = vendorNameField.Value.AsString();
Console.WriteLine($" Vendor Name: '{vendorName}', with confidence {vendorNameField.Confidence}");
}
}
FormField vendorAddressField;
if (invoice.Fields.TryGetValue("VendorAddress", out vendorAddressField)) {
if (vendorAddressField.Value.ValueType == FieldValueType.String) {
string vendorAddress = vendorAddressField.Value.AsString();
Console.WriteLine($" Vendor Address: '{vendorAddress}', with confidence {vendorAddressField.Confidence}");
}
}
FormField customerNameField;
if (invoice.Fields.TryGetValue("CustomerName", out customerNameField)) {
if (customerNameField.Value.ValueType == FieldValueType.String) {
string customerName = customerNameField.Value.AsString();
Console.WriteLine($" Customer Name: '{customerName}', with confidence {customerNameField.Confidence}");
}
}
FormField customerAddressField;
if (invoice.Fields.TryGetValue("CustomerAddress", out customerAddressField)) {
if (customerAddressField.Value.ValueType == FieldValueType.String) {
string customerAddress = customerAddressField.Value.AsString();
Console.WriteLine($" Customer Address: '{customerAddress}', with confidence {customerAddressField.Confidence}");
}
}
FormField customerAddressRecipientField;
if (invoice.Fields.TryGetValue("CustomerAddressRecipient", out customerAddressRecipientField)) {
if (customerAddressRecipientField.Value.ValueType == FieldValueType.String) {
string customerAddressRecipient = customerAddressRecipientField.Value.AsString();
Console.WriteLine($" Customer address recipient: '{customerAddressRecipient}', with confidence {customerAddressRecipientField.Confidence}");
}
}
FormField invoiceTotalField;
if (invoice.Fields.TryGetValue("InvoiceTotal", out invoiceTotalField)) {
if (invoiceTotalField.Value.ValueType == FieldValueType.Float) {
float invoiceTotal = invoiceTotalField.Value.AsFloat();
Console.WriteLine($" Invoice Total: '{invoiceTotal}', with confidence {invoiceTotalField.Confidence}");
}
}
}
}
}
Programınızı oluşturmak ve çalıştırmak için formRecognizer_quickstart yanındaki yeşil Başlangıç düğmesini seçin veya F5 tuşuna basın.
Başvuru belgeleri | Kitaplık kaynak kodu | Paketi (Maven)Örnekler |
Bu hızlı başlangıçta, formlardan ve belgelerden yapılandırılmış verileri ayıklamak için aşağıdaki API'leri kullanacaksınız:
Azure aboneliği - Ücretsiz bir abonelik oluşturun.
Java Geliştirme Seti (JDK) sürüm 8 veya üzeri. Daha fazla bilgi için bkz. Desteklenen Java Sürümleri ve güncelleştirme zamanlaması.
Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için form-recognizer-app adlı yeni bir dizin oluşturun ve bu dizine gidin.
mkdir form-recognizer-app && form-recognizer-app
gradle init
Komutunu çalışma dizininizden çalıştırın. Bu komut, uygulamanızı oluşturmak ve yapılandırmak için çalışma zamanında kullanılan build.gradle.kts dahil olmak üzere Gradle için temel derleme dosyaları oluşturur.
gradle init --type basic
DSL seçmeniz istendiğinde Kotlin'i seçin.
Varsayılan proje adını kabul edin (form-recognizer-app)
Bu hızlı başlangıçta Gradle bağımlılık yöneticisi kullanılır. Maven Central Repository'de diğer bağımlılık yöneticilerinin istemci kitaplığını ve bilgilerini bulabilirsiniz.
Projenizin build.gradle.kts dosyasında, istemci kitaplığını gerekli eklentiler ve ayarlarla birlikte bir implementation
deyim olarak ekleyin.
plugins {
java
application
}
application {
mainClass.set("FormRecognizer")
}
repositories {
mavenCentral()
}
dependencies {
implementation(group = "com.azure", name = "azure-ai-formrecognizer", version = "3.1.1")
}
Çalışma dizininizden aşağıdaki komutu çalıştırın:
mkdir -p src/main/java
Aşağıdaki dizin yapısını oluşturursunuz:
Java dizinine gidin ve FormRecognizer.java adlı bir dosya oluşturun. Bunu tercih ettiğiniz düzenleyicide veya IDE'de açın ve aşağıdaki paket bildirimini ve import
deyimlerini ekleyin:
import com.azure.ai.formrecognizer.*;
import com.azure.ai.formrecognizer.models.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.List;
import java.util.Map;
import java.time.LocalDate;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.util.Context;
import com.azure.core.util.polling.SyncPoller;
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
Belgelerden sınırlayıcı bölge koordinatlarıyla birlikte metin, seçim işaretleri, metin stilleri ve tablo yapılarını ayıklayın.
Uygulamanızın FormRecognizer sınıfını aşağıdaki kodla güncelleştirin (anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirin):
static final String key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
static final String endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
public static void main(String[] args) {FormRecognizerClient recognizerClient = new FormRecognizerClientBuilder()
.credential(new AzureKeyCredential(key)).endpoint(endpoint).buildClient();
String formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf";
System.out.println("Get form content...");
GetContent(recognizerClient, formUrl);
}
private static void GetContent(FormRecognizerClient recognizerClient, String invoiceUri) {
String analyzeFilePath = invoiceUri;
SyncPoller<FormRecognizerOperationResult, List<FormPage>> recognizeContentPoller = recognizerClient
.beginRecognizeContentFromUrl(analyzeFilePath);
List<FormPage> contentResult = recognizeContentPoller.getFinalResult();
// </snippet_getcontent_call>
// <snippet_getcontent_print>
contentResult.forEach(formPage -> {
// Table information
System.out.println("----Recognizing content ----");
System.out.printf("Has width: %f and height: %f, measured with unit: %s.%n", formPage.getWidth(),
formPage.getHeight(), formPage.getUnit());
formPage.getTables().forEach(formTable -> {
System.out.printf("Table has %d rows and %d columns.%n", formTable.getRowCount(),
formTable.getColumnCount());
formTable.getCells().forEach(formTableCell -> {
System.out.printf("Cell has text %s.%n", formTableCell.getText());
});
System.out.println();
});
});
}
Bu örnek, örnek olarak fatura kullanarak önceden eğitilmiş modellerle belirli ortak belge türlerindeki verilerin nasıl çözümlendiğini gösterir.
beginRecognizeInvoicesFromUrl
.invoiceUrl
dosya URI değerini ekledik.Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. İşlem için analyze
kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Belge Yönetim Bilgileri hizmeti tarafından şu anda desteklenen önceden oluşturulmuş modeller şunlardır:
Uygulamanızın FormRecognizer sınıfını aşağıdaki kodla güncelleştirin (anahtar ve uç nokta değişkenlerini Azure portal Belge Zekası örneğinizdeki değerlerle güncelleştirin):
static final String key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
static final String endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
public static void main(String[] args) {
FormRecognizerClient recognizerClient = new FormRecognizerClientBuilder().credential(new AzureKeyCredential(key)).endpoint(endpoint).buildClient();
String invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
System.out.println("Analyze invoice...");
AnalyzeInvoice(recognizerClient, invoiceUrl);
}
private static void AnalyzeInvoice(FormRecognizerClient recognizerClient, String invoiceUrl) {
SyncPoller < FormRecognizerOperationResult,
List < RecognizedForm >> recognizeInvoicesPoller = recognizerClient.beginRecognizeInvoicesFromUrl(invoiceUrl);
List < RecognizedForm > recognizedInvoices = recognizeInvoicesPoller.getFinalResult();
for (int i = 0; i < recognizedInvoices.size(); i++) {
RecognizedForm recognizedInvoice = recognizedInvoices.get(i);
Map < String,
FormField > recognizedFields = recognizedInvoice.getFields();
System.out.printf("----------- Recognized invoice info for page %d -----------%n", i);
FormField vendorNameField = recognizedFields.get("VendorName");
if (vendorNameField != null) {
if (FieldValueType.STRING == vendorNameField.getValue().getValueType()) {
String merchantName = vendorNameField.getValue().asString();
System.out.printf("Vendor Name: %s, confidence: %.2f%n", merchantName, vendorNameField.getConfidence());
}
}
FormField vendorAddressField = recognizedFields.get("VendorAddress");
if (vendorAddressField != null) {
if (FieldValueType.STRING == vendorAddressField.getValue().getValueType()) {
String merchantAddress = vendorAddressField.getValue().asString();
System.out.printf("Vendor address: %s, confidence: %.2f%n", merchantAddress, vendorAddressField.getConfidence());
}
}
FormField customerNameField = recognizedFields.get("CustomerName");
if (customerNameField != null) {
if (FieldValueType.STRING == customerNameField.getValue().getValueType()) {
String merchantAddress = customerNameField.getValue().asString();
System.out.printf("Customer Name: %s, confidence: %.2f%n", merchantAddress, customerNameField.getConfidence());
}
}
FormField customerAddressRecipientField = recognizedFields.get("CustomerAddressRecipient");
if (customerAddressRecipientField != null) {
if (FieldValueType.STRING == customerAddressRecipientField.getValue().getValueType()) {
String customerAddr = customerAddressRecipientField.getValue().asString();
System.out.printf("Customer Address Recipient: %s, confidence: %.2f%n", customerAddr, customerAddressRecipientField.getConfidence());
}
}
FormField invoiceIdField = recognizedFields.get("InvoiceId");
if (invoiceIdField != null) {
if (FieldValueType.STRING == invoiceIdField.getValue().getValueType()) {
String invoiceId = invoiceIdField.getValue().asString();
System.out.printf("Invoice Id: %s, confidence: %.2f%n", invoiceId, invoiceIdField.getConfidence());
}
}
FormField invoiceDateField = recognizedFields.get("InvoiceDate");
if (customerNameField != null) {
if (FieldValueType.DATE == invoiceDateField.getValue().getValueType()) {
LocalDate invoiceDate = invoiceDateField.getValue().asDate();
System.out.printf("Invoice Date: %s, confidence: %.2f%n", invoiceDate, invoiceDateField.getConfidence());
}
}
FormField invoiceTotalField = recognizedFields.get("InvoiceTotal");
if (customerAddressRecipientField != null) {
if (FieldValueType.FLOAT == invoiceTotalField.getValue().getValueType()) {
Float invoiceTotal = invoiceTotalField.getValue().asFloat();
System.out.printf("Invoice Total: %.2f, confidence: %.2f%n", invoiceTotal, invoiceTotalField.getConfidence());
}
}
}
}
Ana proje dizininize (form-recognizer-app) geri dönün.
build
oluşturun:gradle build
run
çalıştırın:gradle run
Başvuru belgeleri | Kitaplık kaynak kodu | Paketi (npm)Örnekler |
Bu hızlı başlangıçta, formlardan ve belgelerden yapılandırılmış verileri ayıklamak için aşağıdaki API'leri kullanacaksınız:
Azure aboneliği - Ücretsiz bir abonelik oluşturun.
Visual Studio Code'un en son sürümü veya tercih ettiğiniz IDE.
Node.js'nin en son LTS
sürümü
Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız olduğunu lütfen unutmayın.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Yeni bir Node.js uygulaması oluşturun. Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu dizine gidin.
mkdir form-recognizer-app && cd form-recognizer-app
Bir package.json
dosyası ile bir düğüm uygulaması oluşturmak için npm init
komutunu çalıştırın.
npm init
ai-form-recognizer
İstemci kitaplığı npm paketini yükleyin:
npm install @azure/ai-form-recognizer
Uygulamanızın package.json
dosyası bağımlılıklarla güncelleştirilir.
adlı index.js
bir dosya oluşturun, dosyayı açın ve aşağıdaki kitaplıkları içeri aktarın:
const { FormRecognizerClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
Kaynağınızın Azure uç noktası ve anahtarı için değişkenler oluşturun:
const key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
const endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
Bu noktada JavaScript uygulamanız aşağıdaki kod satırlarını içermelidir:
const { FormRecognizerClient, AzureKeyCredential } = require("@azure/ai-form-recognizer");
const endpoint = "PASTE_YOUR_FORM_RECOGNIZER_ENDPOINT_HERE";
const key = "PASTE_YOUR_FORM_RECOGNIZER_KEY_HERE";
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
const formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
async function recognizeContent() {
const client = new FormRecognizerClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginRecognizeContentFromUrl(formUrl);
const pages = await poller.pollUntilDone();
if (!pages || pages.length === 0) {
throw new Error("Expecting non-empty list of pages!");
}
for (const page of pages) {
console.log(
`Page ${page.pageNumber}: width ${page.width} and height ${page.height} with unit ${page.unit}`
);
for (const table of page.tables) {
for (const cell of table.cells) {
console.log(`cell [${cell.rowIndex},${cell.columnIndex}] has text ${cell.text}`);
}
}
}
}
recognizeContent().catch((err) => {
console.error("The sample encountered an error:", err);
});
Bu örnek, örnek olarak fatura kullanarak önceden eğitilmiş modellerle belirli ortak belge türlerindeki verilerin nasıl çözümlendiğini gösterir. Fatura alanlarının tam listesi için önceden oluşturulmuş kavram sayfamıza bakın
invoiceUrl
dosya URI değerini ekledik.beginRecognizeInvoices
.Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. İşlem için analyze
kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Belge Yönetim Bilgileri hizmeti tarafından şu anda desteklenen önceden oluşturulmuş modeller şunlardır:
const invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf";
async function recognizeInvoices() {
const client = new FormRecognizerClient(endpoint, new AzureKeyCredential(key));
const poller = await client.beginRecognizeInvoicesFromUrl(invoiceUrl);
const [invoice] = await poller.pollUntilDone();
if (invoice === undefined) {
throw new Error("Failed to extract data from at least one invoice.");
}
/**
* This is a helper function for printing a simple field with an elemental type.
*/
function fieldToString(field) {
const {
name,
valueType,
value,
confidence
} = field;
return `${name} (${valueType}): '${value}' with confidence ${confidence}'`;
}
console.log("Invoice fields:");
/**
* Invoices contain a lot of optional fields, but they are all of elemental types
* such as strings, numbers, and dates, so we will just enumerate them all.
*/
for (const [name, field] of Object.entries(invoice.fields)) {
if (field.valueType !== "array" && field.valueType !== "object") {
console.log(`- ${name} ${fieldToString(field)}`);
}
}
// Invoices also support nested line items, so we can iterate over them.
let idx = 0;
console.log("- Items:");
const items = invoice.fields["Items"]?.value;
for (const item of items ?? []) {
const value = item.value;
// Each item has several subfields that are nested within the item. We'll
// map over this list of the subfields and filter out any fields that
// weren't found. Not all fields will be returned every time, only those
// that the service identified for the particular document in question.
const subFields = [
"Description",
"Quantity",
"Unit",
"UnitPrice",
"ProductCode",
"Date",
"Tax",
"Amount"
]
.map((fieldName) => value[fieldName])
.filter((field) => field !== undefined);
console.log(
[
` - Item #${idx}`,
// Now we will convert those fields into strings to display
...subFields.map((field) => ` - ${fieldToString(field)}`)
].join("\n")
);
}
}
recognizeInvoices().catch((err) => {
console.error("The sample encountered an error:", err);
});
Başvuru belgeleri | Kitaplık kaynak kodu | Paketi (PyPi)Örnekleri |
Bu hızlı başlangıçta, formlardan ve belgelerden yapılandırılmış verileri ayıklamak için aşağıdaki API'leri kullanacaksınız:
Azure aboneliği - Ücretsiz olarak oluşturun
pip --version
. Python'ın en son sürümünü yükleyerek pip alın.Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız olduğunu lütfen unutmayın.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Yerel ortamınızda bir terminal penceresi açın ve pip ile Python için Azure AI Document Intelligence istemci kitaplığını yükleyin:
pip install azure-ai-formrecognizer
Tercih ettiğiniz düzenleyicide veya IDE'de form_recognizer_quickstart.py adlı yeni bir Python uygulaması oluşturun. Ardından aşağıdaki kitaplıkları içeri aktarın:
import os
from azure.ai.formrecognizer import FormRecognizerClient
from azure.core.credentials import AzureKeyCredential
endpoint = "YOUR_FORM_RECOGNIZER_ENDPOINT"
key = "YOUR_FORM_RECOGNIZER_KEY"
Bu noktada Python uygulamanız aşağıdaki kod satırlarını içermelidir:
import os
from azure.core.exceptions import ResourceNotFoundError
from azure.ai.formrecognizer import DocumentAnalysisClient
from azure.core.credentials import AzureKeyCredential
endpoint = "YOUR_FORM_RECOGNIZER_ENDPOINT"
key = "YOUR_FORM_RECOGNIZER_KEY"
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
def format_bounding_box(bounding_box):
if not bounding_box:
return "N/A"
return ", ".join(["[{}, {}]".format(p.x, p.y) for p in bounding_box])
def recognize_content():
# sample document
formUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf"
form_recognizer_client = FormRecognizerClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = form_recognizer_client.begin_recognize_content_from_url(formUrl)
form_pages = poller.result()
for idx, content in enumerate(form_pages):
print(
"Page has width: {} and height: {}, measured with unit: {}".format(
content.width, content.height, content.unit
)
)
for table_idx, table in enumerate(content.tables):
print(
"Table # {} has {} rows and {} columns".format(
table_idx, table.row_count, table.column_count
)
)
print(
"Table # {} location on page: {}".format(
table_idx, format_bounding_box(table.bounding_box)
)
)
for cell in table.cells:
print(
"...Cell[{}][{}] has text '{}' within bounding box '{}'".format(
cell.row_index,
cell.column_index,
cell.text,
format_bounding_box(cell.bounding_box),
)
)
for line_idx, line in enumerate(content.lines):
print(
"Line # {} has word count '{}' and text '{}' within bounding box '{}'".format(
line_idx,
len(line.words),
line.text,
format_bounding_box(line.bounding_box),
)
)
if line.appearance:
if (
line.appearance.style_name == "handwriting"
and line.appearance.style_confidence > 0.8
):
print(
"Text line '{}' is handwritten and might be a signature.".format(
line.text
)
)
for word in line.words:
print(
"...Word '{}' has a confidence of {}".format(
word.text, word.confidence
)
)
for selection_mark in content.selection_marks:
print(
"Selection mark is '{}' within bounding box '{}' and has a confidence of {}".format(
selection_mark.state,
format_bounding_box(selection_mark.bounding_box),
selection_mark.confidence,
)
)
print("----------------------------------------")
if __name__ == "__main__":
recognize_content()
Bu örnek, örnek olarak fatura kullanarak önceden eğitilmiş modellerle belirli ortak belge türlerindeki verilerin nasıl çözümlendiğini gösterir. Fatura alanlarının tam listesi için önceden oluşturulmuş kavram sayfamıza bakın
Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. İşlem için analyze
kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Belge Yönetim Bilgileri hizmeti tarafından şu anda desteklenen önceden oluşturulmuş modeller şunlardır:
def recognize_invoice():
invoiceUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf"
form_recognizer_client = FormRecognizerClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)
poller = form_recognizer_client.begin_recognize_invoices_from_url(
invoiceUrl, locale="en-US"
)
invoices = poller.result()
for idx, invoice in enumerate(invoices):
vendor_name = invoice.fields.get("VendorName")
if vendor_name:
print(
"Vendor Name: {} has confidence: {}".format(
vendor_name.value, vendor_name.confidence
)
)
vendor_address = invoice.fields.get("VendorAddress")
if vendor_address:
print(
"Vendor Address: {} has confidence: {}".format(
vendor_address.value, vendor_address.confidence
)
)
vendor_address_recipient = invoice.fields.get("VendorAddressRecipient")
if vendor_address_recipient:
print(
"Vendor Address Recipient: {} has confidence: {}".format(
vendor_address_recipient.value, vendor_address_recipient.confidence
)
)
customer_name = invoice.fields.get("CustomerName")
if customer_name:
print(
"Customer Name: {} has confidence: {}".format(
customer_name.value, customer_name.confidence
)
)
customer_id = invoice.fields.get("CustomerId")
if customer_id:
print(
"Customer Id: {} has confidence: {}".format(
customer_id.value, customer_id.confidence
)
)
customer_address = invoice.fields.get("CustomerAddress")
if customer_address:
print(
"Customer Address: {} has confidence: {}".format(
customer_address.value, customer_address.confidence
)
)
customer_address_recipient = invoice.fields.get("CustomerAddressRecipient")
if customer_address_recipient:
print(
"Customer Address Recipient: {} has confidence: {}".format(
customer_address_recipient.value,
customer_address_recipient.confidence,
)
)
invoice_id = invoice.fields.get("InvoiceId")
if invoice_id:
print(
"Invoice Id: {} has confidence: {}".format(
invoice_id.value, invoice_id.confidence
)
)
invoice_date = invoice.fields.get("InvoiceDate")
if invoice_date:
print(
"Invoice Date: {} has confidence: {}".format(
invoice_date.value, invoice_date.confidence
)
)
invoice_total = invoice.fields.get("InvoiceTotal")
if invoice_total:
print(
"Invoice Total: {} has confidence: {}".format(
invoice_total.value, invoice_total.confidence
)
)
due_date = invoice.fields.get("DueDate")
if due_date:
print(
"Due Date: {} has confidence: {}".format(
due_date.value, due_date.confidence
)
)
purchase_order = invoice.fields.get("PurchaseOrder")
if purchase_order:
print(
"Purchase Order: {} has confidence: {}".format(
purchase_order.value, purchase_order.confidence
)
)
billing_address = invoice.fields.get("BillingAddress")
if billing_address:
print(
"Billing Address: {} has confidence: {}".format(
billing_address.value, billing_address.confidence
)
)
billing_address_recipient = invoice.fields.get("BillingAddressRecipient")
if billing_address_recipient:
print(
"Billing Address Recipient: {} has confidence: {}".format(
billing_address_recipient.value,
billing_address_recipient.confidence,
)
)
shipping_address = invoice.fields.get("ShippingAddress")
if shipping_address:
print(
"Shipping Address: {} has confidence: {}".format(
shipping_address.value, shipping_address.confidence
)
)
shipping_address_recipient = invoice.fields.get("ShippingAddressRecipient")
if shipping_address_recipient:
print(
"Shipping Address Recipient: {} has confidence: {}".format(
shipping_address_recipient.value,
shipping_address_recipient.confidence,
)
)
print("Invoice items:")
for idx, item in enumerate(invoice.fields.get("Items").value):
item_description = item.value.get("Description")
if item_description:
print(
"......Description: {} has confidence: {}".format(
item_description.value, item_description.confidence
)
)
item_quantity = item.value.get("Quantity")
if item_quantity:
print(
"......Quantity: {} has confidence: {}".format(
item_quantity.value, item_quantity.confidence
)
)
unit = item.value.get("Unit")
if unit:
print(
"......Unit: {} has confidence: {}".format(
unit.value, unit.confidence
)
)
unit_price = item.value.get("UnitPrice")
if unit_price:
print(
"......Unit Price: {} has confidence: {}".format(
unit_price.value, unit_price.confidence
)
)
product_code = item.value.get("ProductCode")
if product_code:
print(
"......Product Code: {} has confidence: {}".format(
product_code.value, product_code.confidence
)
)
item_date = item.value.get("Date")
if item_date:
print(
"......Date: {} has confidence: {}".format(
item_date.value, item_date.confidence
)
)
tax = item.value.get("Tax")
if tax:
print(
"......Tax: {} has confidence: {}".format(tax.value, tax.confidence)
)
amount = item.value.get("Amount")
if amount:
print(
"......Amount: {} has confidence: {}".format(
amount.value, amount.confidence
)
)
subtotal = invoice.fields.get("SubTotal")
if subtotal:
print(
"Subtotal: {} has confidence: {}".format(
subtotal.value, subtotal.confidence
)
)
total_tax = invoice.fields.get("TotalTax")
if total_tax:
print(
"Total Tax: {} has confidence: {}".format(
total_tax.value, total_tax.confidence
)
)
previous_unpaid_balance = invoice.fields.get("PreviousUnpaidBalance")
if previous_unpaid_balance:
print(
"Previous Unpaid Balance: {} has confidence: {}".format(
previous_unpaid_balance.value, previous_unpaid_balance.confidence
)
)
amount_due = invoice.fields.get("AmountDue")
if amount_due:
print(
"Amount Due: {} has confidence: {}".format(
amount_due.value, amount_due.confidence
)
)
service_start_date = invoice.fields.get("ServiceStartDate")
if service_start_date:
print(
"Service Start Date: {} has confidence: {}".format(
service_start_date.value, service_start_date.confidence
)
)
service_end_date = invoice.fields.get("ServiceEndDate")
if service_end_date:
print(
"Service End Date: {} has confidence: {}".format(
service_end_date.value, service_end_date.confidence
)
)
service_address = invoice.fields.get("ServiceAddress")
if service_address:
print(
"Service Address: {} has confidence: {}".format(
service_address.value, service_address.confidence
)
)
service_address_recipient = invoice.fields.get("ServiceAddressRecipient")
if service_address_recipient:
print(
"Service Address Recipient: {} has confidence: {}".format(
service_address_recipient.value,
service_address_recipient.confidence,
)
)
remittance_address = invoice.fields.get("RemittanceAddress")
if remittance_address:
print(
"Remittance Address: {} has confidence: {}".format(
remittance_address.value, remittance_address.confidence
)
)
remittance_address_recipient = invoice.fields.get("RemittanceAddressRecipient")
if remittance_address_recipient:
print(
"Remittance Address Recipient: {} has confidence: {}".format(
remittance_address_recipient.value,
remittance_address_recipient.confidence,
)
)
if __name__ == "__main__":
recognize_invoice()
form_recognizer_quickstart.py dosyanızın bulunduğu klasöre gidin.
Terminalinize aşağıdaki komutu yazın:
python form_recognizer_quickstart.py
| Belge Zekası REST API'si | Azure REST API başvurusu |
Bu hızlı başlangıçta, formlardan ve belgelerden yapılandırılmış verileri ayıklamak için aşağıdaki API'leri kullanacaksınız:
Azure aboneliği - Ücretsiz olarak oluşturun
cURL yüklü.
PowerShell sürüm 6.0+ veya benzer bir komut satırı uygulaması.
Azure AI hizmetleri veya Belge Zekası kaynağı. Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında tek hizmetli veya çok hizmetli bir Belge Zekası kaynağı oluşturun. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (F0
) kullanabilirsiniz.
İpucu
Tek bir uç nokta/anahtar altında birden çok Azure AI hizmetine erişmeyi planlıyorsanız bir Azure AI hizmetleri kaynağı oluşturun. Yalnızca Belge Yönetim Bilgileri erişimi için bir Belge Yönetim Bilgileri kaynağı oluşturun. Microsoft Entra kimlik doğrulamasını kullanmak istiyorsanız tek hizmetli bir kaynağa ihtiyacınız olduğunu lütfen unutmayın.
Kaynağınız dağıtıldıktan sonra Kaynağa git'i seçin. Uygulamanızı Belge Zekası API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız vardır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde koda yapıştırırsınız:
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için bkz . Azure AI hizmetleri güvenliği.
{endpoint}
.{key}
.\"{your-document-url}
:https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-layout.pdf
curl -v -i POST "https://{endpoint}/formrecognizer/v2.1/layout/analyze" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your-document-url}'}"
Operation-Location üst bilgisi içeren bir yanıt alırsınız202 (Success)
. Bu üst bilginin değeri, zaman uyumsuz işlemin durumunu sorgulamak ve sonuçları almak için kullanabileceğiniz bir sonuç kimliği içerir:
https:// cognitiveservice/formrecognizer/v2.1/layout/analyzeResults/{resultId}.
Aşağıdaki örnekte URL'nin bir parçası olarak, sonrasındaki dize analyzeResults/
sonuç kimliğidir.
https://cognitiveservice/formrecognizer/v2/layout/analyzeResults/54f0b076-4e38-43e5-81bd-b85b8835fdfb
API'yi Analyze Layout
çağırdıktan sonra, işlemin ve ayıklanan verilerin durumunu almak için Çözümle Düzeni Sonuç API'sini çağırırsınız. Komutu çalıştırmadan önce şu değişiklikleri yapın:
{endpoint}
.{key}
.{resultId}
.curl -v -X GET "https://{endpoint}/formrecognizer/v2.1/layout/analyzeResults/{resultId}" -H "Ocp-Apim-Subscription-Key: {key}"
JSON içeriğiyle bir 200 (success)
yanıt alırsınız.
Aşağıdaki fatura görüntüsüne ve buna karşılık gelen JSON çıkışına bakın.
"readResults"
sayfada ilgili sınırlayıcı kutu yerleşimine sahip her metin satırını içerir.selectionMarks
seçim işaretini (onay kutusu, radyo işareti) ve durumunun veya unselected
olup selected
olmadığını gösterir."pageResults"
ayıklanan tabloları içerir. Her tablo için metin, satır ve sütun dizini, yayılan satır ve sütun, sınırlayıcı kutu ve daha fazlası ayıklanır.
GitHub'da tam örnek çıktısını görüntüleyebilirsiniz.
Faturalarla sınırlı değilsiniz; aralarından seçim yapabileceğiniz birkaç önceden oluşturulmuş model vardır ve bunların her birinin kendi desteklenen alanları vardır. İşlem için analyze
kullanılacak model, analiz edilecek belgenin türüne bağlıdır. Belge Yönetim Bilgileri hizmeti tarafından şu anda desteklenen önceden oluşturulmuş modeller şunlardır:
Komutu çalıştırmadan önce şu değişiklikleri yapın:
değerini, elde ettiğiniz uç noktayla Belge Yönetim Bilgileri aboneliğinizle değiştirin {endpoint}
.
değerini önceki adımda kopyaladığınız anahtarla değiştirin {key}
.
değerini örnek fatura URL'si ile değiştirin \"{your-document-url}
:
https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/sample-invoice.pdf
curl -v -i POST https://{endpoint}/formrecognizer/v2.1/prebuilt/invoice/analyze" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: {key}" --data-ascii "{'urlSource': '{your invoice URL}'}"
Operation-Location üst bilgisi içeren bir yanıt alırsınız202 (Success)
. Bu üst bilginin değeri, zaman uyumsuz işlemin durumunu sorgulamak ve sonuçları almak için kullanabileceğiniz bir sonuç kimliği içerir:
https:// cognitiveservice/formrecognizer/v2.1/prebuilt/receipt/analyzeResults/{resultId}
Aşağıdaki örnekte URL'nin bir parçası olarak, sonraki dize analyzeResults/
sonuç kimliğidir:
https://cognitiveservice/formrecognizer/v2.1/prebuilt/invoice/analyzeResults/54f0b076-4e38-43e5-81bd-b85b8835fdfb
API'yi Analyze Invoice
çağırdıktan sonra, işlemin ve ayıklanan verilerin durumunu almak için Get Analyze Invoice Result API'sini çağırırsınız. Komutu çalıştırmadan önce şu değişiklikleri yapın:
{endpoint}
. Belge Yönetim Bilgileri kaynağına Genel Bakış sekmesinde bulabilirsiniz.{resultId}
.{key}
yerine anahtarınızı yazın.curl -v -X GET "https://{endpoint}/formrecognizer/v2.1/prebuilt/invoice/analyzeResults/{resultId}" -H "Ocp-Apim-Subscription-Key: {key}"
JSON çıkışıyla bir 200 (Success)
yanıt alırsınız.
"readResults"
faturadan ayıklanan her metin satırını içerir."pageResults"
faturadan ayıklanan tabloları ve seçim işaretlerini içerir."documentResults"
faturanın en ilgili bölümleri için anahtar/değer bilgilerini içerir.Örnek fatura belgesine bakın.
Ekinlikler
17 Mar 23 - 21 Mar 23
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Hemen kaydolunEğitim
Modül
Extract invoice data with AI Builder’s prebuilt model - Training
Create a seamless flow with Microsoft Power Automate using invoice processing.
Belgeler
Belge Yönetim Bilgileri istemci kitaplığını veya REST API'sini kullanma - Azure AI services
Belge Yönetim Bilgileri istemci kitaplıklarını veya REST API'sini kullanmayı ve belgelerden önemli verileri ayıklamak için uygulamalar oluşturmayı öğrenin.
Eklenti özellikleri - Belge Zekası - Azure AI services
Eklenti özellikleriyle hizmet sınırı kapasitesini artırma.
Genel anahtar-değer ayıklama - Belge Yönetim Bilgileri - Azure AI services
Belge Yönetim Bilgileri ile belgelerinizden anahtar-değer çiftlerini, tabloları, seçim işaretlerini ve metinleri ayıklayın.