public async Task StartRecognizeReceiptsCanParseMultipageFormWithBlankPage() { var client = CreateInstrumentedFormRecognizerClient(); var options = new RecognizeOptions() { IncludeTextContent = true }; RecognizeReceiptsOperation operation; using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceMultipageBlank); using (Recording.DisableRequestBodyRecording()) { operation = await client.StartRecognizeReceiptsAsync(stream, options); } RecognizedReceiptCollection recognizedReceipts = await operation.WaitForCompletionAsync(); Assert.AreEqual(3, recognizedReceipts.Count); for (int receiptIndex = 0; receiptIndex < recognizedReceipts.Count; receiptIndex++) { var recognizedReceipt = recognizedReceipts[receiptIndex]; var expectedPageNumber = receiptIndex + 1; Assert.AreEqual("en-US", recognizedReceipt.ReceiptLocale); Assert.NotNull(recognizedReceipt.RecognizedForm); ValidateRecognizedForm(recognizedReceipt.RecognizedForm, includeTextContent: true, expectedFirstPageNumber: expectedPageNumber, expectedLastPageNumber: expectedPageNumber); // Basic sanity test to make sure pages are ordered correctly. if (receiptIndex == 0 || receiptIndex == 2) { var sampleField = recognizedReceipt.RecognizedForm.Fields["MerchantName"]; var expectedValueText = receiptIndex == 0 ? "Bilbo Baggins" : "Frodo Baggins"; Assert.IsNotNull(sampleField.ValueText); Assert.AreEqual(expectedValueText, sampleField.ValueText.Text); } } var blankForm = recognizedReceipts[1].RecognizedForm; Assert.AreEqual(0, blankForm.Fields.Count); var blankPage = blankForm.Pages.Single(); Assert.AreEqual(0, blankPage.Lines.Count); Assert.AreEqual(0, blankPage.Tables.Count); }
public async Task StartRecognizeReceiptsCanParseMultipageForm(bool useStream, bool includeTextContent) { var client = CreateInstrumentedFormRecognizerClient(); var options = new RecognizeOptions() { IncludeTextContent = includeTextContent }; RecognizeReceiptsOperation operation; if (useStream) { using var stream = new FileStream(FormRecognizerTestEnvironment.MultipageFormPath, FileMode.Open); using (Recording.DisableRequestBodyRecording()) { operation = await client.StartRecognizeReceiptsAsync(stream, options); } } else { var uri = new Uri(FormRecognizerTestEnvironment.MultipageFormUri); operation = await client.StartRecognizeReceiptsFromUriAsync(uri, options); } RecognizedReceiptCollection recognizedReceipts = await operation.WaitForCompletionAsync(); Assert.AreEqual(2, recognizedReceipts.Count); for (int receiptIndex = 0; receiptIndex < recognizedReceipts.Count; receiptIndex++) { var recognizedReceipt = recognizedReceipts[receiptIndex]; var expectedPageNumber = receiptIndex + 1; Assert.AreEqual("en-US", recognizedReceipt.ReceiptLocale); Assert.NotNull(recognizedReceipt.RecognizedForm); ValidateRecognizedForm(recognizedReceipt.RecognizedForm, includeTextContent, expectedFirstPageNumber: expectedPageNumber, expectedLastPageNumber: expectedPageNumber); // Basic sanity test to make sure pages are ordered correctly. var sampleField = recognizedReceipt.RecognizedForm.Fields["MerchantName"]; var expectedValueText = receiptIndex == 0 ? "Bilbo Baggins" : "Frodo Baggins"; Assert.IsNotNull(sampleField.ValueText); Assert.AreEqual(expectedValueText, sampleField.ValueText.Text); } }
public async Task RecognizeReceiptsFromFile() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; #region Snippet:FormRecognizerSample1CreateClient FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); #endregion string receiptPath = FormRecognizerTestEnvironment.CreatePath("contoso-receipt.jpg"); #region Snippet:FormRecognizerSampleRecognizeReceiptFileStream using (FileStream stream = new FileStream(receiptPath, FileMode.Open)) { RecognizedReceiptCollection receipts = await client.StartRecognizeReceipts(stream).WaitForCompletionAsync(); foreach (var receipt in receipts) { USReceipt usReceipt = receipt.AsUSReceipt(); string merchantName = usReceipt.MerchantName?.Value ?? default; DateTime transactionDate = usReceipt.TransactionDate?.Value ?? default; IReadOnlyList <USReceiptItem> items = usReceipt.Items ?? default; float subtotal = usReceipt.Subtotal?.Value ?? default; float tax = usReceipt.Tax?.Value ?? default; float tip = usReceipt.Tip?.Value ?? default; float total = usReceipt.Total?.Value ?? default; Console.WriteLine($"Recognized USReceipt fields:"); Console.WriteLine($" Merchant Name: '{merchantName}', with confidence {usReceipt.MerchantName.Confidence}"); Console.WriteLine($" Transaction Date: '{transactionDate}', with confidence {usReceipt.TransactionDate.Confidence}"); for (int i = 0; i < items.Count; i++) { USReceiptItem item = usReceipt.Items[i]; Console.WriteLine($" Item {i}: Name: '{item.Name.Value}', Quantity: '{item.Quantity?.Value}', Price: '{item.Price?.Value}'"); Console.WriteLine($" TotalPrice: '{item.TotalPrice.Value}'"); } Console.WriteLine($" Subtotal: '{subtotal}', with confidence '{usReceipt.Subtotal.Confidence}'"); Console.WriteLine($" Tax: '{tax}', with confidence '{usReceipt.Tax.Confidence}'"); Console.WriteLine($" Tip: '{tip}', with confidence '{usReceipt.Tip?.Confidence ?? 0.0f}'"); Console.WriteLine($" Total: '{total}', with confidence '{usReceipt.Total.Confidence}'"); } } #endregion }
public async Task BadRequestSnippet() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; var credential = new AzureKeyCredential(apiKey); var client = new FormRecognizerClient(new Uri(endpoint), credential); #region Snippet:FormRecognizerBadRequest try { RecognizedReceiptCollection receipts = await client.StartRecognizeReceiptsFromUri(new Uri("http://invalid.uri")).WaitForCompletionAsync(); } catch (RequestFailedException e) { Console.WriteLine(e.ToString()); } #endregion }
public async Task RecognizeReceiptFromFile() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; var credential = new AzureKeyCredential(apiKey); var client = new FormRecognizerClient(new Uri(endpoint), credential); string receiptPath = FormRecognizerTestEnvironment.JpgReceiptPath; #region Snippet:FormRecognizerRecognizeReceiptFromFile using (FileStream stream = new FileStream(receiptPath, FileMode.Open)) { RecognizedReceiptCollection receipts = await client.StartRecognizeReceipts(stream).WaitForCompletionAsync(); /* * */ } #endregion }
// </snippet_getcontent_print> // <snippet_receipt_call> private static async Task AnalyzeReceipt( FormRecognizerClient recognizerClient, string receiptUri) { RecognizedReceiptCollection receipts = await recognizerClient.StartRecognizeReceiptsFromUri(new Uri(receiptUri)) .WaitForCompletionAsync(); foreach (RecognizedReceipt receipt in receipts) { FormField merchantNameField; if (receipt.RecognizedForm.Fields.TryGetValue("MerchantName", out merchantNameField)) { if (merchantNameField.Value.Type == FieldValueType.String) { string merchantName = merchantNameField.Value.AsString(); Console.WriteLine($"Merchant Name: '{merchantName}', with confidence {merchantNameField.Confidence}"); } } FormField transactionDateField; if (receipt.RecognizedForm.Fields.TryGetValue("TransactionDate", out transactionDateField)) { if (transactionDateField.Value.Type == FieldValueType.Date) { DateTime transactionDate = transactionDateField.Value.AsDate(); Console.WriteLine($"Transaction Date: '{transactionDate}', with confidence {transactionDateField.Confidence}"); } } // </snippet_receipt_call> // <snippet_receipt_item_print> FormField itemsField; if (receipt.RecognizedForm.Fields.TryGetValue("Items", out itemsField)) { if (itemsField.Value.Type == FieldValueType.List) { foreach (FormField itemField in itemsField.Value.AsList()) { Console.WriteLine("Item:"); if (itemField.Value.Type == FieldValueType.Dictionary) { IReadOnlyDictionary<string, FormField> itemFields = itemField.Value.AsDictionary(); FormField itemNameField; if (itemFields.TryGetValue("Name", out itemNameField)) { if (itemNameField.Value.Type == FieldValueType.String) { string itemName = itemNameField.Value.AsString(); Console.WriteLine($" Name: '{itemName}', with confidence {itemNameField.Confidence}"); } } FormField itemTotalPriceField; if (itemFields.TryGetValue("TotalPrice", out itemTotalPriceField)) { if (itemTotalPriceField.Value.Type == FieldValueType.Float) { float itemTotalPrice = itemTotalPriceField.Value.AsFloat(); Console.WriteLine($" Total Price: '{itemTotalPrice}', with confidence {itemTotalPriceField.Confidence}"); } } } } } } // </snippet_receipt_item_print> // <snippet_receipt_total_print> FormField totalField; if (receipt.RecognizedForm.Fields.TryGetValue("Total", out totalField)) { if (totalField.Value.Type == FieldValueType.Float) { float total = totalField.Value.AsFloat(); Console.WriteLine($"Total: '{total}', with confidence '{totalField.Confidence}'"); } } }
public async Task RecognizeReceiptsFromUri() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); string receiptUri = FormRecognizerTestEnvironment.CreateUriString("contoso-receipt.jpg"); #region Snippet:FormRecognizerSampleRecognizeReceiptFileFromUri RecognizedReceiptCollection receipts = await client.StartRecognizeReceiptsFromUri(new Uri(receiptUri)).WaitForCompletionAsync(); // To see the list of the supported fields returned by service and its corresponding types, consult: // https://westus2.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-preview/operations/GetAnalyzeReceiptResult foreach (RecognizedReceipt receipt in receipts) { FormField merchantNameField; if (receipt.RecognizedForm.Fields.TryGetValue("MerchantName", out merchantNameField)) { if (merchantNameField.Value.Type == FieldValueType.String) { string merchantName = merchantNameField.Value.AsString(); Console.WriteLine($"Merchant Name: '{merchantName}', with confidence {merchantNameField.Confidence}"); } } FormField transactionDateField; if (receipt.RecognizedForm.Fields.TryGetValue("TransactionDate", out transactionDateField)) { if (transactionDateField.Value.Type == FieldValueType.Date) { DateTime transactionDate = transactionDateField.Value.AsDate(); Console.WriteLine($"Transaction Date: '{transactionDate}', with confidence {transactionDateField.Confidence}"); } } FormField itemsField; if (receipt.RecognizedForm.Fields.TryGetValue("Items", out itemsField)) { if (itemsField.Value.Type == FieldValueType.List) { foreach (FormField itemField in itemsField.Value.AsList()) { Console.WriteLine("Item:"); if (itemField.Value.Type == FieldValueType.Dictionary) { IReadOnlyDictionary <string, FormField> itemFields = itemField.Value.AsDictionary(); FormField itemNameField; if (itemFields.TryGetValue("Name", out itemNameField)) { if (itemNameField.Value.Type == FieldValueType.String) { string itemName = itemNameField.Value.AsString(); Console.WriteLine($" Name: '{itemName}', with confidence {itemNameField.Confidence}"); } } FormField itemTotalPriceField; if (itemFields.TryGetValue("TotalPrice", out itemTotalPriceField)) { if (itemTotalPriceField.Value.Type == FieldValueType.Float) { float itemTotalPrice = itemTotalPriceField.Value.AsFloat(); Console.WriteLine($" Total Price: '{itemTotalPrice}', with confidence {itemTotalPriceField.Confidence}"); } } } } } } FormField totalField; if (receipt.RecognizedForm.Fields.TryGetValue("Total", out totalField)) { if (totalField.Value.Type == FieldValueType.Float) { float total = totalField.Value.AsFloat(); Console.WriteLine($"Total: '{total}', with confidence '{totalField.Confidence}'"); } } } #endregion }
private static void PrintReceipts(RecognizedReceiptCollection receipts) { foreach (var receipt in receipts) { if (receipt.RecognizedForm.Fields.TryGetValue("MerchantName", out FormField merchantNameField)) { if (merchantNameField.Value.Type == FieldValueType.String) { var merchantName = merchantNameField.Value.AsString(); Console.WriteLine($"Merchant Name: '{merchantName}', with confidence {merchantNameField.Confidence}"); } } FormField transactionDateField; if (receipt.RecognizedForm.Fields.TryGetValue("TransactionDate", out transactionDateField)) { if (transactionDateField.Value.Type == FieldValueType.Date) { var transactionDate = transactionDateField.Value.AsDate(); Console.WriteLine($"Transaction Date: '{transactionDate}', with confidence {transactionDateField.Confidence}"); } } FormField itemsField; if (receipt.RecognizedForm.Fields.TryGetValue("Items", out itemsField)) { if (itemsField.Value.Type == FieldValueType.List) { foreach (FormField itemField in itemsField.Value.AsList()) { Console.WriteLine("Item:"); if (itemField.Value.Type == FieldValueType.Dictionary) { IReadOnlyDictionary <string, FormField> itemFields = itemField.Value.AsDictionary(); FormField itemNameField; if (itemFields.TryGetValue("Name", out itemNameField)) { if (itemNameField.Value.Type == FieldValueType.String) { string itemName = itemNameField.Value.AsString(); Console.WriteLine($" Name: '{itemName}', with confidence {itemNameField.Confidence}"); } } FormField itemTotalPriceField; if (itemFields.TryGetValue("TotalPrice", out itemTotalPriceField)) { if (itemTotalPriceField.Value.Type == FieldValueType.Float) { float itemTotalPrice = itemTotalPriceField.Value.AsFloat(); Console.WriteLine($" Total Price: '{itemTotalPrice}', with confidence {itemTotalPriceField.Confidence}"); } } } } } } } }