Example #1
0
        private RbMessage GetFaceInfo(RbHeader _rbh, JObject _appInfo, JObject _rbBody)
        {
            var storageAccount   = (_appInfo["StorageAccount"] ?? "").ToString();
            var storageKey       = (_appInfo["StorageKey"] ?? "").ToString();
            var storageContainer = (_appInfo["StorageContainerTemporaryThumbnail"] ?? "").ToString();
            var faceApiKey       = (_appInfo["FaceApiKey"] ?? "").ToString();

            var appbody = new AppBody();

            appbody.PersonGroupId = (_rbBody["PersonGroupId"] ?? "").ToString();

            var buffer = GetFaceImageData(_appInfo, _rbBody, appbody.PersonGroupId, _rbh);

            if (buffer == null)
            {
                return(new RbMessage());
            }

            var facialHairConfidence = (double)_appInfo["FacialHairConfidence"];
            var fd       = new Detection(FaceApiHttpClient, faceApiKey, facialHairConfidence);
            var fdResult = fd.DetectFace(buffer);

            appbody.PersonInfos = fdResult.PersonInfos;
            if (fdResult.apiResult.IsSuccessStatusCode)
            {
                var faceDetectJson = JsonConvert.DeserializeObject <JArray>(fdResult.apiResult.Result);
                var faceRectangle  = faceDetectJson[0]["faceRectangle"];
                appbody.EmotionBodies = new List <HwsFaceCores.Emotion>();
                foreach (var p in appbody.PersonInfos)
                {
                    appbody.EmotionBodies.Add(p.FaceAttributes.Emotion);
                }

                var fiResult = new HwsFaceCores.AppResult();
                var fi       = new Identification(FaceApiHttpClient, faceApiKey, facialHairConfidence);
                fiResult            = fi.IdentifyFace(buffer, appbody.PersonInfos, appbody.PersonGroupId);
                appbody.PersonInfos = fiResult.PersonInfos;
                if (fiResult.apiResult.IsSuccessStatusCode)
                {
                    var personInfoQueryResult = CreateOrUpdatePersonInfo(appbody);
                    if (personInfoQueryResult.apiResult.IsSuccessStatusCode)
                    {
                        appbody = personInfoQueryResult.appBody;
                        foreach (var info in appbody.PersonInfos)
                        {
                            CreatePersonFaceInfo(appbody, info);

                            var faceFileName = info.PersonId;
                        }
                    }
                    else
                    {
                        _rbh.ProcessingStack += " " + personInfoQueryResult.apiResult.Message;
                    }
                }
                else
                {
                    _rbh.ProcessingStack += " " + fiResult.apiResult.Message;
                }
            }
            else
            {
                RbMessage noFaceDetectError = new RbMessage();
                noFaceDetectError.RbBody   = JsonConvert.DeserializeObject <JObject>("{\"Code\": 404, \"Message\": \"画像に人の顔が含まれていません.\", \"PersonInfos\": [], \"EmotionBodies\": []}");
                _rbh.MessageId             = "Res" + _rbh.MessageId;
                noFaceDetectError.RbHeader = _rbh;
                return(noFaceDetectError);
            }

            return(GetRbMessage(_rbh, appbody));
        }
Example #2
0
        private RbMessage ResisterPersonFace(RbHeader _rbh, JObject _appInfo, JObject _rbBody)
        {
            var faceApiKey           = (_appInfo["FaceApiKey"] ?? "").ToString();
            var facialHairConfidence = (double)_appInfo["FacialHairConfidence"];

            var appbody = new AppBody();

            appbody.PersonName     = (_rbBody["PersonName"] ?? "").ToString();
            appbody.PersonNameYomi = (_rbBody["PersonNameYomi"] ?? "").ToString();
            appbody.PersonGroupId  = (_rbBody["PersonGroupId"] ?? "").ToString();
            appbody.PersonId       = (_rbBody["PersonId"] ?? "").ToString();

            var buffer = GetFaceImageData(_appInfo, _rbBody, appbody.PersonGroupId, _rbh);

            var faceDetection    = new Detection(FaceApiHttpClient, faceApiKey, 0.1);
            var faceDetectResult = faceDetection.DetectFace(buffer);

            if (faceDetectResult.apiResult.IsSuccessStatusCode)
            {
                appbody.PersonInfos = faceDetectResult.PersonInfos;
                var faceDetectJson = JsonConvert.DeserializeObject <JArray>(faceDetectResult.apiResult.Result);
                var faceRectangle  = faceDetectJson[0]["faceRectangle"];
                if (appbody.PersonId == "")
                {
                    var fiResult = new HwsFaceCores.AppResult();
                    var fi       = new Identification(FaceApiHttpClient, faceApiKey, facialHairConfidence);
                    fiResult            = fi.IdentifyFace(buffer, appbody.PersonInfos, appbody.PersonGroupId);
                    appbody.PersonInfos = fiResult.PersonInfos;
                    if (fiResult.apiResult.IsSuccessStatusCode)
                    {
                        if (appbody.PersonInfos.Count > 0)
                        {
                            RbMessage faceDuplicatedError = new RbMessage();
                            faceDuplicatedError.RbBody   = JsonConvert.DeserializeObject <JObject>("{\"Code\": 406, \"Message\": \"顔情報は登録済みです.\", \"PersonInfos\": [], \"EmotionBodies\": []}");
                            _rbh.MessageId               = "Res" + _rbh.MessageId;
                            faceDuplicatedError.RbHeader = _rbh;
                            return(faceDuplicatedError);
                        }
                    }

                    var facePerson         = new HwsMicrosoftFaceApi.Person.Client(faceApiKey);
                    var personCreateResult = facePerson.Create(appbody.PersonGroupId, appbody.PersonName);
                    if (personCreateResult.apiResult.IsSuccessStatusCode)
                    {
                        var result = (JObject)JsonConvert.DeserializeObject(personCreateResult.apiResult.Result);
                        appbody.PersonId = (result["personId"] ?? "").ToString();
                        appbody          = ResisterFace(_appInfo, appbody, buffer, faceRectangle);
                    }
                }
                else
                {
                    appbody = ResisterFace(_appInfo, appbody, buffer, faceRectangle);
                }
            }
            else
            {
                RbMessage noFaceDetectError = new RbMessage();
                noFaceDetectError.RbBody   = JsonConvert.DeserializeObject <JObject>("{\"Code\": 404, \"Message\": \"画像に人の顔が含まれていません.\", \"PersonInfos\": [], \"EmotionBodies\": []}");
                _rbh.MessageId             = "Res" + _rbh.MessageId;
                noFaceDetectError.RbHeader = _rbh;
                return(noFaceDetectError);
            }

            return(GetRbMessage(_rbh, appbody));
        }