public async Task RecognizeContentFromFile() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); string invoiceFilePath = FormRecognizerTestEnvironment.CreatePath("Invoice_1.pdf"); using (FileStream stream = new FileStream(invoiceFilePath, FileMode.Open)) { FormPageCollection formPages = await client.StartRecognizeContent(stream).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}'."); } } } } }
private static async Task RecognizeContent(FormRecognizerClient recognizerClient) { var invoiceUri = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/master/sdk/formrecognizer/azure-ai-formrecognizer/tests/sample_forms/forms/Invoice_1.pdf"; FormPageCollection formPages = await recognizerClient .StartRecognizeContentFromUri(new Uri(invoiceUri)) .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}'."); } } } }
public async Task FieldBoundingBoxSample() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); string invoiceFilePath = FormRecognizerTestEnvironment.CreatePath("Invoice_1.pdf"); using (FileStream stream = new FileStream(invoiceFilePath, FileMode.Open)) { FormPageCollection formPages = await client.StartRecognizeContentAsync(stream).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} with text: '{line.Text}'."); Console.WriteLine(" Its bounding box is:"); Console.WriteLine($" Upper left => X: {line.BoundingBox[0].X}, Y= {line.BoundingBox[0].Y}"); Console.WriteLine($" Upper right => X: {line.BoundingBox[1].X}, Y= {line.BoundingBox[1].Y}"); Console.WriteLine($" Lower right => X: {line.BoundingBox[2].X}, Y= {line.BoundingBox[2].Y}"); Console.WriteLine($" Lower left => X: {line.BoundingBox[3].X}, Y= {line.BoundingBox[3].Y}"); } } } }
static void PrintFormsExtractionResult(FormPageCollection imgForms) { Console.WriteLine("*** FormsExtraction result : "); Console.WriteLine($"Forms count : {imgForms.Count}"); Console.WriteLine(); int formNum = 0; foreach (FormPage form in imgForms) { formNum++; Console.WriteLine($"FORM #{formNum} on page {form.PageNumber} / pos=({form.Width} , {form.Height} ) in {form.Unit} / TextAngle={form.TextAngle} / {form.Tables.Count} table(s) / {form.Lines.Count} line(s)"); int tableNum = 0; foreach (FormTable table in form.Tables) { tableNum++; Console.WriteLine($"--TABLE #{tableNum} on page {table.PageNumber} / {table.ColumnCount} col(s) / {table.RowCount} row(s)"); foreach (var cell in table.Cells) { Console.WriteLine($" [{cell.ColumnIndex},{cell.RowIndex}]={cell.Text}"); } } int lineNum = 0; foreach (FormLine line in form.Lines) { lineNum++; Console.WriteLine($"--LINE #{lineNum} : {line.Text}"); } } }
private static async Task RecognizeContent(FormRecognizerClient recognizerClient, string formUrl) { FormPageCollection formPages = await recognizerClient .StartRecognizeContentFromUri(new Uri(formUrl)) .WaitForCompletionAsync(); foreach (FormPage page in formPages) { //lines for (int i = 0; i < page.Lines.Count; i++) { FormLine line = page.Lines[i]; //returnString += $"{line.Text}{Environment.NewLine}"; returnString += $" Line {i} has {line.Words.Count} word{(line.Words.Count > 1 ? "s" : "")}, and text: '{line.Text}'.{Environment.NewLine}"; } //tables for (int i = 0; i < page.Tables.Count; i++) { FormTable table = page.Tables[i]; foreach (FormTableCell cell in table.Cells) { //returnString += $"{cell.Text} "; returnString += $" Cell ({cell.RowIndex}, {cell.ColumnIndex}) contains text: '{cell.Text}'.{Environment.NewLine}"; } } } }
// </snippet_auth_training> // <snippet_getcontent_call> private static async Task RecognizeContent(FormRecognizerClient recognizerClient) { var invoiceUri = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/simple-invoice.png"; FormPageCollection formPages = await recognizerClient .StartRecognizeContentFromUri(new Uri(invoiceUri)) .WaitForCompletionAsync(); // </snippet_getcontent_call> // <snippet_getcontent_print> 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}'."); } } } }
public FormPageCollection AnalyzeFile(string localFileToBeAnalyzed) { using var stream = new FileStream(localFileToBeAnalyzed, FileMode.Open); Response <FormPageCollection> response = _client.StartRecognizeContentAsync(stream).WaitForCompletionAsync().Result; FormPageCollection formPages = response.Value; return(formPages); }
public async Task RecognizeContentFromFile() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); string filePath = FormRecognizerTestEnvironment.CreatePath("Invoice_1.pdf"); #region Snippet:FormRecognizerRecognizeFormContentFromFile //@@ string filePath = "filePath"; using var stream = new FileStream(filePath, FileMode.Open); Response <FormPageCollection> response = await client.StartRecognizeContentAsync(stream).WaitForCompletionAsync(); FormPageCollection formPages = response.Value; 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} {(line.Words.Count == 1 ? "word" : "words")}, and text: '{line.Text}'."); Console.WriteLine(" Its bounding box is:"); Console.WriteLine($" Upper left => X: {line.BoundingBox[0].X}, Y= {line.BoundingBox[0].Y}"); Console.WriteLine($" Upper right => X: {line.BoundingBox[1].X}, Y= {line.BoundingBox[1].Y}"); Console.WriteLine($" Lower right => X: {line.BoundingBox[2].X}, Y= {line.BoundingBox[2].Y}"); Console.WriteLine($" Lower left => X: {line.BoundingBox[3].X}, Y= {line.BoundingBox[3].Y}"); } 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}'."); } } for (int i = 0; i < page.SelectionMarks.Count; i++) { FormSelectionMark selectionMark = page.SelectionMarks[i]; Console.WriteLine($" Selection Mark {i} is {selectionMark.State}."); Console.WriteLine(" Its bounding box is:"); Console.WriteLine($" Upper left => X: {selectionMark.BoundingBox[0].X}, Y= {selectionMark.BoundingBox[0].Y}"); Console.WriteLine($" Upper right => X: {selectionMark.BoundingBox[1].X}, Y= {selectionMark.BoundingBox[1].Y}"); Console.WriteLine($" Lower right => X: {selectionMark.BoundingBox[2].X}, Y= {selectionMark.BoundingBox[2].Y}"); Console.WriteLine($" Lower left => X: {selectionMark.BoundingBox[3].X}, Y= {selectionMark.BoundingBox[3].Y}"); } } #endregion }
private async Task RecognizeContent(FormRecognizerClient recognizerClient, string pPictureUri) { string xLine = ""; FormPageCollection formPages = await recognizerClient .StartRecognizeContentFromUri(new Uri(pPictureUri)) .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}'."); if (xLine.Length > 15) { int distanceReceiptNo = CalcLevenshteinDistance(xLine.Substring(0, 15), "lfd. Nr./Zähler"); int distanceAmount = CalcLevenshteinDistance(xLine.Substring(0, 5), "Menge"); if ((distanceReceiptNo != 0) && (distanceReceiptNo < 6)) { newReceiptNo = line.Text; } else if ((distanceAmount != 0) && (distanceAmount < 2)) { string[] amounts = line.Text.Split(" "); newAmount = amounts[0]; } } else if (xLine.Length >= 5) { int distanceAmount = CalcLevenshteinDistance(xLine, "Menge"); if ((distanceAmount != 0) && (distanceAmount < 2)) { string[] amounts = line.Text.Split(" "); newAmount = amounts[0]; } } if (newAmount == "") { if (xLine.Contains("eng")) { string[] amounts = line.Text.Split(" "); newAmount = amounts[0]; } } if (newReceiptNo == "") { if (xLine.Contains("hle")) { newReceiptNo = line.Text; } } xLine = line.Text; } } }
public string SaveAnalyzedFileToJson(string localFileToBeAnalyzed, string outputFilePath) { using var stream = new FileStream(localFileToBeAnalyzed, FileMode.Open); Response <FormPageCollection> response = _client.StartRecognizeContentAsync(stream).WaitForCompletionAsync().Result; FormPageCollection formPages = response.Value; var jsonSerializer = new Infrastructure.JsonSerializer(); string jsonContent = jsonSerializer.Serialize(formPages); new FileFacade().WriteAllText(outputFilePath, jsonContent); return(jsonContent); }
public async Task StartRecognizeContentWithMultiplePageArgument(string page1, string page2, int expected) { var client = CreateFormRecognizerClient(); RecognizeContentOperation operation; using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceMultipageBlank); using (Recording.DisableRequestBodyRecording()) { operation = await client.StartRecognizeContentAsync(stream, new RecognizeContentOptions() { Pages = { page1, page2 } }); } FormPageCollection formPages = await operation.WaitForCompletionAsync(); Assert.AreEqual(expected, formPages.Count); }
public async Task RecognizeContentFromUri() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); Uri invoiceUri = FormRecognizerTestEnvironment.CreateUri("Invoice_1.pdf"); #region Snippet:FormRecognizerSampleRecognizeContentFromUri FormPageCollection formPages = await client.StartRecognizeContentFromUriAsync(invoiceUri).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}'."); } } for (int i = 0; i < page.SelectionMarks.Count; i++) { FormSelectionMark selectionMark = page.SelectionMarks[i]; Console.WriteLine($"Selection Mark {i} is {selectionMark.State.ToString()}."); Console.WriteLine(" Its bounding box is:"); Console.WriteLine($" Upper left => X: {selectionMark.BoundingBox[0].X}, Y= {selectionMark.BoundingBox[0].Y}"); Console.WriteLine($" Upper right => X: {selectionMark.BoundingBox[1].X}, Y= {selectionMark.BoundingBox[1].Y}"); Console.WriteLine($" Lower right => X: {selectionMark.BoundingBox[2].X}, Y= {selectionMark.BoundingBox[2].Y}"); Console.WriteLine($" Lower left => X: {selectionMark.BoundingBox[3].X}, Y= {selectionMark.BoundingBox[3].Y}"); } } #endregion }
private static async Task RecognizeContent(FormRecognizerClient recognizerClient) { var invoiceUri = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-REST-api-samples/master/curl/form-recognizer/simple-invoice.png"; FormPageCollection formPages = await recognizerClient .StartRecognizeContentFromUri(new Uri(invoiceUri)) .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}'.");
private static void PrintStuff(FormPageCollection formPages) { foreach (var page in formPages) { Console.WriteLine($"Form Page {page.PageNumber} has {page.Lines.Count} lines."); for (var i = 0; i < page.Tables.Count; i++) { var table = page.Tables[i]; Console.WriteLine($"Table {i} has {table.RowCount} rows an {table.ColumnCount} columns."); var grouped = table.Cells.GroupBy(c => c.RowIndex); foreach (var cell in grouped) { var values = string.Join(",", cell.Select(c => c.Text)); Console.WriteLine($"{values}"); } } } }
public async Task StartRecognizeContentCanAuthenticateWithTokenCredential() { var client = CreateFormRecognizerClient(useTokenCredential: true); RecognizeContentOperation operation; using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.ReceiptJpg); using (Recording.DisableRequestBodyRecording()) { operation = await client.StartRecognizeContentAsync(stream); } // Sanity check to make sure we got an actual response back from the service. FormPageCollection formPages = await operation.WaitForCompletionAsync(); var formPage = formPages.Single(); Assert.Greater(formPage.Lines.Count, 0); Assert.AreEqual("Contoso", formPage.Lines[0].Text); }
//sends content from the card in lines, example "*****@*****.**". Data is used to improve AnalyzeBusinessCardPath() private async Task RecognizeContent() { using (var stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read)) { try { Response <FormPageCollection> response = await recognizerClient.StartRecognizeContentAsync(stream).WaitForCompletionAsync(); FormPageCollection formPages = response.Value; //only 1 business Card so we take the first results = formatResults(formPages[0]); } catch (Exception ex) { throw new FormRecognizerException(ex.ToString()); } } }
public async Task <IActionResult> AnalyzeLayout(string layoutUri) { try { FormRecognizerClient recognizerClient = AuthenticateClient(); FormPageCollection formPages = await recognizerClient .StartRecognizeContentFromUri(new Uri(layoutUri)) .WaitForCompletionAsync(); if (formPages != null) { return(new OkObjectResult(formPages)); } return(new BadRequestObjectResult("No result")); } catch (Exception ex) { return(new BadRequestObjectResult(ex.ToString())); } }
public async Task RecognizeFormContentFromFile() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; var credential = new AzureKeyCredential(apiKey); var client = new FormRecognizerClient(new Uri(endpoint), credential); string invoiceFilePath = FormRecognizerTestEnvironment.CreatePath("Invoice_1.pdf"); #region Snippet:FormRecognizerRecognizeFormContentFromFile using (FileStream stream = new FileStream(invoiceFilePath, FileMode.Open)) { FormPageCollection formPages = await client.StartRecognizeContent(stream).WaitForCompletionAsync(); /* * */ } #endregion }
public async Task StartRecognizeContentCanParseBlankPage() { var client = CreateFormRecognizerClient(); var options = new RecognizeContentOptions(); RecognizeContentOperation operation; using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.Blank); using (Recording.DisableRequestBodyRecording()) { operation = await client.StartRecognizeContentAsync(stream, options); } FormPageCollection formPages = await operation.WaitForCompletionAsync(); var blankPage = formPages.Single(); ValidateFormPage(blankPage, includeFieldElements: true, expectedPageNumber: 1); Assert.AreEqual(0, blankPage.Lines.Count); Assert.AreEqual(0, blankPage.Tables.Count); Assert.AreEqual(0, blankPage.SelectionMarks.Count); }
public async Task StartRecognizeContentCanParseMultipageForm(bool useStream) { var client = CreateInstrumentedFormRecognizerClient(); RecognizeContentOperation operation; if (useStream) { using var stream = new FileStream(FormRecognizerTestEnvironment.MultipageFormPath, FileMode.Open); using (Recording.DisableRequestBodyRecording()) { operation = await client.StartRecognizeContentAsync(stream); } } else { var uri = new Uri(FormRecognizerTestEnvironment.MultipageFormUri); operation = await client.StartRecognizeContentFromUriAsync(uri); } FormPageCollection formPages = await operation.WaitForCompletionAsync(); Assert.AreEqual(2, formPages.Count); var line0 = formPages[0].Lines; var line1 = formPages[1].Lines; for (int pageIndex = 0; pageIndex < formPages.Count; pageIndex++) { var formPage = formPages[pageIndex]; ValidateFormPage(formPage, includeTextContent: true, expectedPageNumber: pageIndex + 1); // Basic sanity test to make sure pages are ordered correctly. var sampleLine = formPage.Lines[3]; var expectedText = pageIndex == 0 ? "Bilbo Baggins" : "Frodo Baggins"; Assert.AreEqual(expectedText, sampleLine.Text); } }
public static void PrintForm(FormPageCollection formPages) { 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}'."); } } } }
public async Task StartRecognizeContentCanParseMultipageFormWithBlankPage() { var client = CreateInstrumentedFormRecognizerClient(); RecognizeContentOperation operation; using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceMultipageBlank); using (Recording.DisableRequestBodyRecording()) { operation = await client.StartRecognizeContentAsync(stream); } FormPageCollection formPages = await operation.WaitForCompletionAsync(); Assert.AreEqual(3, formPages.Count); for (int pageIndex = 0; pageIndex < formPages.Count; pageIndex++) { var formPage = formPages[pageIndex]; ValidateFormPage(formPage, includeTextContent: true, expectedPageNumber: pageIndex + 1); // Basic sanity test to make sure pages are ordered correctly. if (pageIndex == 0 || pageIndex == 2) { var sampleLine = formPage.Lines[3]; var expectedText = pageIndex == 0 ? "Bilbo Baggins" : "Frodo Baggins"; Assert.AreEqual(expectedText, sampleLine.Text); } } var blankPage = formPages[1]; Assert.AreEqual(0, blankPage.Lines.Count); Assert.AreEqual(0, blankPage.Tables.Count); }
public async Task StartRecognizeContentCanParseMultipageForm(bool useStream) { var client = CreateFormRecognizerClient(); RecognizeContentOperation operation; if (useStream) { using var stream = FormRecognizerTestEnvironment.CreateStream(TestFile.InvoiceMultipage); using (Recording.DisableRequestBodyRecording()) { operation = await client.StartRecognizeContentAsync(stream); } } else { var uri = FormRecognizerTestEnvironment.CreateUri(TestFile.InvoiceMultipage); operation = await client.StartRecognizeContentFromUriAsync(uri); } FormPageCollection formPages = await operation.WaitForCompletionAsync(); Assert.AreEqual(2, formPages.Count); for (int pageIndex = 0; pageIndex < formPages.Count; pageIndex++) { var formPage = formPages[pageIndex]; ValidateFormPage(formPage, includeFieldElements: true, expectedPageNumber: pageIndex + 1); // Basic sanity test to make sure pages are ordered correctly. var sampleLine = formPage.Lines[1]; var expectedText = pageIndex == 0 ? "Vendor Registration" : "Vendor Details:"; Assert.AreEqual(expectedText, sampleLine.Text); } }
public AssertedFormPage(FormPageCollection formPages, int pageNumber) { _formPage = formPages[pageNumber]; Lines = _formPage.Lines.Select(x => new AssertedTableFormLine(x)).ToList(); }
public async Task RecognizeContentFromFile() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); #region Snippet:FormRecognizerRecognizeFormContentFromFile #if SNIPPET string filePath = "<filePath>"; #else string filePath = FormRecognizerTestEnvironment.CreatePath("Invoice_1.pdf"); #endif using var stream = new FileStream(filePath, FileMode.Open); Response <FormPageCollection> response = await client.StartRecognizeContentAsync(stream).WaitForCompletionAsync(); FormPageCollection formPages = response.Value; 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} {(line.Words.Count == 1 ? "word" : "words")}, and text: '{line.Text}'."); if (line.Appearance != null) { // Check the style and style confidence to see if text is handwritten. // Note that value '0.8' is used as an example. if (line.Appearance.Style.Name == TextStyleName.Handwriting && line.Appearance.Style.Confidence > 0.8) { Console.WriteLine("The text is handwritten"); } } Console.WriteLine(" Its bounding box is:"); Console.WriteLine($" Upper left => X: {line.BoundingBox[0].X}, Y= {line.BoundingBox[0].Y}"); Console.WriteLine($" Upper right => X: {line.BoundingBox[1].X}, Y= {line.BoundingBox[1].Y}"); Console.WriteLine($" Lower right => X: {line.BoundingBox[2].X}, Y= {line.BoundingBox[2].Y}"); Console.WriteLine($" Lower left => X: {line.BoundingBox[3].X}, Y= {line.BoundingBox[3].Y}"); } 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}'."); } } for (int i = 0; i < page.SelectionMarks.Count; i++) { FormSelectionMark selectionMark = page.SelectionMarks[i]; Console.WriteLine($" Selection Mark {i} is {selectionMark.State}."); Console.WriteLine(" Its bounding box is:"); Console.WriteLine($" Upper left => X: {selectionMark.BoundingBox[0].X}, Y= {selectionMark.BoundingBox[0].Y}"); Console.WriteLine($" Upper right => X: {selectionMark.BoundingBox[1].X}, Y= {selectionMark.BoundingBox[1].Y}"); Console.WriteLine($" Lower right => X: {selectionMark.BoundingBox[2].X}, Y= {selectionMark.BoundingBox[2].Y}"); Console.WriteLine($" Lower left => X: {selectionMark.BoundingBox[3].X}, Y= {selectionMark.BoundingBox[3].Y}"); } } #endregion }
public async Task <FormPageCollection> AnalyzeFormFromStream(Stream form) { FormPageCollection collection = await _frClient.StartRecognizeContent(form).WaitForCompletionAsync(); return(collection); }