Exemple #1
0
def generateTwoTestAngleData():
    '''
    This creates a list of data samples to be tested.
    Theses samples are from participants 2 and 3 and
    the calculated angles are used as features.
    '''
    testSamples = []
    index = 0

    for filename in sub2:
        #Open the file
        fIn = open(filename, 'r')
        #For each line of the file calculate the
        # angles inbetween joints and use the resulting
        # array as the feature vector. Add that to the list.
        for line in fIn:
            features = generateAngles(line)
            testSamples.append(sample(features, labels[index]))
        fIn.close()
        index += 1

    index = 0
    for filename in sub3:
        #Open the file
        fIn = open(filename, 'r')
        #For each line of the file calculate the
        # angles inbetween joints and use the resulting
        # array as the feature vector. Add that to the list.
        for line in fIn:
            features = generateAngles(line)
            testSamples.append(sample(features, labels[index]))
        fIn.close()
        index += 1

    return testSamples
Exemple #2
0
def generateTwoAngleTrainingData():
    '''
    This function creates training data using the first
    two participants' data and has joint angles as features
    for the samples.
    '''

    trainingData = TrainingData("Testing Data")
    index = 0

    for i in xrange(len(labels)):
        #Open the file
        fIn = open(sub1[i], 'r')
        f2In = open(sub2[i], 'r')

        #For each line of the files calculate the
        # angles inbetween joints and use the resulting
        # array as the feature vector. Add that to the trainingData.
        for line in fIn:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        fIn.close()

        for line in f2In:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        f2In.close()

        index += 1

    return trainingData
Exemple #3
0
def generateTwoTestAngleData():
    '''
    This creates a list of data samples to be tested.
    Theses samples are from participants 2 and 3 and
    the calculated angles are used as features.
    '''
    testSamples = []
    index = 0

    for filename in sub2:
        #Open the file
        fIn = open(filename, 'r')
        #For each line of the file calculate the 
        # angles inbetween joints and use the resulting 
        # array as the feature vector. Add that to the list.
        for line in fIn:
            features = generateAngles(line)
            testSamples.append(sample(features, labels[index]))
        fIn.close()
        index += 1

    index = 0
    for filename in sub3:
        #Open the file
        fIn = open(filename, 'r')
        #For each line of the file calculate the 
        # angles inbetween joints and use the resulting 
        # array as the feature vector. Add that to the list.
        for line in fIn:
            features = generateAngles(line)
            testSamples.append(sample(features, labels[index]))
        fIn.close()
        index += 1

    return testSamples
Exemple #4
0
def generateTwoAngleTrainingData():
    '''
    This function creates training data using the first
    two participants' data and has joint angles as features
    for the samples.
    '''

    trainingData = TrainingData("Testing Data")
    index = 0

    for i in xrange(len(labels)):
        #Open the file
        fIn = open(sub1[i], 'r')
        f2In = open(sub2[i], 'r')

        #For each line of the files calculate the 
        # angles inbetween joints and use the resulting 
        # array as the feature vector. Add that to the trainingData.
        for line in fIn:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        fIn.close()

        for line in f2In:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        f2In.close()

        index += 1

    return trainingData
    def publishJointAngles(self):
        #Get a list of frames and turn it into a list of angles
        values = self.kinect.get_posture()
        angleString = jsonMaker((values,))
        angles = generateAngles(angleString)

        #Offset the angles appropriately

        index = 0
        stringNums = ""
        print len(angles)
        for val in angles:
            newValue = float(val) - self.offsets[index]
            #Adjust to keep values in safe joint angles
            if newValue > self.upper[index]:
                newValue = self.upper[index]
            if newValue < self.lower[index]:
                newValue = self.lower[index]

            #Filter the value
            newValue = (self.alpha * newValue) + ((1-self.alpha) * self.oldFilter[index])
            self.oldFilter[index] = newValue

            stringNums += str(newValue) + " "
            index += 1
        stringNums = stringNums[:-1]
        #Publish the angles
        service = rospy.ServiceProxy("setProperties", setProperties)
        service("REB LEB RSY LSY RSR LSR", "position position position position position position", stringNums)
        print stringNums
def generateAllAngleTrainingData():
    '''
    This function creates one large TrainingData object 
    containing data from all three participants but uses
    calculated angles as the features for each data sample.
    '''

    #Maybe TODO: Make this so it's easier to add lists of data. 
    trainingData = []
    trainingLabels = []
    index = 0

    for i in xrange(len(labels)):
        #Open the file
        fIn = open(sub1[i], 'r')
        f2In = open(sub2[i], 'r')
        f3In = open(sub3[i], 'r')

        #For each line of the files calculate the 
        # angles inbetween joints and use the resulting 
        # array as the feature vector. Add that to the trainingData.
        for line in fIn:
            features = generateAngles(line)
            trainingData.append(features)
            trainingLabels.append(labels[index])
        fIn.close()

        for line in f2In:
            features = generateAngles(line)
            trainingData.append(features)
            trainingLabels.append(labels[index])
        f2In.close()

        for line in f3In:
            features = generateAngles(line)
            trainingData.append(features)
            trainingLabels.append(labels[index])
        f3In.close()

        index += 1

    #Return the data object
    return trainingData, trainingLabels
Exemple #7
0
def generateAllAngleTrainingData():
    '''
    This function creates one large TrainingData object
    containing data from all three participants but uses
    calculated angles as the features for each data sample.
    '''
    trainingData = TrainingData("Testing Data")
    index = 0

    for i in xrange(len(labels)):
        #Open the file
        fIn = open(sub1[i], 'r')
        f2In = open(sub2[i], 'r')
        f3In = open(sub3[i], 'r')

        #For each line of the files calculate the
        # angles inbetween joints and use the resulting
        # array as the feature vector. Add that to the trainingData.
        for line in fIn:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        fIn.close()

        for line in f2In:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        f2In.close()

        for line in f3In:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        f3In.close()

        index += 1

    #Return the data object
    return trainingData
Exemple #8
0
def generateAllAngleTrainingData():
    '''
    This function creates one large TrainingData object 
    containing data from all three participants but uses
    calculated angles as the features for each data sample.
    '''
    trainingData = TrainingData("Testing Data")
    index = 0

    for i in xrange(len(labels)):
        #Open the file
        fIn = open(sub1[i], 'r')
        f2In = open(sub2[i], 'r')
        f3In = open(sub3[i], 'r')

        #For each line of the files calculate the 
        # angles inbetween joints and use the resulting 
        # array as the feature vector. Add that to the trainingData.
        for line in fIn:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        fIn.close()

        for line in f2In:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        f2In.close()

        for line in f3In:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        f3In.close()

        index += 1

    #Return the data object
    return trainingData
Exemple #9
0
def MainAngle():
    #run the simulation showing the angles that change
    global continuing
    signal.signal(signal.SIGINT, endDemo)
    kinect = Kinect()
    plotter = SkeletonPlotter()
    continuing = True
    while continuing:
        time.sleep(.05)
        value = kinect.get_posture()
        if value is None:
            continue
        jointString = jsonMaker((value, ))
        anglesList = generateAngles(jointString)
        plotter.showSkeletonAngles(jointString, anglesList, 'b')
Exemple #10
0
    def checkSlidingWindow(self, f):
        #Get a list of frames and turn it into a list of angles
        values = self.kinect.get_posture()
        if values is None:
            return None
        angleString = jsonMaker((values, ))
        angles = generateAngles(angleString)

        f.write(str(angles) + "\n")

        #Add the angle list to the list of angles in the sliding
        # window list. If the window if above capacity pop the oldest
        # set of angles.
        self.slidingWindow.append(angles)
        if len(self.slidingWindow) > self.capacity:
            self.slidingWindow.pop(0)

        #Let the window fill up before we start trying to classify
        if len(self.slidingWindow) != self.capacity:
            return angles
        #Get the average of the sliding window angles and run them
        # through the classifier
        avgAngles = self.getAvgAngles()

        #Classify the average angles
        result = classifySample(avgAngles)

        print "Result: " + str(result)

        if result is None:
            return angles

        result = result[0]

        if result == "Disco":
            stayAliveRobot(self.robot)
        elif result == "ChickenDance":
            chickenDanceRobot(self.robot)
        elif result == "WalkLikeAnEgyptian":
            walkLikeAnEgyptianRobot(self.robot)
        elif result == "YMCA":
            doTheYMCARobot(self.robot)

        #Reset the sliding window after a dance was recognized
        self.slidingWindow = []

        return angles
    def checkSlidingWindow(self, f):
        #Get a list of frames and turn it into a list of angles
        values = self.kinect.get_posture()
        if values is None:
            return None
        angleString = jsonMaker((values,))
        angles = generateAngles(angleString)

        f.write(str(angles) + "\n")

        #Add the angle list to the list of angles in the sliding 
        # window list. If the window if above capacity pop the oldest
        # set of angles.
        self.slidingWindow.append(angles)
        if len(self.slidingWindow) > self.capacity:
            self.slidingWindow.pop(0)

        #Let the window fill up before we start trying to classify
        if len(self.slidingWindow) != self.capacity:
            return angles
        #Get the average of the sliding window angles and run them
        # through the classifier
        avgAngles = self.getAvgAngles()

        #Classify the average angles
        result = classifySample(avgAngles)

        print "Result: " + str(result) 

        if result is None:
            return angles

        result = result[0]

        if result == "Disco":
            stayAliveRobot(self.robot)
        elif result == "ChickenDance":
            chickenDanceRobot(self.robot)
        elif result == "WalkLikeAnEgyptian":
            walkLikeAnEgyptianRobot(self.robot)
        elif result == "YMCA":
            doTheYMCARobot(self.robot)

        #Reset the sliding window after a dance was recognized
        self.slidingWindow = []

        return angles
Exemple #12
0
def generateOneTrainAngleData():
    '''
    This creates a data set to be used to train a classifier.
    The data is from participant 1 and uses the calculated
    joint angles as features.
    '''
    trainingData = TrainingData("Angle Data")
    index = 0

    for filename in sub1:
        #Open the file
        fIn = open(filename, 'r')
        #For each line of the file calculate the
        # angles inbetween joints and use the resulting
        # array as the feature vector. Add that to the trainingData.
        for line in fIn:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        fIn.close()
        index += 1

    return trainingData
    def recordJointAngles(self):

        #Get the values from the kinect
        values = self.kinect.get_posture()
        if values is None:
            #recursivly try again
            self.recordJointAngles()
            return None

        angleString = jsonMaker((values,))
        #Make them into angles
        angles = generateAngles(angleString)

        #Parse angles
        stringNums = ""
        for angle in angles:
            stringNums += str(angle) + " "

        stringNums = stringNums[:-1]

        #Write the angles to a file
        self.output.write("    robot.setProperties(\"REP LEP RSY LSY RSR LSR RSP LSP\", \"position position position position position position position position\", " + stringNums + ")")
Exemple #14
0
def generateOneTrainAngleData():
    '''
    This creates a data set to be used to train a classifier.
    The data is from participant 1 and uses the calculated
    joint angles as features.
    '''
    trainingData = TrainingData("Angle Data")
    index = 0

    for filename in sub1:
        #Open the file
        fIn = open(filename, 'r')
        #For each line of the file calculate the 
        # angles inbetween joints and use the resulting 
        # array as the feature vector. Add that to the trainingData.
        for line in fIn:
            features = generateAngles(line)
            trainingData.addSampleFromFeatures(features, labels[index])
        fIn.close()
        index += 1

    return trainingData
Exemple #15
0
def generateOneTestAngleData():
    '''
    This creates a list of sample objects that can 
    be used for testing. This list is built from the third 
    participant's data and uses angles as features.
    '''

    testSamples = []
    index = 0

    for filename in sub3:
        #Open the file
        fIn = open(filename, 'r')
        #For each line of the file calculate the 
        # angles inbetween joints and use the resulting 
        # array as the feature vector. Add that to the list.
        for line in fIn:
            features = generateAngles(line)
            testSamples.append(sample(features, labels[index]))
        fIn.close()
        index += 1

    return testSamples
Exemple #16
0
def generateOneTestAngleData():
    '''
    This creates a list of sample objects that can
    be used for testing. This list is built from the third
    participant's data and uses angles as features.
    '''

    testSamples = []
    index = 0

    for filename in sub3:
        #Open the file
        fIn = open(filename, 'r')
        #For each line of the file calculate the
        # angles inbetween joints and use the resulting
        # array as the feature vector. Add that to the list.
        for line in fIn:
            features = generateAngles(line)
            testSamples.append(sample(features, labels[index]))
        fIn.close()
        index += 1

    return testSamples
    def recordJointAngles(self):

        #Get the values from the kinect
        values = self.kinect.get_posture()
        if values is None:
            #recursivly try again
            self.recordJointAngles()
            return None

        angleString = jsonMaker((values, ))
        #Make them into angles
        angles = generateAngles(angleString)

        #Parse angles
        stringNums = ""
        for angle in angles:
            stringNums += str(angle) + " "

        stringNums = stringNums[:-1]

        #Write the angles to a file
        self.output.write(
            "    robot.setProperties(\"REP LEP RSY LSY RSR LSR RSP LSP\", \"position position position position position position position position\", "
            + stringNums + ")")