示例#1
0
def additionalEdit(motion, path):
    if 'wd2_left_turn.bvh' in path or 'wd2_right_turn.bvh' in path:
        lFoot = motion[0].skeleton.getJointIndex('LeftFoot')
        yte.setPositionTarget(motion, lFoot, motion[0].getJointPositionGlobal(lFoot)+(-.1,0,-.1)\
                              , [0,58], 150)

    if 'extended' in path:
        hRef = .15
        vRef = .2
        lc = yma.getElementContactStates(motion, 'LeftFoot', hRef, vRef)
        interval = yba.getWalkingCycle(motion, lc)
        motion[:] = ymt.repeatCycle(motion, interval, 50, 10)
示例#2
0
def preprocess(SEGMENT_FOOT=False):
    tasks = []

    outputDir = './ppmotion/'

    dir = '../Data/woody2/Motion/Physics2/'
    config = None
    if SEGMENT_FOOT:
        # segmented foot
        config = {
            'repeat': True,
            'footRot': mm.rotX(.07),
            'yOffset': 0.,
            'halfFootHeight': 0.0944444444444,
            'scale': .01,
            'type': 'woody2'
        }
    else:
        # box foot
        config = {
            'repeat': True,
            'footRot': mm.rotX(-.4),
            'yOffset': 0.,
            'halfFootHeight': 0.0444444444444,
            'scale': .01,
            'type': 'woody2'
        }

    paths = []
    paths.append(dir + 'wd2_WalkSameSame01.bvh')
    paths.append(dir + 'wd2_WalkForwardSlow01.bvh')
    paths.append(dir + 'wd2_WalkForwardNormal00.bvh')
    paths.append(dir + 'wd2_WalkHandWav00.bvh')
    paths.append(dir + 'wd2_WalkForwardFast00.bvh')
    paths.append(dir + 'wd2_WalkForwardVFast00.bvh')
    paths.append(dir + 'wd2_WalkLean00.bvh')
    paths.append(dir + 'wd2_WalkAzuma01.bvh')
    paths.append(dir + 'wd2_WalkSoldier00.bvh')
    paths.append(dir + 'wd2_WalkSukiko00.bvh')
    #     paths.append(dir+'wd2_WalkBackward00.bvh')
    paths.append(dir + 'wd2_WalkTongTong00.bvh')
    tasks.append({'config': config, 'paths': paths})
    ##
    #    dir = '../Data/woody2/Motion/Balancing/'
    #    config = {'footRot': mm.exp(mm.v3(1,-.5,0), -.6), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01, 'type':'woody2'}
    #    paths = []
    #    paths.append(dir+'wd2_2foot_walk_turn.bvh')
    #    paths.append(dir+'wd2_2foot_walk_turn2.bvh')
    #    paths.append(dir+'wd2_slow_2foot_hop.bvh')
    #    paths.append(dir+'wd2_short_broad_jump.bvh')
    #    paths.append(dir+'wd2_long_broad_jump.bvh')
    #    paths.append(dir+'wd2_ffast_cancan_run.bvh')
    #    paths.append(dir+'wd2_fast_cancan_run.bvh')
    #    paths.append(dir+'wd2_fast_2foot_hop.bvh')
    #    paths.append(dir+'wd2_1foot_contact_run.bvh')
    #    paths.append(dir+'wd2_1foot_contact_run2.bvh')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    ##    dir = '../Data/woody2/Motion/Samsung/'
    ##    config = {'footRot': mm.rotX(-.46), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'}
    ##    paths = []
    ##    paths.append(dir+'wd2_left_turn.bvh')
    ##    paths.append(dir+'wd2_right_turn.bvh')
    ##    paths.append(dir+'wd2_pose_inner1.bvh')
    ##    paths.append(dir+'wd2_pose_inner2.bvh')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    #    dir = '../Data/woody2/Motion/Picking/'
    #    config = {'footRot': mm.rotX(-.5), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01, 'type':'woody2'}
    #    paths = []
    #    paths.append(dir+'wd2_pick_walk_1.bvh')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    #    dir = '../Data/woody2/Motion/VideoMotion/'
    #    config = {'footRot': mm.rotX(-.48), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'}
    ##    paths = glob.glob(dir+'*.bvh')
    #    paths = []
    #    paths.append(dir+'wd2_cross_walk_90d_fast_27.bvh')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    #    dir = '../Data/woody2/Motion/Walking/'
    #    config = {'footRot': mm.rotX(-.40), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'}
    #    paths = glob.glob(dir+'*.bvh')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    ##    dir = '../Data/woody2/Motion/samsung_boxing/round/'
    ##    config = {'footRot': mm.rotX(-.65), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'}
    ##    paths = glob.glob(dir+'*.bvh')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    ##    dir = '../Data/woody2/Motion/samsung_boxing/boxman/'
    ##    config = {'footRot': mm.rotX(-.5), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'}
    ##    paths = glob.glob(dir+'*.bvh')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    #    dir = '../Data/woody2/Motion/motion_edit/'
    #    config = {'footRot': mm.rotX(-.5), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':.01*2.54, 'type':'woody2amc'}
    #    paths = glob.glob(dir+'*.bvh')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    ##    outputDir = './icmotion_test/'
    ##    dir = './rawmotion/'
    ##    config = {'footRot': mm.rotX(-.5), 'yOffset': .0, 'halfFootHeight': 0.0444444444444, 'scale':1., 'type':'woody2_new'}
    ##    paths = glob.glob(dir+'*.temp')
    ##    tasks.append({'config':config, 'paths':paths})
    #
    #    outputDir = './icmotion_last/'
    #    dir = './lastmotion/add/'
    ##    config = {'rootRot':mm.rotZ(.05), 'footRot': mm.rotX(-.5), 'leftFootR':mm.rotZ(-.1), \
    #    config = {'rootRot':mm.rotZ(.0), 'footRot': np.dot(mm.rotX(-.5), mm.rotZ(.04)), 'leftFootR':mm.rotZ(-.2), \
    #              'halfFootHeight': 0.0444444444444, 'scale':1., 'type':'woody2_new'}
    #    paths = glob.glob(dir+'*.temp')
    #    tasks.append({'config':config, 'paths':paths})

    #    outputDir = './ppmotion_slope/'
    #    dir = './rawmotion_slope_extracted/'
    #    config = {'rootRot':mm.rotZ(.0), 'footRot': np.dot(mm.rotX(-.55), mm.rotZ(.04)), 'leftFootR':mm.rotZ(-.2), \
    #              'halfFootHeight': 0.0444444444444, 'scale':1., 'type':'woody2_new'}
    #    paths = glob.glob(dir+'*.bvh')
    #    tasks.append({'config':config, 'paths':paths})

    VISUALIZE = False

    for task in tasks:
        config = task['config']
        paths = task['paths']
        for path in paths:
            motion = yf.readBvhFile(path)
            normalizeSkeleton(motion, config)
            adjustHeight(motion, config['halfFootHeight'])
            additionalEdit(motion, path)

            outputPath = outputDir + os.path.basename(path)
            if SEGMENT_FOOT:
                outputPath = outputDir + "segfoot_" + os.path.basename(path)
            yf.writeBvhFile(outputPath, motion)
            print(outputPath, 'done')

            if 'repeat' in config and config['repeat']:
                hRef = .1
                vRef = .3
                lc = yma.getElementContactStates(motion, 'LeftFoot', hRef,
                                                 vRef)
                interval = yba.getWalkingCycle2(motion, lc)

                transitionLength = 20 if 'wd2_WalkAzuma01.bvh' in path else 10
                motion = ymt.repeatCycle(motion, interval, 50,
                                         transitionLength)

                outputName = os.path.splitext(
                    os.path.basename(path))[0] + '_REPEATED.bvh'
                outputPath = outputDir + outputName
                if SEGMENT_FOOT:
                    outputPath = outputDir + 'segfoot_' + outputName
                yf.writeBvhFile(outputPath, motion)
                print(outputPath, 'done')

            if VISUALIZE:
                viewer = ysv.SimpleViewer()
                viewer.record(False)
                viewer.doc.addRenderer(
                    'motion',
                    yr.JointMotionRenderer(motion, (0, 100, 255),
                                           yr.LINK_LINE))
                viewer.doc.addObject('motion', motion)

                viewer.startTimer(1 / 30.)
                viewer.show()
                Fl.run()

    print('FINISHED')
