コード例 #1
0
ファイル: Program.cs プロジェクト: Kawaian/OpenPoseSharp
        public LandmarkResult Detect(IntPtr mat, Rect leftRect, Rect rightRect)
        {
            var e      = Extractor;
            var leftR  = new Rectangle((int)leftRect.X, (int)leftRect.Y, (int)leftRect.Width, (int)leftRect.Height);
            var rightR = new Rectangle((int)rightRect.X, (int)rightRect.Y, (int)rightRect.Width, (int)rightRect.Height);

            e.forwardPass(new FloatRectangle2ArrayList(new[] { new FloatRectangle2Array(new[] { leftR, rightR }) }), new SWIGTYPE_p_cv__Mat(mat, true));
            var fetch = e.getHandKeypoints();

            var left  = new List <LandmarkPoint>();
            var right = new List <LandmarkPoint>();

            for (int f = 0; f < 2; f += 1)
            {
                var    result = fetch[f];
                var    str = result.toString();
                var    parsed = ParseText(str);
                double ptX = 0, ptY = 0;
                for (int i = 0; i < parsed.Length; i++)
                {
                    switch (i % 3)
                    {
                    case 0:
                        ptX = parsed[i];
                        break;

                    case 1:
                        ptY = parsed[i];
                        break;

                    case 2:
                        var prob = parsed[i];
                        if (f == 0)
                        {
                            left.Add(new LandmarkPoint()
                            {
                                Prob = prob, X = ptX, Y = ptY
                            });
                        }
                        else
                        {
                            right.Add(new LandmarkPoint()
                            {
                                Prob = prob, X = ptX, Y = ptY
                            });
                        }
                        break;
                    }
                }
            }

            var ret = new LandmarkResult()
            {
                LeftHand  = left.ToArray(),
                RightHand = right.ToArray()
            };

            return(ret);
        }
コード例 #2
0
        public async Task <AggregatedResult> Process(byte[] imgData)
        {
            // preprocess
            // todo: create screening image classifier to get a rough category, then decide call which service

            // task dispatcher: parallelized run 'Do'
            // todo: put this logic into Dispatcher service
            List <Task> listTask = new List <Task>();

            var taskLandmark = this.landmarkService.Do(imgData);

            listTask.Add(taskLandmark);
            var taskCelebrity = this.celebrityService.Do(imgData);

            listTask.Add(taskCelebrity);
            await Task.WhenAll(listTask);

            LandmarkResult  lmResult = taskLandmark.Result;
            CelebrityResult cbResult = taskCelebrity.Result;

            // aggregator
            // todo: put this logic into Aggregator service
            AggregatedResult ar = new AggregatedResult()
            {
                Landmark  = lmResult,
                Celebrity = cbResult
            };

            return(ar);


            // ranker
            // todo: if there have more than one result in AgregatedResult, need give them a ranking

            // output generator
            // todo: generate specified JSON data, such as Adptive Card
        }