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