コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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
        }
コード例 #4
0
        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
        }
コード例 #5
0
        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}'");
            }
        }
    }
コード例 #7
0
        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
        }
コード例 #8
0
        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}");
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }