public void ExtractUrlFromTextResultSuccess() { const string expectedXP = "https://techprofile.microsoft.com/en-us/msimpsonnz"; string sample_data = File.ReadAllText($"{cwd}\\Samples\\textResult.json"); RecognitionResult recognitionResultData = JsonConvert.DeserializeObject <RecognitionResult>(sample_data); string result = ScoreValidator.ExtractUrl(recognitionResultData); Assert.Equal(expectedXP, result); }
public async static void Run( [EventGridTrigger] JObject eventGridEvent, [CosmosDB("%Cosmos:DatabaseName%", "%Cosmos:CollectionName%", ConnectionStringSetting = "Cosmos:ConnectionString")] IAsyncCollector <dynamic> documentOut, ILogger log) { log.LogInformation(eventGridEvent.ToString(Formatting.Indented)); string blobUrl = eventGridEvent["data"]["url"].ToString(); dynamic body = new { url = blobUrl }; string bodyJson = JsonConvert.SerializeObject(body); log.LogInformation($"Status: Extract blob: {bodyJson}"); client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", Environment.GetEnvironmentVariable("OCR:Subscription")); var queryString = HttpUtility.ParseQueryString(string.Empty); var recTextUri = "https://westus.api.cognitive.microsoft.com/vision/v2.0/recognizeText?mode=Printed"; HttpResponseMessage response; // Request body byte[] byteData = Encoding.UTF8.GetBytes(bodyJson); log.LogInformation("Status: Send Request to Vision"); using (var content = new ByteArrayContent(byteData)) { content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); response = await client.PostAsync(recTextUri, new ByteArrayContent(byteData)); } log.LogInformation("Status: Vison Request Process"); string textOperationUri = response.Headers.FirstOrDefault(x => x.Key == "Operation-Location").Value.FirstOrDefault(); log.LogInformation($"Staus: Get URL, {textOperationUri}"); HttpResponseMessage textOperationReq; textOperationReq = await client.GetAsync(textOperationUri); var textOperationRes = await textOperationReq.Content.ReadAsStringAsync(); RecognitionResult recognitionResultData = JsonConvert.DeserializeObject <RecognitionResult>(textOperationRes); while (recognitionResultData.status != "Succeeded") { await Task.Delay(1000); textOperationReq = await client.GetAsync(textOperationUri); textOperationRes = await textOperationReq.Content.ReadAsStringAsync(); recognitionResultData = JsonConvert.DeserializeObject <RecognitionResult>(textOperationRes); } log.LogInformation("Status: Received Result"); var validateScore = ScoreValidator.ExtractScore(recognitionResultData); var techProfileUrl = ScoreValidator.ExtractUrl(recognitionResultData); var onlineScore = ScoreValidator.GetOnlineProfile(techProfileUrl); string status; if (onlineScore >= validateScore) { status = "Pass"; } else { status = "FAIL"; } Submission document = new Submission { Id = eventGridEvent["id"].ToString(), Date = eventGridEvent["eventTime"].ToString(), UserId = Guid.NewGuid().ToString(), BlobUri = blobUrl, ValidateScore = validateScore, OnlineScore = onlineScore, Status = status ?? "Validation Failure", TechProfile = techProfileUrl ?? "Failed to extract profile", Type = "submission" }; await documentOut.AddAsync(document); }