private static async Task TestUrl(string endpoint, string apiKey, string modelId, string url) { FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); Uri formFileUri = new Uri(url); RecognizeCustomFormsOperation operation = await client.StartRecognizeCustomFormsFromUriAsync(modelId, formFileUri); Response <RecognizedFormCollection> operationResponse = await operation.WaitForCompletionAsync(); RecognizedFormCollection forms = operationResponse.Value; foreach (RecognizedForm form in forms) { Console.WriteLine($"Form of type: {form.FormType}"); Console.WriteLine($"Form was analyzed with model with ID: {form.ModelId}"); foreach (FormField field in form.Fields.Values) { Console.WriteLine($"Field '{field.Name}': "); if (field.LabelData != null) { Console.WriteLine($" Label: '{field.LabelData.Text}'"); } Console.WriteLine($" Value: '{field.ValueData.Text}'"); Console.WriteLine($" Confidence: '{field.Confidence}'"); } } }
public async Task RecognizeCustomFormsFromUri() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; string trainingFileUrl = TestEnvironment.BlobContainerSasUrl; // Firstly, create a trained model we can use to recognize the custom form. Please note that // models can also be trained using a graphical user interface such as the Form Recognizer // Labeling Tool found here: // https://docs.microsoft.com/azure/cognitive-services/form-recognizer/quickstarts/label-tool FormTrainingClient trainingClient = new FormTrainingClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); CustomFormModel model = await trainingClient.StartTrainingAsync(new Uri(trainingFileUrl), useTrainingLabels : false, "My Model").WaitForCompletionAsync(); // Proceed with the custom form recognition. FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); #region Snippet:FormRecognizerSampleRecognizeCustomFormsFromUri #if SNIPPET string modelId = "<modelId>"; Uri formUri = < formUri >; #else Uri formUri = FormRecognizerTestEnvironment.CreateUri("Form_1.jpg"); string modelId = model.ModelId; #endif RecognizeCustomFormsOperation operation = await client.StartRecognizeCustomFormsFromUriAsync(modelId, formUri); Response <RecognizedFormCollection> operationResponse = await operation.WaitForCompletionAsync(); RecognizedFormCollection forms = operationResponse.Value; foreach (RecognizedForm form in forms) { Console.WriteLine($"Form of type: {form.FormType}"); if (form.FormTypeConfidence.HasValue) { Console.WriteLine($"Form type confidence: {form.FormTypeConfidence.Value}"); } Console.WriteLine($"Form was analyzed with model with ID: {form.ModelId}"); foreach (FormField field in form.Fields.Values) { Console.WriteLine($"Field '{field.Name}': "); if (field.LabelData != null) { Console.WriteLine($" Label: '{field.LabelData.Text}'"); } Console.WriteLine($" Value: '{field.ValueData.Text}'"); Console.WriteLine($" Confidence: '{field.Confidence}'"); } } #endregion // Delete the model on completion to clean environment. await trainingClient.DeleteModelAsync(model.ModelId); }
public async Task <List <dynamic> > ScanRemote(string classificationKey, string url) { string classificationModelId = await _distributedCache.GetStringAsync(classificationKey); Uri formFileUri = new Uri(url); RecognizeCustomFormsOperation operation = await _client.StartRecognizeCustomFormsFromUriAsync(classificationModelId, formFileUri); return(await Evaluate(operation)); }
static async Task Test(FormRecognizerClient client, string modelId, string url) { try { var forms = await client.StartRecognizeCustomFormsFromUriAsync(modelId, new Uri(url)) .WaitForCompletionAsync(); Console.WriteLine(forms.Value.Count); } catch (Exception e) { Console.WriteLine(e); } }
private static async Task AnalyzeDynamicCustomForm(FormRecognizerClient recognizerClient, string trainingFileUrl, string formUrl) { RecognizeCustomFormsOptions options = new RecognizeCustomFormsOptions(); //train model FormTrainingClient trainingClient = new FormTrainingClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); CustomFormModel model = await trainingClient.StartTrainingAsync(new Uri(trainingFileUrl), useTrainingLabels : false, $"VIS-Dynamic-Model-{DateTime.Now.ToShortDateString()}-{DateTime.Now.ToLongTimeString()}").WaitForCompletionAsync(); //string modelId = inModelID; string modelId = model.ModelId; //recognize form RecognizeCustomFormsOperation operation = await recognizerClient.StartRecognizeCustomFormsFromUriAsync(modelId, new Uri(formUrl)); Response <RecognizedFormCollection> operationResponse = await operation.WaitForCompletionAsync(); RecognizedFormCollection forms = operationResponse.Value; foreach (RecognizedForm form in forms) { returnString += $"Form of type: {form.FormType}{Environment.NewLine}"; foreach (FormField field in form.Fields.Values) { returnString += $"Field '{field.Name}: "; if (field.LabelData != null) { returnString += $" Label: '{field.LabelData.Text}"; } returnString += $" Value: '{field.ValueData.Text}"; returnString += $" Confidence: '{field.Confidence}{Environment.NewLine}"; } returnString += $"Table data:{Environment.NewLine}"; foreach (FormPage page in form.Pages) { 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) { returnString += $" Cell ({cell.RowIndex}, {cell.ColumnIndex}) contains {(cell.IsHeader ? "header" : "text")}: '{cell.Text}'{Environment.NewLine}"; } } } } // Delete the model on completion to clean environment. await trainingClient.DeleteModelAsync(model.ModelId); }
private static async Task <bool> IsExpensiveAsync(string modelId, Uri documentUri, FormRecognizerClient client) { RecognizeCustomFormsOperation operation = await client.StartRecognizeCustomFormsFromUriAsync(modelId, documentUri); Response <RecognizedFormCollection> response = await operation.WaitForCompletionAsync(); RecognizedForm form = response.Value[0]; if (form.Fields.TryGetValue("totalPrice", out FormField totalPriceField) && totalPriceField.Value.ValueType == FieldValueType.Float) { return(totalPriceField.Confidence > 0.7f && totalPriceField.Value.AsFloat() > 100f); } else { return(false); } }
private static async Task AnalyzeCustomForm(FormRecognizerClient recognizerClient, string modelID, string formUrl) { RecognizeCustomFormsOptions options = new RecognizeCustomFormsOptions(); //recognize form RecognizeCustomFormsOperation operation = await recognizerClient.StartRecognizeCustomFormsFromUriAsync(modelID, new Uri(formUrl)); Response <RecognizedFormCollection> operationResponse = await operation.WaitForCompletionAsync(); RecognizedFormCollection forms = operationResponse.Value; foreach (RecognizedForm form in forms) { returnString += $"Form of type: {form.FormType}{Environment.NewLine}"; foreach (FormField field in form.Fields.Values) { returnString += $"Field '{field.Name}: "; if (field.LabelData != null) { returnString += $" Label: '{field.LabelData.Text}"; } returnString += $" Value: '{field.ValueData.Text}"; returnString += $" Confidence: '{field.Confidence}{Environment.NewLine}"; } returnString += $"Table data:{Environment.NewLine}"; foreach (FormPage page in form.Pages) { 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) { returnString += $" Cell ({cell.RowIndex}, {cell.ColumnIndex}) contains {(cell.IsHeader ? "header" : "text")}: '{cell.Text}'{Environment.NewLine}"; } } } } }
private static async Task AnalyzeCustomFormReturnObj(FormRecognizerClient recognizerClient, string modelID, string formUrl) { RecognizeCustomFormsOptions options = new RecognizeCustomFormsOptions(); //recognize form RecognizeCustomFormsOperation operation = await recognizerClient.StartRecognizeCustomFormsFromUriAsync(modelID, new Uri(formUrl)); Response <RecognizedFormCollection> operationResponse = await operation.WaitForCompletionAsync(); RecognizedFormCollection forms = operationResponse.Value; foreach (RecognizedForm form in forms) { FormResponseObj rObj = new FormResponseObj(); foreach (FormField field in form.Fields.Values) { switch (field.Name) { case "Birthdate": { rObj.Birthdate = field.ValueData.Text; } break; case "Breed": { rObj.Breed = field.ValueData.Text; } break; case "Color": { rObj.Color = field.ValueData.Text; } break; case "DateOfVaccination": { rObj.DateOfVaccination = field.ValueData.Text; } break; case "DueDate": { rObj.DueDate = field.ValueData.Text; } break; case "Duration": { rObj.Duration = field.ValueData.Text; } break; case "LotExpiration": { rObj.LotExpiration = field.ValueData.Text; } break; case "Manufacturer": { rObj.Manufacturer = field.ValueData.Text; } break; case "MicrochipNumber": { rObj.MicrochipNumber = field.ValueData.Text; } break; case "Owner": { rObj.Owner = field.ValueData.Text; } break; case "OwnerAddress": { rObj.OwnerAddress = field.ValueData.Text; } break; case "OwnerPhone": { rObj.OwnerPhone = field.ValueData.Text; } break; case "PetsName": { rObj.PetsName = field.ValueData.Text; } break; case "SerialNumber": { rObj.SerialNumber = field.ValueData.Text; } break; case "Sex": { rObj.Sex = field.ValueData.Text; } break; case "Species": { rObj.Species = field.ValueData.Text; } break; case "TagNumber": { rObj.TagNumber = field.ValueData.Text; } break; case "VaccinationLocation": { rObj.VaccinationLocation = field.ValueData.Text; } break; case "Weight": { rObj.Weight = field.ValueData.Text; } break; } } returnObjects.Add(rObj); } }
public async Task <RecognizedFormCollection> AnalyzeCustomFormFromUri(Uri formUri, string modelId) => await client.StartRecognizeCustomFormsFromUriAsync(modelId, formUri).WaitForCompletionAsync();
public override async Task RunAsync(CancellationToken cancellationToken) { var op = await _client.StartRecognizeCustomFormsFromUriAsync(_modelId, CreateUri(TestFile.Form1), cancellationToken : cancellationToken); await op.WaitForCompletionAsync(cancellationToken); }
public async Task RecognizeCustomFormsFromUri() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; string trainingFileUrl = TestEnvironment.BlobContainerSasUrl; // Firstly, create a trained model we can use to recognize the custom form. Please note that // models can also be trained using a graphical user interface such as the Form Recognizer // Labeling Tool found here: // https://docs.microsoft.com/azure/cognitive-services/form-recognizer/label-tool?tabs=v2-1 FormTrainingClient trainingClient = new FormTrainingClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); CustomFormModel model = await trainingClient.StartTrainingAsync(new Uri(trainingFileUrl), useTrainingLabels : false, "My Model").WaitForCompletionAsync(); // Proceed with the custom form recognition. FormRecognizerClient client = new FormRecognizerClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); #region Snippet:FormRecognizerSampleRecognizeCustomFormsFromUri #if SNIPPET string modelId = "<modelId>"; Uri formUri = < formUri >; #else Uri formUri = FormRecognizerTestEnvironment.CreateUri("Form_1.jpg"); string modelId = model.ModelId; #endif var options = new RecognizeCustomFormsOptions() { IncludeFieldElements = true }; RecognizeCustomFormsOperation operation = await client.StartRecognizeCustomFormsFromUriAsync(modelId, formUri, options); Response <RecognizedFormCollection> operationResponse = await operation.WaitForCompletionAsync(); RecognizedFormCollection forms = operationResponse.Value; foreach (RecognizedForm form in forms) { Console.WriteLine($"Form of type: {form.FormType}"); if (form.FormTypeConfidence.HasValue) { Console.WriteLine($"Form type confidence: {form.FormTypeConfidence.Value}"); } Console.WriteLine($"Form was analyzed with model with ID: {form.ModelId}"); foreach (FormField field in form.Fields.Values) { Console.WriteLine($"Field '{field.Name}': "); if (field.LabelData != null) { Console.WriteLine($" Label: '{field.LabelData.Text}'"); } Console.WriteLine($" Value: '{field.ValueData.Text}'"); Console.WriteLine($" Confidence: '{field.Confidence}'"); } // Iterate over tables, lines, and selection marks on each page foreach (var page in form.Pages) { for (int i = 0; i < page.Tables.Count; i++) { Console.WriteLine($"Table {i + 1} on page {page.Tables[i].PageNumber}"); foreach (var cell in page.Tables[i].Cells) { Console.WriteLine($" Cell[{cell.RowIndex}][{cell.ColumnIndex}] has text '{cell.Text}' with confidence {cell.Confidence}"); } } Console.WriteLine($"Lines found on page {page.PageNumber}"); foreach (var line in page.Lines) { Console.WriteLine($" Line {line.Text}"); } if (page.SelectionMarks.Count != 0) { Console.WriteLine($"Selection marks found on page {page.PageNumber}"); foreach (var selectionMark in page.SelectionMarks) { Console.WriteLine($" Selection mark is '{selectionMark.State}' with confidence {selectionMark.Confidence}"); } } } } #endregion // Delete the model on completion to clean environment. await trainingClient.DeleteModelAsync(model.ModelId); }