public static IActionResult RunHocrGenerator([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, TraceWriter log, ExecutionContext executionContext) { string skillName = executionContext.FunctionName; IEnumerable <WebApiRequestRecord> requestRecords = WebApiSkillHelpers.GetRequestRecords(req); if (requestRecords == null || requestRecords.Count() != 1) { return(new BadRequestObjectResult($"{skillName} - Invalid request record array: Skill requires exactly 1 image per request.")); } WebApiSkillResponse response = WebApiSkillHelpers.ProcessRequestRecords(skillName, requestRecords, (inRecord, outRecord) => { List <OcrImageMetadata> imageMetadataList = JsonConvert.DeserializeObject <List <OcrImageMetadata> >(JsonConvert.SerializeObject(inRecord.Data["ocrImageMetadataList"])); Dictionary <string, string> annotations = JsonConvert.DeserializeObject <JArray>(JsonConvert.SerializeObject(inRecord.Data["wordAnnotations"])) .Where(o => o.Type != JTokenType.Null) .GroupBy(o => o["value"].Value <string>()) .Select(g => g.First()) .ToDictionary(o => o["value"].Value <string>(), o => o["description"].Value <string>()); List <HocrPage> pages = new List <HocrPage>(); for (int i = 0; i < imageMetadataList.Count; i++) { pages.Add(new HocrPage(imageMetadataList[i], i, annotations)); } HocrDocument hocrDocument = new HocrDocument(pages); outRecord.Data["hocrDocument"] = hocrDocument; return(outRecord); }); return((ActionResult) new OkObjectResult(response)); }
public static IActionResult RunHocrGenerator([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, TraceWriter log, ExecutionContext executionContext) { string skillName = executionContext.FunctionName; IEnumerable <WebApiRequestRecord> requestRecords = WebApiSkillHelpers.GetRequestRecords(req); if (requestRecords == null || requestRecords.Count() != 1) { return(new BadRequestObjectResult($"{skillName} - Invalid request record array: Skill requires exactly 1 image per request.")); } WebApiSkillResponse response = WebApiSkillHelpers.ProcessRequestRecords(skillName, requestRecords, (inRecord, outRecord) => { List <OcrImageMetadata> imageMetadataList = JsonConvert.DeserializeObject <List <OcrImageMetadata> >(JsonConvert.SerializeObject(inRecord.Data["ocrImageMetadataList"])); List <HocrPage> pages = new List <HocrPage>(); for (int i = 0; i < imageMetadataList.Count; i++) { pages.Add(new HocrPage(imageMetadataList[i], i)); } HocrDocument hocrDocument = new HocrDocument(pages); outRecord.Data["hocrDocument"] = hocrDocument; return(outRecord); }); return((ActionResult) new OkObjectResult(response)); }
public static IActionResult RunHocrGenerator([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, TraceWriter log, ExecutionContext executionContext) { string skillName = executionContext.FunctionName; IEnumerable <WebApiRequestRecord> requestRecords = WebApiSkillHelpers.GetRequestRecords(req); if (requestRecords == null || requestRecords.Count() != 1) { return(new BadRequestObjectResult($"{skillName} - Invalid request record array: Skill requires exactly 1 image per request.")); } var blobStorageConnectionString = GetAppSetting("BlobStorageAccountConnectionString"); var blobContainerName = String.IsNullOrEmpty(req.Headers["BlobContainerName"]) ? Config.AZURE_STORAGE_CONTAINER_NAME : (string)req.Headers["BlobContainerName"]; if (String.IsNullOrEmpty(blobStorageConnectionString) || String.IsNullOrEmpty(blobContainerName)) { return(new BadRequestObjectResult($"{skillName} - Information for the blob storage account is missing")); } var imageStore = new ImageStore(blobStorageConnectionString, blobContainerName); var expiry = DateTimeOffset.UtcNow.Add(s_imageBlobSASDuration); var imageBlobSAS = imageStore.GetSharedAccessSignature(expiry); WebApiSkillResponse response = WebApiSkillHelpers.ProcessRequestRecords(skillName, requestRecords, (inRecord, outRecord) => { List <OcrImageMetadata> imageMetadataList = JsonConvert.DeserializeObject <List <OcrImageMetadata> >(JsonConvert.SerializeObject(inRecord.Data["ocrImageMetadataList"])); Dictionary <string, string> annotations = JsonConvert.DeserializeObject <JArray>(JsonConvert.SerializeObject(inRecord.Data["wordAnnotations"])) .Where(o => o.Type != JTokenType.Null) .GroupBy(o => o["value"].Value <string>()) .Select(g => g.First()) .ToDictionary(o => o["value"].Value <string>(), o => o["description"].Value <string>()); List <HocrPage> pages = new List <HocrPage>(); for (int i = 0; i < imageMetadataList.Count; i++) { pages.Add(new HocrPage(imageMetadataList[i], i, imageBlobSAS, annotations)); } HocrDocument hocrDocument = new HocrDocument(pages); outRecord.Data["hocrDocument"] = hocrDocument; return(outRecord); }); return((ActionResult) new OkObjectResult(response)); }
public static IActionResult RunHocrGenerator([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log, ExecutionContext executionContext) { string skillName = executionContext.FunctionName; log.LogInformation($"{skillName}: C# HTTP trigger function processed a request."); // Read input, deserialize it and validate it. var data = GetStructuredInput(req.Body); if (data == null) { return(new BadRequestObjectResult("The request schema does not match expected schema.")); } if (data.Values.Count() != 1) { return(new BadRequestObjectResult($"{skillName} - Invalid request record array: Skill requires exactly 1 image per request.")); } var response = new WebApiResponse(); foreach (var record in data.Values) { if (record == null || record.RecordId == null) { continue; } OutputRecord responseRecord = new OutputRecord(); responseRecord.RecordId = record.RecordId; try { log.LogInformation($"{skillName}: List was received {record.Data["ocrImageMetadataList"]}."); List <OcrImageMetadata> imageMetadataList = JsonConvert.DeserializeObject <List <OcrImageMetadata> >(JsonConvert.SerializeObject(record.Data["ocrImageMetadataList"])); List <HocrPage> pages = new List <HocrPage>(); for (int i = 0; i < imageMetadataList.Count; i++) { pages.Add(new HocrPage(imageMetadataList[i], i)); } HocrDocument hocrDocument = new HocrDocument(pages); responseRecord.Data["hocrDocument"] = hocrDocument; } catch (Exception e) { log.LogInformation($"{skillName}: Error {e.Message}."); // Something bad happened, log the issue. var error = new OutputRecord.OutputRecordMessage { Message = e.Message }; responseRecord.Errors = new List <OutputRecord.OutputRecordMessage> { error }; } finally { response.values.Add(responseRecord); } } return(new OkObjectResult(response)); }