private void deal(params ActionData[] actions)
        {
            try
            {
                if (actions.Length < 2)
                {
                    return;
                }
                for (int i = 1; i < actions.Length; i++)
                {
                    double[,] similarityMatrix = ActionMatchingUtil.computeSimilarityMatrix(actions[0], actions[i]);
                    DTWResult     dtwResult = DTWUtil.DTW(similarityMatrix);
                    StringBuilder sb        = new StringBuilder();
                    sb.Append("result:\n");
                    sb.Append("Similarity:").Append(dtwResult.SumSimilarity).Append(", AvgSimilarity:").Append(dtwResult.AvgSimilarity).Append(", PathLength:").Append(dtwResult.PathLength).Append('\n');
                    sb.Append(dtwResult.PathStr);

                    LogUtil.log(sb.ToString());
                }
            }
            catch (Exception e)
            {
                LogUtil.log(e.Message);
            }
        }
        private void match()
        {
            ActionData action1 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517659759365/", 55, 113);
            ActionData action2 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517659759365/", 69, 107);
            ActionData action3 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517659759365/", 140, 181);
            ActionData action4 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517659759365/", 211, 278);
            ActionData action5 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517659759365/", 695, 734);
            ActionData action6 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517658799185/", 70, 115);
            ActionData action7 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517659759365/", 103, 132);

            deal(action1, action2, action3, action4, action5, action6, action7);
        }
示例#3
0
        public static MyActionTraining createActionTraining()
        {
            ActionData action1 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517659759365/", 69, 107);
            ActionData action2 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517658799185/", 70, 115);
            ActionData action3 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517659205489/", 190, 270);
            ActionData action4 = ActionMatchingUtil.loadActionDataFromFile(Constant.BASE_PATH + "/ActionData/1517658315751/", 240, 280);


            MyActionTraining training = new MyActionTraining();

            training.addActions(action1, action2, action3, action4);

            return(training);
        }
示例#4
0
        public bool onData(double[][] vectorData, Action <int> action)
        {
            Posture.Posture currentPosture = new Posture.Posture(Posture.PostureType.Both, vectorData);
            if (!preStart)
            {
                if (Posture.PostureRecognition.matches(currentPosture, startPosture))
                {
                    vectorList.AddLast(vectorData);
                    preStart   = true;
                    prePosture = currentPosture;

                    LogUtil.log("动作预开始");
                }
                return(false);
            }

            if (!start && !Posture.PostureRecognition.matches(currentPosture, startPosture))
            {
                start = true;
                action(1);
                LogUtil.log("动作开始");
            }

            if (!start)
            {
                return(false);
            }

            vectorList.AddLast(vectorData);

            if (Posture.PostureRecognition.matches(currentPosture, prePosture))
            {
                matchCount++;
            }
            else
            {
                matchCount = 0;
                prePosture = currentPosture;
            }


            if (matchCount > 15)
            {
                LogUtil.log("动作结束");

                int length             = vectorList.Count - 15;
                List <double[][]> data = new List <double[][]>(length);

                int i = 0;
                foreach (double[][] v in vectorList)
                {
                    if (i++ == length)
                    {
                        break;
                    }
                    data.Add(v);
                }

                ActionData acData = ActionMatchingUtil.loadActionData(data);


                LogUtil.log(actionData.dataList.Count + "," + acData.dataList.Count);
                bool result = ActionMatchingUtil.match(actionData, acData);
                init(actionData);
                action(0);
                return(result);
            }

            return(false);
        }