Example #1
0
                    //Retriving the recognized text
                    private async Task GetTextAsync(ComputerVisionClient computerVision, string operationLocation)
                    {
                        //Retrieve the URI where the recognized text will be stored from the Operation-Location header
                        string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);

                        //Calling GetReadOperationResultAsync
                        ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId);

                        //Waiting for the operation to complete
                        int i          = 0;
                        int maxRetries = 10;

                        while ((result.Status == TextOperationStatusCodes.Running ||
                                result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
                        {
                            await Task.Delay(1000);

                            result = await computerVision.GetReadOperationResultAsync(operationId);
                        }

                        //Displaying the results
                        var recResults = result.RecognitionResults;


                        foreach (TextRecognitionResult recResult in recResults)
                        {
                            foreach (Line line in recResult.Lines)
                            {
                                OCRList.Add(line.Text);
                                OcrResult += line.Text + " <br> ";
                            }
                        }
                    }
        private async Task <string> GetOcrResults(string operationLocation)
        {
            string operationId = operationLocation.Substring(operationLocation.LastIndexOf('/') + 1);

            ReadOperationResult result = await client.GetReadOperationResultAsync(operationId);

            // Wait for the operation to complete
            int i          = 0;
            int maxRetries = 10;

            while ((result.Status == TextOperationStatusCodes.Running ||
                    result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
            {
                await Task.Delay(1000);

                result = await client.GetReadOperationResultAsync(operationId);
            }

            var overallResults = string
                                 .Join(
                separator,
                result.RecognitionResults.Select(
                    r => string.Join(
                        separator,
                        r.Lines.Select(l => l.Text).ToArray()))
                .ToArray());

            return(CleanupText(overallResults));
        }
        public void BatchReadPdfFileInStreamTest()
        {
            using (MockContext context = MockContext.Start(this.GetType()))
            {
                HttpMockServer.Initialize(this.GetType(), "BatchReadPdfFileInStreamTest");

                using (IComputerVisionClient client = GetComputerVisionClient(HttpMockServer.CreateInstance()))
                    using (FileStream stream = new FileStream(GetTestImagePath("menu.pdf"), FileMode.Open))
                    {
                        ReadInStreamHeaders headers = client.ReadInStreamWithHttpMessagesAsync(stream).Result.Headers;

                        Assert.NotNull(headers.OperationLocation);

                        ReadOperationResult readOperationResult = GetRecognitionResultWithPolling(client, headers.OperationLocation);

                        Assert.NotNull(readOperationResult);
                        Assert.Equal(OperationStatusCodes.Succeeded, readOperationResult.Status);

                        Assert.NotNull(readOperationResult.AnalyzeResult);
                        Assert.Equal(1, readOperationResult.AnalyzeResult.ReadResults.Count);

                        var recognitionResult = readOperationResult.AnalyzeResult.ReadResults[0];

                        Assert.Equal(1, recognitionResult.Page);
                        Assert.Equal(8.5, recognitionResult.Width);
                        Assert.Equal(11, recognitionResult.Height);
                        Assert.Equal(TextRecognitionResultDimensionUnit.Inch, recognitionResult.Unit);

                        Assert.Equal(28, recognitionResult.Lines.Count);
                        Assert.Equal("Microsoft", recognitionResult.Lines[0].Text);
                    }
            }
        }
 public static TextOperationResult ConvertToTextOperationResult(this ReadOperationResult entity)
 {
     return(new TextOperationResult()
     {
         Status = entity.Status, RecognitionResult = entity.RecognitionResults?.FirstOrDefault()
     });
 }
        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);
                }
            }
        }
