示例#1
0
        /// <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, "/");
            }
        }
示例#2
0
        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
            }
                );
        }
示例#3
0
        /// <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, "/");
            }
        }