Exemple #1
0
        private async Task<HandwritingRecognitionOperationResult> HandwritingRecognitionTask(Func<VisionServiceClient, Task<HandwritingRecognitionOperation>> Func)
        {
            int MaxRetryTimes = 3;

            HandwritingRecognitionOperationResult result;

            try
            {
                HandwritingRecognitionOperation operation = await Func(visionClient);

                result = await visionClient.GetHandwritingRecognitionOperationResultAsync(operation);

                int i = 0;
                while ((result.Status == HandwritingRecognitionOperationStatus.Running || result.Status == HandwritingRecognitionOperationStatus.NotStarted) && i++ < MaxRetryTimes)
                {
                    result = await visionClient.GetHandwritingRecognitionOperationResultAsync(operation);
                }

            }
            catch (ClientException ex)
            {
                result = new HandwritingRecognitionOperationResult() { Status = HandwritingRecognitionOperationStatus.Failed };
            }

            return result;
        }
        /// <summary>
        /// Log text from the given HandwritingRecognitionOperationResult object.
        /// </summary>
        /// <param name="results">The HandwritingRecognitionOperationResult.</param>
        protected void LogHandwritingRecognitionResult(HandwritingRecognitionOperationResult results)
        {
            StringBuilder stringBuilder = new StringBuilder();

            if (results != null && results.RecognitionResult != null && results.RecognitionResult.Lines != null && results.RecognitionResult.Lines.Length > 0)
            {
                stringBuilder.Append("Text: ");
                stringBuilder.AppendLine();
                foreach (var line in results.RecognitionResult.Lines)
                {
                    foreach (var word in line.Words)
                    {
                        stringBuilder.Append(word.Text);
                        stringBuilder.Append(" ");
                    }

                    stringBuilder.AppendLine();
                    stringBuilder.AppendLine();
                }
            }

            if (string.IsNullOrWhiteSpace(stringBuilder.ToString()))
            {
                Log("No text is recognized.");
            }
            else
            {
                Log(stringBuilder.ToString());
            }

            if (results.Status == HandwritingRecognitionOperationStatus.Running || results.Status == HandwritingRecognitionOperationStatus.NotStarted)
            {
                Log(string.Format("Status is {0} after try {1} times", results.Status, MaxRetryTimes));
            }
        }
        private static async Task <string[]> TextExtractionCore(string fname, bool wrds, string method)
        {
            VisionServiceClient vsClient = new VisionServiceClient(API_Key, API_Location);

            string[] textres = null;

            if (System.IO.File.Exists(fname))
            {
                using (Stream stream = System.IO.File.OpenRead(fname))
                {
                    switch (method)
                    {
                    case "TextPic":
                        OcrResults ocr = await vsClient.RecognizeTextAsync(stream, "unk", false);

                        textres = GetExtracted(ocr, wrds);
                        break;

                    case "HandwrittenPic":
                        HandwritingRecognitionOperation hdro = await vsClient.CreateHandwritingRecognitionOperationAsync(stream);

                        HandwritingRecognitionOperationResult hresult = await vsClient.GetHandwritingRecognitionOperationResultAsync(hdro);

                        textres = GetHandWrittenExtracted(hresult, wrds);
                        break;
                    }
                }
            }
            return(textres);
        }