示例#3
0
def preprocess(SEGMENT_FOOT=False):
    tasks = []

    outputDir = './ppmotion/'
    if SEGMENT_FOOT:
        outputDir = './ppmotion_segfoot/'

    dir = './ori_motion/'
    config = None
    if SEGMENT_FOOT:
        # segmented foot
        # config = {'repeat':False, 'footRot': mm.rotX(.07), 'yOffset':0., 'halfFootHeight': 0.0944444444444, 'scale':.01, 'type':'woody2'}
        config = {
            'repeat': False,
            'footRot': mm.rotX(-.07),
            'yOffset': 0.,
            'halfFootHeight': 0.0944444444444,
            'scale': .01,
            'type': 'woody2'
        }
    else:
        # box foot
        config = {
            'repeat': False,
            'footRot': mm.rotX(-.4),
            'yOffset': 0.,
            'halfFootHeight': 0.0444444444444,
            'scale': .01,
            'type': 'woody2'
        }

    paths = []

    # rotX = -0.07
    paths.append(dir + 'wd2_1foot_contact_run2_edit.bvh')
    paths.append(dir + 'wd2_fast_2foot_hop_edit.bvh')
    paths.append(dir + 'wd2_long_broad_jump_edit.bvh')
    paths.append(dir + 'wd2_n_kick_edit.bvh')
    paths.append(dir + 'wd2_short_broad_jump_edit.bvh')
    paths.append(dir + 'wd2_slow_2foot_hop_edit.bvh')
    # rotX = 0.07
    # paths.append(dir+'wd2_boxing_round_round_girl1_edit.bvh')
    # paths.append(dir+'wd2_u-turn_edit.bvh')
    tasks.append({'config': config, 'paths': paths})

    VISUALIZE = False

    for task in tasks:
        config = task['config']
        paths = task['paths']
        for path in paths:
            motion = yf.readBvhFile(path)
            normalizeSkeleton(motion, config)
            adjustHeight(motion, config['halfFootHeight'])
            additionalEdit(motion, path)

            outputPath = outputDir + os.path.basename(path)
            if SEGMENT_FOOT:
                outputPath = outputDir + "segfoot_" + os.path.basename(path)
            yf.writeBvhFile(outputPath, motion)
            print(outputPath, 'done')

            if 'repeat' in config and config['repeat']:
                hRef = .1
                vRef = .3
                lc = yma.getElementContactStates(motion, 'LeftFoot', hRef,
                                                 vRef)
                interval = yba.getWalkingCycle2(motion, lc)

                transitionLength = 20 if 'wd2_WalkAzuma01.bvh' in path else 10
                motion = ymt.repeatCycle(motion, interval, 50,
                                         transitionLength)

                outputName = os.path.splitext(
                    os.path.basename(path))[0] + '_REPEATED.bvh'
                outputPath = outputDir + outputName
                if SEGMENT_FOOT:
                    outputPath = outputDir + 'segfoot_' + outputName
                yf.writeBvhFile(outputPath, motion)
                print(outputPath, 'done')

            if VISUALIZE:
                viewer = ysv.SimpleViewer()
                viewer.record(False)
                viewer.doc.addRenderer(
                    'motion',
                    yr.JointMotionRenderer(motion, (0, 100, 255),
                                           yr.LINK_LINE))
                viewer.doc.addObject('motion', motion)

                viewer.startTimer(1 / 30.)
                viewer.show()
                Fl.run()

    print('FINISHED')