示例#1
0
        public override async Task <PerformOcrStringResponse> PerformOcr(CognitiveServicesRequest request)
        {
            var cognitiveServicesRestHttpClient = new CognitiveServicesRestHttpClient();
            var restHttpResponse = await cognitiveServicesRestHttpClient.GetRestHttpStringResponse(request);

            var performOcrResponse = new PerformOcrStringResponse
            {
                Success             = restHttpResponse.Success,
                ImplementedInModule = restHttpResponse.ImplementedInModule,
                FailureInformation  = restHttpResponse.FailureInformation,
                // LinesFound = new List<string>(),
                // WordsFound = new List<PerformOcrWordInstance>(),
            };

            performOcrResponse.LinesFound.Add(CommonFramework.Library.Helpers.JsonHelpers.JsonPrettyPrint(restHttpResponse.RestResponse));

            return(performOcrResponse);
        }
        public override async Task <PerformOcrStringResponse> PerformOcr(CognitiveServicesRequest request)
        {
            var response = new PerformOcrStringResponse();

            try
            {
                var apiKeyServiceClientCredentials = new ApiKeyServiceClientCredentials(request.EndPointKey1);
                var delegatingHandlers             = new System.Net.Http.DelegatingHandler[] { };

                IComputerVisionClient computerVision = new ComputerVisionClient(
                    credentials: apiKeyServiceClientCredentials,
                    handlers: delegatingHandlers)
                {
                    Endpoint = request.EndPoint
                };

                var contentString = await computerVision.RecognizePrintedTextInStreamAsync(
                    image : request.ImageStream,
                    detectOrientation : false,
                    language : OcrLanguages.En,
                    cancellationToken : CancellationToken.None);

                var resultsLinesFound = new List <string>();
                var resultsWordsFound = new List <string>();

                foreach (OcrRegion region in contentString.Regions)
                {
                    foreach (OcrLine line in region.Lines)
                    {
                        var words = line.Words.Select(word => word.Text).ToList();

                        resultsWordsFound.AddRange(words);

                        if (words.Count > 0)
                        {
                            resultsLinesFound.Add(string.Join <string>(" ", words));
                        }
                    }
                }

                var wordGrouping =
                    from word in resultsWordsFound
                    group word by word
                    into g
                    select new { InstanceFound = g.Key, Word = g };

                var groupedWordsFound = wordGrouping
                                        .Select(item => new PerformOcrWordInstance
                {
                    Word      = item.Word.Key,
                    Instances = item.Word.Count()
                });

                response.LinesFound = resultsLinesFound;
                response.WordsFound = groupedWordsFound.ToList();
                response.Success    = true;
            }
            catch (Exception e)
            {
                response.FailureInformation = e.Message;
            }

            return(response);
        }