in JfkWebApiSkills/JfkWebApiSkills/JfkWebAPISkills.cs [132:161]
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);
}