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)); }
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)); }