Пример #1
0
        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));
        }
Пример #4
0
        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));
        }