Example #6
0
        // Retrieve the recognized text
        private static async Task GetTextAsync(ComputerVisionClient computerVision, string operationLocation, int numberOfCharsInOperationId)
        {
            // Retrieve the URI where the recognized text will be
            // stored from the Operation-Location header
            string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);

            ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId);

            // Wait for the operation to complete
            int i          = 0;
            int maxRetries = 10;

            while ((result.Status == TextOperationStatusCodes.Running ||
                    result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
            {
                Console.WriteLine("Server status: {0}, waiting {1} seconds...", result.Status, i);
                await Task.Delay(1000);

                result = await computerVision.GetReadOperationResultAsync(operationId);
            }

            // Display the results
            Console.WriteLine();
            var recResults = result.RecognitionResults;

            foreach (TextRecognitionResult recResult in recResults)
            {
                foreach (Line line in recResult.Lines)
                {
                    Console.WriteLine(line.Text);
                }
            }
            Console.WriteLine();
        }
        public string ParseReadResult(ReadOperationResult result)
        {
            var detectedTexts = result.AnalyzeResult.ReadResults;


            string registrationNumber = string.Empty;


            foreach (var detectedText in detectedTexts)
            {
                foreach (var line in detectedText.Lines)
                {
                    //Sanitize text
                    var text = SanitizeExtractedText(line.Text);

                    //Check if the text is alphanumeric

                    if (IsExtractedTextAlphaNumeric(text))
                    {
                        registrationNumber = text;
                        break;
                    }
                }

                if (!string.IsNullOrWhiteSpace(registrationNumber))
                {
                    break;
                }
            }
            return(registrationNumber);
        }
        private double CalculateIndentLength(ReadOperationResult parsingResult)
        {
            // sort lines by width
            var linesArray = parsingResult.AnalyzeResult.ReadResults.SelectMany(p => p.Lines).Select(l => GetBoundingBoxTopRightX(l) - GetBoundingBoxTopLeftX(l)).OrderBy(l => l).ToArray();

            return(linesArray[(int)(linesArray.Length * Constants.MaxLineLengthPrecentile)] * Constants.IndentPercentageOfLine);
        }
Example #9
0
        // Receives the image path and returns the businesscard
        public override async Task <Businesscard> getCard(string imagePath)
        {
            try
            {
                using (var image = File.OpenRead(imagePath))
                {
                    Businesscard card = MakeEmptyCard();
                    Debug.WriteLine("AZUREVISION - Received image");
                    var textHeaders = await cv.ReadInStreamAsync(image);

                    string operationLocation = textHeaders.OperationLocation;
                    string operationId       = operationLocation.Substring(operationLocation.Length - 36);
                    // Extract the text
                    ReadOperationResult results = null;
                    Debug.WriteLine("AZUREVISION - sending image to Azure Service");
                    do
                    {
                        results = await cv.GetReadResultAsync(Guid.Parse(operationId));
                    }while ((results.Status == OperationStatusCodes.Running ||
                             results.Status == OperationStatusCodes.NotStarted));

                    Debug.WriteLine("AZUREVISION - received information from Azure Service");
                    card = await analyzeText(formatResults(results));

                    PrintCard(card);
                    return(card);
                }
            }
            catch (Exception ex)
            {
                throw new BadRequestException(ex.ToString());
            }
        }
Example #10
0
        public static IEnumerable <string> GetReadResultLines(ReadOperationResult results)
        {
            var readResults = results.AnalyzeResult.ReadResults;
            var lineTexts   = readResults.SelectMany(result => result.Lines)
                              .Select(line => new string(line.Text));

            return(lineTexts);
        }
        private double CalculateMedianLineEnd(ReadOperationResult parsingResult)
        {
            // get the top-right x co-ordinate of each line's bounding box -> ascendingly
            var linesArraySortedByEnd = parsingResult.AnalyzeResult.ReadResults.SelectMany(p => p.Lines.Select(l => GetBoundingBoxTopRightX(l))).OrderBy(x => x).ToArray();

            // return the median element
            return(linesArraySortedByEnd[linesArraySortedByEnd.Length / 2]);
        }
Example #12
0
 internal Content(ReadOperationResult results)
 {
     Pages = new List <IPage>();
     foreach (var result in results.RecognitionResults)
     {
         Pages.Add(new Page(result));
     }
     ;
     CurrentContent.Value = this;
 }
Example #13
0
        // Retrieve the recognized text
        private async Task GetTextAsync(
            ComputerVisionClient computerVision, string operationLocation)
        {
            try
            {
                // Retrieve the URI where the recognized text will be
                // stored from the Operation-Location header
                string operationId = operationLocation.Substring(
                    operationLocation.Length - numberOfCharsInOperationId);

                Console.WriteLine("\nCalling GetReadOperationResultAsync()");
                ReadOperationResult result =
                    await computerVision.GetReadOperationResultAsync(operationId);

                // Wait for the operation to complete
                int i          = 0;
                int maxRetries = 10;
                while ((result.Status == TextOperationStatusCodes.Running ||
                        result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
                {
                    Console.WriteLine(
                        "Server status: {0}, waiting {1} seconds...", result.Status, i);
                    await Task.Delay(1000);

                    result = await computerVision.GetReadOperationResultAsync(operationId);
                }

                // Display the results
                Console.WriteLine();
                var recResults = result.RecognitionResults;

                int lineNo = 0;
                foreach (TextRecognitionResult recResult in recResults)
                {
                    foreach (Line line in recResult.Lines)
                    {
                        lineNo += 1;
                        Console.WriteLine(line.Text);
                        BaiOcrLine ocr = new BaiOcrLine
                        {
                            LineNo  = lineNo,
                            Content = line.Text
                        };
                        RawList.Add(ocr);
                    }
                }
                Console.WriteLine();
                Global.ProcessStatus = ProcessStatus.Ready.ToString();
                OnReadDone?.Invoke(this, EventArgs.Empty);
            }
            catch (Exception err)
            {
                throw err;
            }
        }
        /// <summary>
        /// Extract paragraphs from MsRead parse result using bounding box information.
        /// Paragraphs that span two pages are moved to the second page
        /// </summary>
        public DocumentTree MapMsReadResult(ReadOperationResult parsingResult)
        {
            var elements                  = new List <DocumentElement>();
            var medianLineStart           = CalculateMedianLineStart(parsingResult);
            var medianLineEnd             = CalculateMedianLineEnd(parsingResult);
            var indentLength              = CalculateIndentLength(parsingResult);
            var currentParagraph          = new StringBuilder();
            var currentPage               = 0;
            int currentParagraphPageStart = 1;
            var totalPageCount            = parsingResult.AnalyzeResult.ReadResults.Count;

            // loop over each page to create list of pages
            foreach (var rr in parsingResult.AnalyzeResult.ReadResults)
            {
                // update paragraphPageStart if no overflowing paragraph in new page
                currentParagraphPageStart = currentParagraph.Length > 0 ? currentParagraphPageStart : (int)rr.Page;
                // normal flow: loop over lines
                for (int i = 0; i < rr.Lines.Count; i++)
                {
                    Line l            = rr.Lines[i];
                    Line nextLine     = i < rr.Lines.Count - 1 ? rr.Lines[i + 1] : null;
                    Line previousLine = i > 0 ? rr.Lines[i - 1] : null;
                    HandleNewLine(currentParagraph, elements, (int)rr.Page, ref currentParagraphPageStart, l, previousLine, nextLine, indentLength, medianLineStart, medianLineEnd);
                }
                // special case: if last page add text in the current paragraph to the elements
                if (++currentPage == totalPageCount && currentParagraph.Length > 0)
                {
                    HandleEndOfParagraph(currentParagraph, elements, parsingResult.AnalyzeResult.ReadResults.Count, ref currentParagraphPageStart);
                }
            }

            // construct document tree
            return(new DocumentTree
            {
                RootSegment = new DocumentSegment
                {
                    RootElement = new DocumentElement
                    {
                        Text = string.Empty,
                        Type = ElementType.Root
                    },
                    Children = elements.Select(docElement =>
                    {
                        return new DocumentSegment
                        {
                            RootElement = docElement,
                            Children = null
                        };
                    }).ToList()
                }
            });
        }
Example #15
0
        //format the results in lines so that AOcrService can analyse them
        private string[] formatResults(ReadOperationResult results)
        {
            List <string> lines = new List <string>();

            foreach (ReadResult page in results.AnalyzeResult.ReadResults)
            {
                foreach (Line line in page.Lines)
                {
                    lines.Add(line.Text);
                }
            }
            return(lines.ToArray());
        }
Example #16
0
        /// <summary>
        /// Get the Text from the Result.
        /// </summary>
        /// <param name="readOperationResult">Read Operation Result.</param>
        /// <returns>Text String.</returns>
        private string GetTextFromResult(ReadOperationResult readOperationResult)
        {
            // Display the found text.
            var imageContent = string.Empty;
            var textRecognitionLocalFileResults = readOperationResult.RecognitionResults;

            foreach (TextRecognitionResult recResult in textRecognitionLocalFileResults)
            {
                foreach (Line line in recResult.Lines)
                {
                    imageContent += line.Text + " ";
                }
            }

            return(imageContent);
        }
        static private ReadOperationResult GetRecognitionResultWithPolling(IComputerVisionClient client, string operationLocation)
        {
            string operationId = operationLocation.Substring(operationLocation.LastIndexOf('/') + 1);

            for (int remainingTries = 10; remainingTries > 0; remainingTries--)
            {
                ReadOperationResult result = client.GetReadResultAsync(new Guid(operationId)).Result;

                Assert.True(result.Status != OperationStatusCodes.Failed);

                if (result.Status == OperationStatusCodes.Succeeded)
                {
                    return(result);
                }

                Thread.Sleep(TimeSpan.FromSeconds(1));
            }

            return(null);
        }
Example #18
0
        private static async Task <string> GetTextAsync(ComputerVisionClient computerVision, string operationLocation)
        {
            const int numberOfCharsInOperationId = 36;
            string    operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);


            ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId);

            int i          = 0;
            int maxRetries = 10;

            while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
            {
                await Task.Delay(1000);

                result = await computerVision.GetReadOperationResultAsync(operationId);
            }

            var lines      = result.RecognitionResults;
            var outputtext = new System.Text.StringBuilder();

            foreach (TextRecognitionResult recResult in lines)
            {
                foreach (Line line in recResult.Lines)
                {
                    outputtext.AppendLine(line.Text);
                }
            }

            if (!string.IsNullOrEmpty(outputtext.ToString()))
            {
                return(await Task.FromResult(outputtext.ToString()));

                // await TextToSepach(outputtext.ToString());
            }
            else
            {
                return(string.Empty);
            }
        }
        private static async Task <string> GetTextAsync(ComputerVisionClient computerVision,
                                                        string operationLocation)
        {
            int numberOfCharsInOperationId = 36;
            // Retrieve the URI where the recognized text will be
            // stored from the Operation-Location header
            string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);

            ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId);

            // Wait for the operation to complete
            int i          = 0;
            int maxRetries = 10;

            while ((result.Status == TextOperationStatusCodes.Running ||
                    result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
            {
                //Console.WriteLine("Server status: {0}, waiting {1} seconds...", result.Status, i);
                await Task.Delay(1000);

                result = await computerVision.GetReadOperationResultAsync(operationId);
            }

            //TODO: Improve Error Handling - Case where Max Tries exceed for Result.STatus is failure

            // Display the results
            var           recResults = result.RecognitionResults;
            StringBuilder imageText  = new StringBuilder();

            foreach (TextRecognitionResult recResult in recResults)
            {
                foreach (Line line in recResult.Lines)
                {
                    imageText.Append(line.Text);
                    imageText.Append(" ");
                }
            }
            return(imageText.ToString());
        }
        public void ReadTest()
        {
            using (MockContext context = MockContext.Start(this.GetType()))
            {
                HttpMockServer.Initialize(this.GetType(), "BatchReadFileTest");

                string imageUrl = GetTestImageUrl("signage.jpg");

                using (IComputerVisionClient client = GetComputerVisionClient(HttpMockServer.CreateInstance()))
                {
                    ReadHeaders headers = client.ReadAsync(imageUrl).Result;

                    Assert.NotNull(headers.OperationLocation);

                    ReadOperationResult readOperationResult = GetRecognitionResultWithPolling(client, headers.OperationLocation);

                    Assert.NotNull(readOperationResult);
                    Assert.Equal(OperationStatusCodes.Succeeded, readOperationResult.Status);

                    Assert.NotNull(readOperationResult.AnalyzeResult);
                    Assert.Equal(1, readOperationResult.AnalyzeResult.ReadResults.Count);

                    var recognitionResult = readOperationResult.AnalyzeResult.ReadResults[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);
                }
            }
        }
Example #21
0
        public static async Task <IList <TextRecognitionResult> > GetTextAsync(Stream imageToAnalyze)
        {
            BatchReadFileInStreamHeaders textHeaders = await _computerVisionClient.BatchReadFileInStreamAsync(imageToAnalyze);

            string operationLocation = textHeaders.OperationLocation;
            string operationId       = operationLocation.Substring(operationLocation.Length - NumberOfCharsInOperationId);

            ReadOperationResult result = await _computerVisionClient.GetReadOperationResultAsync(operationId);

            int i          = 0;
            int maxRetries = 10;

            while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
            {
                await Task.Delay(1000);

                result = await _computerVisionClient.GetReadOperationResultAsync(operationId);
            }

            IList <TextRecognitionResult> recResults = result.RecognitionResults;

            return(recResults);
        }
        private async Task GetTextAsync(ComputerVisionClient computerVision, string operationLocation, int numberOfCharsInOperationId)
        {
            string operationId         = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);
            ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId);

            // Wait for the operation to complete
            int i          = 0;
            int maxRetries = 10;

            while ((result.Status == TextOperationStatusCodes.Running ||
                    result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
            {
                Console.WriteLine("Server status: {0}, waiting {1} seconds...", result.Status, i);
                await Task.Delay(1000);

                result = await computerVision.GetReadOperationResultAsync(operationId);
            }

            // Display the results
            var recResults = result.RecognitionResults;

            foreach (TextRecognitionResult recResult in recResults)
            {
                foreach (Line line in recResult.Lines)
                {
                    ProcessValue(line.Text);
                }
            }

            Console.WriteLine($"NIT:{NITValue}");
            Console.WriteLine($"NIT:{IVAValue}");
            Console.WriteLine($"NIT:{InvoiceNumber}");
            Console.WriteLine($"NIT:{Subtotal}");
            Console.WriteLine($"NIT:{InvoiceDate}");

            Console.ReadLine();
        }
        public void ReadFileInStreamTest()
        {
            using (MockContext context = MockContext.Start(this.GetType()))
            {
                HttpMockServer.Initialize(this.GetType(), "BatchReadFileInStreamTest");

                using (IComputerVisionClient client = GetComputerVisionClient(HttpMockServer.CreateInstance()))
                    using (FileStream stream = new FileStream(GetTestImagePath("whiteboard.jpg"), FileMode.Open))
                    {
                        ReadInStreamHeaders headers = client.ReadInStreamWithHttpMessagesAsync(stream).Result.Headers;

                        Assert.NotNull(headers.OperationLocation);

                        ReadOperationResult readOperationResult = GetRecognitionResultWithPolling(client, headers.OperationLocation);

                        Assert.NotNull(readOperationResult);
                        Assert.Equal(OperationStatusCodes.Succeeded, readOperationResult.Status);

                        Assert.NotNull(readOperationResult.AnalyzeResult);
                        Assert.Equal(1, readOperationResult.AnalyzeResult.ReadResults.Count);

                        var recognitionResult = readOperationResult.AnalyzeResult.ReadResults[0];

                        Assert.Equal(1, recognitionResult.Page);
                        Assert.Equal(1000, recognitionResult.Width);
                        Assert.Equal(664, recognitionResult.Height);
                        Assert.Equal(TextRecognitionResultDimensionUnit.Pixel, recognitionResult.Unit);

                        Assert.Equal(
                            new string[] { "you must be the change", "you want to see in the world!" }.OrderBy(t => t),
                            recognitionResult.Lines.Select(line => line.Text).OrderBy(t => t));
                        Assert.Equal(2, recognitionResult.Lines.Count);
                        Assert.Equal(5, recognitionResult.Lines[0].Words.Count);
                        Assert.Equal(7, recognitionResult.Lines[1].Words.Count);
                    }
            }
        }
Example #24
0
        private static async Task <AnalyzeResults> GetReadFileResultFromOperationAsync(string operation)
        {
            bool isValidGuid = Guid.TryParse(operation, out Guid operationId);

            if (!isValidGuid)
            {
                throw new ArgumentException("Operation Id is invalid.");
            }

            var opResult = new ReadOperationResult();

            int i = 0;

            while (i++ < MaxRetriesOnTextRecognition)
            {
                // Get the operation result
                opResult = await client.GetReadResultAsync(operationId);

                // Wait if operation is running or has not started
                if (opResult.Status == OperationStatusCodes.NotStarted || opResult.Status == OperationStatusCodes.Running)
                {
                    await Task.Delay(DelayOnTextRecognition);
                }
                else
                {
                    break;
                }
            }

            if (opResult.Status != OperationStatusCodes.Succeeded)
            {
                throw new Exception($"Computer Vision operation was not successful with status: {opResult.Status}");
            }

            return(opResult.AnalyzeResult);
        }
        public async Task <ConvertResponse> ExtractTextBatchRead(ConvertResponse response)
        {
            try
            {
                var key      = _config["computerVision:key"];
                var endpoint = _config["computerVision:endpoint"];
                ComputerVisionClient computerVision = new ComputerVisionClient(new ApiKeyServiceClientCredentials(key))
                {
                    Endpoint = endpoint
                };

                var operationInfo = await computerVision.BatchReadFileAsync(response.Request.UploadBlobUrl + _config["storage:sas"]);

                var result      = new ReadOperationResult();
                var operationId = operationInfo.OperationLocation.Split('/').Last();

                while (result.Status != TextOperationStatusCodes.Failed && result.Status != TextOperationStatusCodes.Succeeded)
                {
                    await Task.Delay(500);

                    result = await computerVision.GetReadOperationResultAsync(operationId);
                }

                if (result.Status == TextOperationStatusCodes.Failed)
                {
                    response.ErrorMessage = $"Text translation failed.";
                    return(response);
                }

                var text = new StringBuilder();
                foreach (var page in result.RecognitionResults)
                {
                    Line lastLine = null;
                    foreach (var line in page.Lines)
                    {
                        // if (lastLine?.Words.Count >= 4)
                        // {
                        //  text.Append($" {line.Text}");
                        // }
                        // else
                        // {
                        text.Append(Environment.NewLine + line.Text);
                        // }

                        lastLine = line;
                    }
                }

                Console.WriteLine();
                Console.WriteLine(text.ToString());

                var transcriptBlobName = Path.GetFileNameWithoutExtension(response.Request.BlobName) + ".txt";

                var blobClient = new BlobStorageClient(_config);
                var textBlob   = blobClient.GetBlobBlock("transcripts", transcriptBlobName);

                response.TranscriptBlobUrl = textBlob.Uri.AbsoluteUri;
                response.Transcript        = text.ToString().Trim();

                await textBlob.UploadTextAsync(response.Transcript);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                Console.WriteLine(ex.Message);
                response.ErrorMessage = ex.ToString();
            }

            return(response);
        }
        public void MapMsReadParserServiceTest(ReadOperationResult parsingResult, DocumentTree expected)
        {
            var actual = _parser.MapMsReadResult(parsingResult);

            Assert.Equal(expected, actual, new DocumentTreeComparer());
        }
        private double CalculateMedianLineStart(ReadOperationResult parsingResult)
        {
            var linesArraySortedByStart = parsingResult.AnalyzeResult.ReadResults.SelectMany(p => p.Lines).OrderBy(l => GetBoundingBoxTopLeftX(l)).ToArray();

            return(GetBoundingBoxTopLeftX(linesArraySortedByStart[linesArraySortedByStart.Length / 2]));
        }
Example #28
0
                        //Retriving the recognized text
                        public async Task GetTextAsync(ComputerVisionClient computerVision, string operationLocation)
                        {
                            //Retrieve the URI where the recognized text will be stored from the Operation-Location header
                            string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);

                            //Calling GetReadOperationResultAsync
                            ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId);

                            //Waiting for the operation to complete
                            int i          = 0;
                            int maxRetries = 10;

                            while ((result.Status == TextOperationStatusCodes.Running ||
                                    result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
                            {
                                await Task.Delay(1000);

                                result = await computerVision.GetReadOperationResultAsync(operationId);
                            }

                            //Displaying the results
                            var recResults = result.RecognitionResults;


                            foreach (TextRecognitionResult recResult in recResults)
                            {
                                foreach (Line line in recResult.Lines)
                                {
                                    OCRList.Add(line.Text);
                                    OcrResult += line.Text + " <br> ";
                                }
                            }


                            //Loop
                            for (int j = 0; j < OCRList.Count; j++)
                            {
                                //Calling LUIS
                                var           client   = new RestClient(ConfigurationManager.AppSettings["LUIS_EndPoint"] + ConfigurationManager.AppSettings["LUIS_AppID"] + "?verbose=true&timezoneOffset=-360&subscription-key=" + ConfigurationManager.AppSettings["LUIS_Key"] + "&q=" + OCRList[j]);
                                var           request  = new RestRequest(Method.GET);
                                IRestResponse response = client.Execute(request);
                                dynamic       jObject  = JObject.Parse(response.Content);

                                JArray luislenobj = JArray.Parse(jObject.entities.ToString());

                                if (luislenobj.Count > 0)
                                {
                                    for (int k = 0; k < luislenobj.Count; k++)
                                    {
                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract Details" && jObject["entities"][k]["type"].ToString() == "Contract Date")
                                        {
                                            ContractDate = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }
                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract Details" && jObject["entities"][k]["type"].ToString() == "Client Name")
                                        {
                                            ClientName = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }
                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract Details" && jObject["entities"][k]["type"].ToString() == "Vendor Name")
                                        {
                                            VendorName += jObject["entities"][k]["entity"].ToString();
                                        }


                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Services" && jObject["entities"][k]["type"].ToString() == "Services")
                                        {
                                            Services += " " + jObject["entities"][k]["entity"].ToString();
                                        }

                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract Value" && jObject["entities"][k]["type"].ToString() == "Contract Value")
                                        {
                                            ContractValue = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }

                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Contract End Date" && jObject["entities"][k]["type"].ToString() == "End Date")
                                        {
                                            EndDate = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }

                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Penalty" && jObject["entities"][k]["type"].ToString() == "builtin.percentage")
                                        {
                                            PenaltyValue = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }

                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Jurisdiction" && jObject["entities"][k]["type"].ToString() == "Jurisdiction Place")
                                        {
                                            JurisdictionPlace = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }

                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Vendor Details" && jObject["entities"][k]["type"].ToString() == "builtin.email")
                                        {
                                            VendorEmail = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }
                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Vendor Details" && jObject["entities"][k]["type"].ToString() == "builtin.phonenumber")
                                        {
                                            VendorPhone = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }

                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Client Details" && jObject["entities"][k]["type"].ToString() == "builtin.email")
                                        {
                                            ClientEmail = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }
                                        if (jObject["topScoringIntent"]["intent"].ToString() == "Discover Client Details" && jObject["entities"][k]["type"].ToString() == "builtin.phonenumber")
                                        {
                                            ClientPhone = jObject["entities"][k]["entity"].ToString();
                                            break;
                                        }
                                    }
                                }
                            }

                            FinalResult = "<br>" + "Contract Date : " + ContractDate + "<br>" + "Vendor Name : " + VendorName + "<br>" + "Client Name : " + ClientName + "<br>" + "Service Description : " + Services + "<br>" + "Contract Value : " + ContractValue + "<br>" + "End Date : " + EndDate + "<br>" + "Penalty Value : " + PenaltyValue + "<br>" + "Jurisdiction Place : " + JurisdictionPlace + "<br>" + "Vendor Email : " + VendorEmail + "<br>" + "Vendor Phone : " + VendorPhone + "<br>" + "Client Email : " + ClientEmail + "<br>" + "Client Phone : " + ClientPhone + "<br>";
                        }