Ejemplo n.º 1
0
        public static void Run(
            [QueueTrigger("access-registration-queue", Connection = "QueueConnection")]
            AccessRegistrationQueueItem queueItem,
            [CosmosDB("slbioakdatabase", "access-registration-items", ConnectionStringSetting = "CosmosDBConnection")]
            out AccessRegistrationItem item,
            ILogger log)
        {
            log.LogInformation("Læs adgangsregistrering fra kø og gem i Cosmos DB");

            item = new AccessRegistrationItem
            {
                Id              = Guid.NewGuid().ToString(),
                EntranceStatus  = queueItem.EntranceStatus,
                Direction       = queueItem.Direction,
                ImageUrl        = queueItem.ImageUrl,
                AccessTimeStamp = queueItem.AccessTimeStamp
            };
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post")]
            HttpRequest req,
            [Queue("access-registration-queue", Connection = "QueueConnection")]
            ICollector <AccessRegistrationQueueItem> outputQueueItem,
            ILogger log)
        {
            string direction;

            log.LogInformation("Adgang registreret");

            // Validering
            if (!req.Form.Files.Any())
            {
                const string error = "Der er ikke vedhæftet en fil";
                log.LogError(error);
                return(new BadRequestObjectResult(error));
            }

            if (req.Form.TryGetValue("direction", out var directionValues))
            {
                direction = directionValues[0].ToLowerInvariant() == "enter" ? "Kommet" : "Gået";
                log.LogInformation($"Adgangsretning: {direction}");
            }
            else
            {
                const string error = "Der er ikke information om adgangsretning";
                log.LogError(error);
                return(new BadRequestObjectResult(error));
            }

            // Image fra request
            var file = req.Form.Files[0];

            // Undersøg om ansigt kan genkendes
            log.LogInformation("Undersøg om ansigt kan genkendes");
            var similarFaces    = await new FaceRecognition().FaceAccessControl(file);
            var accessConfirmed = similarFaces.Any() && similarFaces[0].Confidence > 0.9;

            log.LogInformation(string.Format("Ansigt er {0}genkendt", accessConfirmed ? "" : "ikke "));


            // Gem billede på Blob storage
            log.LogInformation("Gem billede på Blob storage");
            var imageUrl = await new ImageStorage().Save(file);

            log.LogInformation("Billedet er gemt på Blob storage");

            // Læg registrering på kø
            log.LogInformation("Læg registrering på kø");
            var queueItem = new AccessRegistrationQueueItem
            {
                EntranceStatus  = accessConfirmed ? "Godkendt" : "Afvist",
                Direction       = direction,
                ImageUrl        = imageUrl,
                AccessTimeStamp = DateTime.Now.ToUniversalTime().AddHours(1)
            };

            outputQueueItem.Add(queueItem);
            log.LogInformation("Registrering er på kø");


            // Response
            var response = new AccessControlResponse
            {
                AccessConfirmed = accessConfirmed,
                SimilarFaces    = similarFaces
            };

            return(new OkObjectResult(response));
        }