static async Task GetTextFromImageAsync(ComputerVisionClient visionClient, string url) { BatchReadFileHeaders textHeaders = await visionClient.BatchReadFileAsync(url); string operationLocation = textHeaders.OperationLocation; int maxCharsInOperationId = 36; string operationId = operationLocation.Substring(operationLocation.Length - maxCharsInOperationId); int i = 0; int maxRetries = 10; ReadOperationResult results = null; do { results = await visionClient.GetReadOperationResultAsync(operationId); Console.WriteLine($"Статус сервера {results.Status}, выполняется {i} c"); await Task.Delay(1000); if (i == 9) { Console.WriteLine("Сервер вызвал таймаут"); } }while ((results.Status == TextOperationStatusCodes.Running || results.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries); Console.WriteLine(); var textRecognitionResults = results.RecognitionResults; foreach (TextRecognitionResult textRecognitionResult in results.RecognitionResults) { foreach (var line in textRecognitionResult.Lines) { Console.WriteLine(line.Text); } } }
// Read text from a remote image private static async Task ExtractRemoteTextAsync( ComputerVisionClient computerVision, string imageUrl) { if (!Uri.IsWellFormedUriString(imageUrl, UriKind.Absolute)) { Console.WriteLine( "\nInvalid remoteImageUrl:\n{0} \n", imageUrl); return; } // Start the async process to read the text BatchReadFileHeaders textHeaders = await computerVision.BatchReadFileAsync( imageUrl); await GetTextAsync(computerVision, textHeaders.OperationLocation); }
public async Task <IList <TextRecognitionResult> > BatchReadFileUrl(string imageUrl) { Console.WriteLine("----------------------------------"); Console.WriteLine("BATCH READ FILE - URL IMAGE"); Console.WriteLine(""); BatchReadFileHeaders textHeaders = await Client.BatchReadFileAsync(imageUrl); var ol = textHeaders.OperationLocation; // Retrieve the URI where the recognizer text will be stored from the Operatio-Location header. // We only need the ID and not the full URL const int numberOfCharsInOperationId = 36; string operationId = ol.Substring(ol.Length - numberOfCharsInOperationId); //Extract the text // Delay is between iterations and tries a maximum of 10 times. int i = 0; int maxRetries = 10; ReadOperationResult results; Console.WriteLine($"Extracting text from URL image {Path.GetFileName(imageUrl)}..."); Console.WriteLine(); do { results = await Client.GetReadOperationResultAsync(operationId); Console.WriteLine("Server status: {0}, waiting {1} seconds...", results.Status, i); await Task.Delay(1000); if (i == 9) { Console.WriteLine("Server timed out"); } }while ((results.Status == TextOperationStatusCodes.Running || results.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries); Console.WriteLine(); return(results.RecognitionResults); }
public async Task ExtractText(string data, bool flag) { ComputerVisionClient computerVision = new ComputerVisionClient(new ApiKeyServiceClientCredentials(subscriptionKey), new System.Net.Http.DelegatingHandler[] { }); //Endpoint computerVision.Endpoint = Endpoint; if (flag) { if (!Uri.IsWellFormedUriString(data, UriKind.Absolute)) { Error = "Invalid remoteImageUrl: " + data; } //Starting the async process to read the text BatchReadFileHeaders textHeaders = await computerVision.BatchReadFileAsync(data, textRecognitionMode); await GetTextAsync(computerVision, textHeaders.OperationLocation); } else { //Image data to Byte Array byte[] imageBytes = Convert.FromBase64String(data); //Byte Array To Stream Stream stream = new MemoryStream(imageBytes); try { //Starting the async process to recognize the text BatchReadFileInStreamHeaders textHeaders = await computerVision.BatchReadFileInStreamAsync(stream, textRecognitionMode); await GetTextAsync(computerVision, textHeaders.OperationLocation); } catch (Exception e) { Error = e.Message; } } }
public void BatchReadFileTest() { using (MockContext context = MockContext.Start(this.GetType().FullName)) { HttpMockServer.Initialize(this.GetType().FullName, "BatchReadFileTest"); string imageUrl = GetTestImageUrl("signage.jpg"); using (IComputerVisionClient client = GetComputerVisionClient(HttpMockServer.CreateInstance())) { BatchReadFileHeaders headers = client.BatchReadFileAsync(imageUrl).Result; Assert.NotNull(headers.OperationLocation); ReadOperationResult readOperationResult = GetRecognitionResultWithPolling(client, headers.OperationLocation); Assert.NotNull(readOperationResult); Assert.Equal(TextOperationStatusCodes.Succeeded, readOperationResult.Status); Assert.NotNull(readOperationResult.RecognitionResults); Assert.Equal(1, readOperationResult.RecognitionResults.Count); var recognitionResult = readOperationResult.RecognitionResults[0]; Assert.Equal(1, recognitionResult.Page); Assert.Equal(250, recognitionResult.Width); Assert.Equal(258, recognitionResult.Height); Assert.Equal(TextRecognitionResultDimensionUnit.Pixel, recognitionResult.Unit); Assert.Equal( new string[] { "520", "WEST", "Seattle" }.OrderBy(t => t), recognitionResult.Lines.Select(line => line.Text).OrderBy(t => t)); Assert.Equal( new string[] { "520", "WEST", "Seattle" }.OrderBy(t => t), recognitionResult.Lines.SelectMany(line => line.Words).Select(word => word.Text).OrderBy(t => t)); Assert.Equal(3, recognitionResult.Lines.Count); } } }