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