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);
                }
            }
        }
예제 #2
0
        // 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);
        }
예제 #4
0
                        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;
                                }
                            }
                        }
예제 #5
0
        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);
                }
            }
        }