Esempio n. 1
0
        public async Task <IActionResult> Post([FromBody] StageLogPostDTO dto)
        {
            Console.WriteLine("stagelogs POST entered.");

            var game = _context.Game.Where(x => x.game_id == dto.game_id).FirstOrDefault();

            if (game == null)
            {
                return(NotFound("Game not found. " + dto.game_id));
            }

            // Add a stage log record
            StageLog newStageLog = new StageLog {
                game_id       = dto.game_id,
                stage_id      = dto.stage_id,
                objects_score = 0,
                time_score    = 0,
                clear_score   = 0,
                stage_score   = 0,
                total_score   = 0,
                completed_yn  = "N",
                start_date    = DateTime.Now
            };
            var value = _context.StageLog.Add(newStageLog);
            await _context.SaveChangesAsync();

            var gameResult = _context.GameResult.Where(x => x.game_id == dto.game_id).FirstOrDefault();

            if (gameResult == null)
            {
                GameResult newGameResult = new GameResult {
                    game_id             = dto.game_id,
                    name                = game.name,
                    total_score         = 0,
                    total_rank          = 0,
                    total_found_objects = 0,
                    total_playtime      = 0
                };

                _context.GameResult.Add(newGameResult);
                await _context.SaveChangesAsync();
            }

            return(Ok(dto.game_id));
        }
        public async Task <IActionResult> Post([FromBody] GameStagePostImageDTO dto)
        {
            Console.WriteLine("PostImage entered.");

            string bucketName = "reinvent-gottalent";

            // Retrieving image data
            // ex: game/10/Happiness.jpg
            string keyName        = string.Format("game/{0}/{1}.jpg", dto.gameId, dto.actionType);
            string croppedKeyName = string.Format("game/{0}/{1}_cropped.jpg", dto.gameId, dto.actionType);

            byte[] imageByteArray = Convert.FromBase64String(dto.base64Image);
            if (imageByteArray.Length == 0)
            {
                return(BadRequest("Image length is 0."));
            }

            StageLog newStageLog = null;

            using (MemoryStream ms = new MemoryStream(imageByteArray))
            {
                // call Rekonition API
                FaceDetail faceDetail = await RekognitionUtil.GetFaceDetailFromStream(this.RekognitionClient, ms);

                // Crop image to get face only
                System.Drawing.Image originalImage = System.Drawing.Image.FromStream(ms);
                System.Drawing.Image croppedImage  = GetCroppedFaceImage(originalImage, faceDetail.BoundingBox);
                MemoryStream         croppedms     = new MemoryStream();
                croppedImage.Save(croppedms, ImageFormat.Jpeg);

                // Upload image to S3 bucket
                //await Task.Run(() => S3Util.UploadToS3(this.S3Client, bucketName, keyName, ms));
                await Task.Run(() => S3Util.UploadToS3(this.S3Client, bucketName, keyName, croppedms));

                // Get a specific emotion score
                double emotionScore = 0.0f;
                if (dto.actionType != "Profile")
                {
                    emotionScore = RekognitionUtil.GetEmotionScore(faceDetail.Emotions, dto.actionType);
                }

                int    evaluatedAge    = (faceDetail.AgeRange.High + faceDetail.AgeRange.Low) / 2;
                string evaluatedGender = faceDetail.Gender.Value;

                // Database update
                newStageLog = new StageLog {
                    game_id     = dto.gameId,
                    action_type = dto.actionType,
                    score       = emotionScore,
                    file_loc    = keyName,
                    age         = evaluatedAge,
                    gender      = evaluatedGender,
                    log_date    = DateTime.Now
                };

                var value = _context.StageLog.Add(newStageLog);
                await _context.SaveChangesAsync();
            }

            // Send response
            string signedURL = S3Util.GetPresignedURL(this.S3Client, bucketName, keyName);

            newStageLog.file_loc = signedURL;

            return(Ok(newStageLog));
        }