/// <summary> /// 単数の顔の処理。 /// </summary> private async Task HandleSingleFaceAsync(string senderId, string replyToken, string filename, Face face, bool rememberMode = false) { // PersonGroupを確保 await _personService.EnsurePersonGroupAsync(senderId); // 検出された Face で Person を検索(RememberMode なら検索しない) Persons.Person person = null; if (!rememberMode) { person = await _personService.FindPersonByFaceAsync(senderId, face); } if (person == null) { // Person が見つからないか RememberMode なら 会話:この人(たち)は誰? に移動 var data = new JObject { ["Filename"] = filename, ["UnknownFaceIds"] = new JArray(new string[] { face.FaceId.ToString() }), ["UnknownFaceRectangles"] = new JArray(new string[] { $"{face.FaceRectangle.Left},{face.FaceRectangle.Top},{face.FaceRectangle.Width},{face.FaceRectangle.Height}" }), }; await StartConversationAsync(senderId, "/image/whoare/select", data); } else { // Person が見つかれば名前を発言して 会話:ルート に移動 await _lineMessagingService.ReplyTextMessageAsync(replyToken, $@"この人は {person.Name} だね!"); await StartConversationAsync(senderId, "/"); } }
public void Build() { var jerry = new Persons.Person("Jerry"); _context.People.Add(jerry); _context.SaveChanges(); _context.Tasks.AddRange( new Task("Flow the white rabbit", "Follow the white rabbit in order to know the reality.", jerry.Id), new Task("Clean your room") { State = Task.TaskState.Completed } ); }
/// <summary> /// 複数の顔の処理。 /// </summary> private async Task HandleMultipleFacesAsync(string senderId, string replyToken, string filename, Face[] faces, bool rememberMode = false) { // PersonGroup を準備 await _personService.EnsurePersonGroupAsync(senderId); Persons.Person[] knowns; // 分かった Person Face[] unknowns; // 分からなかった Face if (rememberMode) { // 全て分からないことにする knowns = new Persons.Person[0]; unknowns = faces; } else { // 検出された Face で Person を検索 var persons = await _personService.FindPersonByFacesAsync(senderId, faces); // 分かった Person と分からなかった Face を分類 knowns = persons.Where(person => person != null).ToArray(); unknowns = faces.Zip(persons, (face, person) => { return(new { Face = face, Person = person }); }) .Where(pair => pair.Person == null) .Select(pair => pair.Face) .ToArray(); } if (knowns.Length > 0) { // 分かった Person が一人以上いれば名前を発言 var text = string.Join("、", knowns.Select(person => person.Name)) + @"が写ってるね!"; if (faces.Length > 10) { // Face が 10 以上なら unknowns 処理をしない text += " 人数が多すぎてよく分からないよ!"; } else if (unknowns.Length > 0) { // 分からなかった Face があれば人数を発言 text += $@" でも他の{(faces.Length - knowns.Length)}人は知らないよ! 誰なのか教えて!"; } await _lineMessagingService.ReplyTextMessageAsync(replyToken, text); } else { await _lineMessagingService.ReplyTextMessageAsync(replyToken, @"誰も知らないよ! 誰なのか教えて!"); } if (unknowns.Length > 0) { // 分からなかった Face があれば 会話:この人たちは誰? に移動 var data = new JObject { ["Filename"] = filename, ["UnknownFaceIds"] = new JArray(unknowns.Select(unknown => unknown.FaceId.ToString())), ["UnknownFaceRectangles"] = new JArray(unknowns.Select(unknown => $"{unknown.FaceRectangle.Left},{unknown.FaceRectangle.Top},{unknown.FaceRectangle.Width},{unknown.FaceRectangle.Height}")), }; await StartConversationAsync(senderId, "/image/whoare/select", data); } else { // 分からなかった Face がなければ 会話:ルート に移動 await StartConversationAsync(senderId, "/"); } }