Exemple #4
0
        public async Task <IHttpActionResult> RecognizeHandWrittenTextByURL(string imageUrl)
        {
            try
            {
                HandwritingRecognitionOperationResult handwritingRecognitionOperationResult = await RecognizeAsync(async() => await visionServiceClient.CreateHandwritingRecognitionOperationAsync(imageUrl));

                return(Ok(handwritingRecognitionOperationResult));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
        private async Task <HandwritingRecognitionOperationResult> RecognizeAsync(Func <VisionServiceClient, Task <HandwritingRecognitionOperation> > Func)
        {
            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE STARTS HERE
            // -----------------------------------------------------------------------

            //
            // Create Project Oxford Vision API Service client
            //
            VisionServiceClient VisionServiceClient = new VisionServiceClient(SubscriptionKey); //, "https://westcentralus.api.cognitive.microsoft.com/vision/v1.0");

            Log("VisionServiceClient is created");

            HandwritingRecognitionOperationResult result;

            try
            {
                Log("Calling VisionServiceClient.CreateHandwritingRecognitionOperationAsync()...");
                HandwritingRecognitionOperation operation = await Func(VisionServiceClient);

                Log("Calling VisionServiceClient.GetHandwritingRecognitionOperationResultAsync()...");
                result = await VisionServiceClient.GetHandwritingRecognitionOperationResultAsync(operation);

                int i = 0;
                while ((result.Status == HandwritingRecognitionOperationStatus.Running || result.Status == HandwritingRecognitionOperationStatus.NotStarted) && i++ < MaxRetryTimes)
                {
                    Log(string.Format("Server status: {0}, wait {1} seconds...", result.Status, QueryWaitTimeInSecond));
                    await Task.Delay(QueryWaitTimeInSecond);

                    Log("Calling VisionServiceClient.GetHandwritingRecognitionOperationResultAsync()...");
                    result = await VisionServiceClient.GetHandwritingRecognitionOperationResultAsync(operation);
                }
            }
            catch (ClientException ex)
            {
                result = new HandwritingRecognitionOperationResult()
                {
                    Status = HandwritingRecognitionOperationStatus.Failed
                };
                Log(ex.Error.Message);
            }

            return(result);

            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE ENDS HERE
            // -----------------------------------------------------------------------
        }
Exemple #6
0
        public static async Task Run([BlobTrigger("handwritten/{name}", Connection = "storage")] string content, string name, TraceWriter log)
        {
            var client = new Microsoft.ProjectOxford.Vision.VisionServiceClient(
                Environment.GetEnvironmentVariable("Computer-Vision-Ocp-Apim-Subscription-Key"),
                Environment.GetEnvironmentVariable("Computer-Vision-Api-Root"));

            HandwritingRecognitionOperationResult result = null;

            try
            {
                var operation = await client.CreateHandwritingRecognitionOperationAsync($"https://sqlsat707.blob.core.windows.net/handwritten/{name}");

                result = await client.GetHandwritingRecognitionOperationResultAsync(operation);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            // now insert

            var connectionString = Environment.GetEnvironmentVariable("ConnectionString");

            using (var conn = new SqlConnection(connectionString))
            {
                conn.Open();

                var cmd = conn.CreateCommand();
                cmd.CommandText = "ImportTemperatureEvent";
                cmd.CommandType = CommandType.StoredProcedure;

                var deviceId    = cmd.Parameters.Add("@DeviceId", SqlDbType.NVarChar, 32);
                var timestamp   = cmd.Parameters.Add("@Timestamp", SqlDbType.DateTimeOffset);
                var temperature = cmd.Parameters.Add("@Temperature", SqlDbType.Float);

                foreach (var line in result.RecognitionResult.Lines)
                {
                    deviceId.Value    = line.Words[0].Text;
                    timestamp.Value   = DateTimeOffset.Now;
                    temperature.Value = double.Parse(line.Words[1].Text);
                    cmd.ExecuteNonQuery();
                }

                conn.Close();
            }
        }
Exemple #7
0
        public static string[] GetExtracted(HandwritingRecognitionOperationResult res, bool wrds)
        {
            List <string> items = new List <string>();

            foreach (HandwritingTextLine l in res.RecognitionResult.Lines)
            {
                if (wrds)
                {
                    items.AddRange(GetWords(l));
                }
                else
                {
                    items.Add(GetLineAsString(l));
                }
            }

            return(items.ToArray());
        }
Exemple #8
0
        public static async Task <string[]> HandwritingExtractionCore(string fname, bool wrds)
        {
            VisionServiceClient client = new VisionServiceClient(API_key, API_location);

            string[] textres = null;
            if (File.Exists(fname))
            {
                using (Stream stream = File.OpenRead(fname))
                {
                    HandwritingRecognitionOperation op = await client.CreateHandwritingRecognitionOperationAsync(stream);

                    HandwritingRecognitionOperationResult res = await client.GetHandwritingRecognitionOperationResultAsync(op);

                    textres = GetExtracted(res, wrds);
                }
            }
            return(textres);
        }
        private static string[] GetHandWrittenExtracted(HandwritingRecognitionOperationResult hdro, bool wrds)
        {
            List <string> lst = new List <string>();


            foreach (HandwritingTextLine lineItem in hdro.RecognitionResult.Lines)
            {
                if (wrds)
                {
                    lst.AddRange(GetHandWrittingWords(lineItem));
                }
                else
                {
                    lst.Add(GetHandWrittingLineString(lineItem));
                }
            }

            return(lst.ToArray());
        }
Exemple #10
0
        private async Task <HandwritingRecognitionOperationResult> RecognizeAsync(Func <Task <HandwritingRecognitionOperation> > Func)
        {
            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE STARTS HERE
            // -----------------------------------------------------------------------

            //
            // Create Project Oxford Vision API Service client
            //

            HandwritingRecognitionOperationResult result;

            try
            {
                HandwritingRecognitionOperation operation = await Func();

                result = await visionServiceClient.GetHandwritingRecognitionOperationResultAsync(operation);

                int i = 0;
                while ((result.Status == HandwritingRecognitionOperationStatus.Running || result.Status == HandwritingRecognitionOperationStatus.NotStarted) && i++ < MaxRetryTimes)
                {
                    await Task.Delay(QueryWaitTimeInSecond);

                    result = await visionServiceClient.GetHandwritingRecognitionOperationResultAsync(operation);
                }
            }
            catch (ClientException)
            {
                result = new HandwritingRecognitionOperationResult()
                {
                    Status = HandwritingRecognitionOperationStatus.Failed
                };
            }

            return(result);

            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE ENDS HERE
            // -----------------------------------------------------------------------
        }
Exemple #11
0
        private async Task <HandwritingRecognitionResult> GetResultFromOperationResponse(HttpResponseMessage response)
        {
            // Process operation
            if (response.Headers.Contains(this.HEADER_OPLOC_KEY) == false)
            {
                throw new InvalidOperationException("No operation-location value returned from initial request.");
            }

            Uri opLocationUri = new Uri(response.Headers.GetValues(this.HEADER_OPLOC_KEY).First());

            HandwritingRecognitionOperationResult opResult = new HandwritingRecognitionOperationResult();

            int i = 0;

            while (i++ < HttpClientUtility.RETRY_COUNT)
            {
                // Get the operation result
                opResult = await HttpClientUtility.GetAsync <HandwritingRecognitionOperationResult>(opLocationUri, this.RequestHeaders);

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

            if (opResult.Status != HandwritingRecognitionOperationResult.HandwritingRecognitionOperationStatus.Succeeded)
            {
                throw new Exception($"Handwriting recognition operation was not successful with status: {opResult.Status}");
            }

            return(opResult.Result);
        }
Exemple #12
0
        public async Task <IHttpActionResult> RecognizeHandWrittenText()
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                return(BadRequest());
            }
            try
            {
                var provider = await Request.Content.ReadAsMultipartAsync(new InMemoryMultipartFormDataStreamProvider());

                var files      = provider.Files;
                var file1      = files[0];
                var fileStream = await file1.ReadAsStreamAsync();


                HandwritingRecognitionOperationResult handwritingRecognitionOperationResult = await RecognizeAsync(async() => await visionServiceClient.CreateHandwritingRecognitionOperationAsync(fileStream));

                return(Ok(handwritingRecognitionOperationResult));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }