예제 #1
0
    def __init__(self, category, appFacsAnim):
        gui3d.TaskView.__init__(self, category, 'FACSvatar')
        self.facs_human = appFacsAnim.selectedHuman
        self.app = appFacsAnim
        ##########################################################################
        # .json Au's list loading
        ##########################################################################

        self.facs_code_names_path = getpath.getDataPath('FACSHuman')
        self.facs_code_names_file = self.facs_code_names_path + '/au.json'
        self.facs_code_names = json.loads(
            open(self.facs_code_names_file).read())

        box_facsvatar = self.addLeftWidget(gui.GroupBox('FACSvatar listener'))
        #Box Midi
        self.facsvatar_start_stop = box_facsvatar.addWidget(
            gui.CheckBox('Start FACSvatar'))
        self.facsvatar_label = box_facsvatar.addWidget(
            gui.TextView('Listening STOPPED'))
        #self.facsvatar_render = box_facsvatar.addWidget(gui.CheckBox('Render video'))

        self.facs_modifiers = []
        self.facs_modifiers = G.app.selectedHuman.getModifiersByGroup(
            'Upper Face AUs')
        self.facs_modifiers.extend(
            G.app.selectedHuman.getModifiersByGroup('Lower Face AUs'))
        self.facs_modifiers.extend(
            G.app.selectedHuman.getModifiersByGroup('Head Positions'))
        self.facs_modifiers.extend(
            G.app.selectedHuman.getModifiersByGroup('Eye Positions'))
        self.facs_modifiers.extend(
            G.app.selectedHuman.getModifiersByGroup(
                'Lip Parting and Jaw Opening'))
        self.facs_modifiers.extend(
            G.app.selectedHuman.getModifiersByGroup('Miscellaneous AUs'))
        self.facs_modifiers.extend(
            G.app.selectedHuman.getModifiersByGroup('Emotions Blender'))

        self.modifiers_sliders = {}

        for mod in self.facs_modifiers:
            self.modifiers_sliders[mod.name] = modifierslider.ModifierSlider(
                modifier=mod, label=mod.name)
            #self.aus_list_items.addItem(self.facs_code_names[str(mod.name)], 'black', mod.name,  False)

# Midi Thread creation
        self.facsvatar_listener = FacsvatarThread(self.modifiers_sliders,
                                                  self.renderFacsPicture)

        @self.facsvatar_start_stop.mhEvent
        def onClicked(event):
            if self.facsvatar_start_stop.selected:
                self.facsvatar_label.setText('START')
                #self.facsvatar_listener.slider_assign(self.animation_test)
                #self.facsvatar_listener.text_box_assign(self.midi_msg_received)
                self.facsvatar_listener.start()
            else:
                self.facsvatar_label.setText('STOP')
                self.facsvatar_listener.stopListening()
예제 #2
0
    def createTargetControls(self, box, targetFile):
        # When the slider is dragged and released, an onChange event is fired
        # By default a slider goes from 0.0 to 1.0, and the initial position will be 0.0 unless specified

        targetFile = os.path.relpath(targetFile, self.targetsPath)

        modifier = humanmodifier.SimpleModifier('custom', self.targetsPath, targetFile)
        modifier.setHuman(self.human)
        self.modifiers[modifier.fullName] = modifier

        label = modifier.name.replace('-',' ').capitalize()
        self.sliders.append(box.addWidget(modifierslider.ModifierSlider(modifier=modifier, label=label)))
예제 #3
0
 def onClicked(event):
     #img=cv2.imread('/home/smith/PycharmProjects/AutoMakeHuman/src/7_auto_human_body/data/MyAutoData/picture.png')
     #cv2.imshow("img", img)
     #cv2.waitKey(0)
     slider = self.sliders[0]
     slider.modifier.setValue(1)
     sli = modifierslider.ModifierSlider(slider.modifier)
     value = slider.modifier.getValue()
     valuesli = sli.getValue()
     # sli.onChanging(slider.modifier.getValue())
     action = humanmodifier.ModifierAction(slider.modifier, value,
                                           valuesli, sli.update)
     G.app.do(action)
예제 #4
0
    def createTargetControls(self, box, targetPath, targetFile):
        # When the slider is dragged and released, an onChange event is fired
        # By default a slider goes from 0.0 to 1.0, and the initial position will be 0.0 unless specified

        # We want the slider to start from the middle
        targetName = os.path.splitext(targetFile)[0]

        modifier = humanmodifier.SimpleModifier(
            'custom', os.path.join(targetPath, targetFile))
        modifier.setHuman(gui3d.app.selectedHuman)
        self.modifiers[targetName] = modifier
        self.sliders.append(
            box.addWidget(
                modifierslider.ModifierSlider(value=0,
                                              label=targetName,
                                              modifier=modifier)))
예제 #5
0
def loadModifierTaskViews(filename, human, category, taskviewClass=None):
    """
    Create modifier task views from modifiersliders defined in slider definition
    file.
    """
    import json

    if not taskviewClass:
        taskviewClass = ModifierTaskView

    data = json.load(open(filename, 'r', encoding='utf-8'),
                     object_pairs_hook=OrderedDict)
    taskViews = []
    # Create task views
    for taskName, taskViewProps in data.items():
        sName = taskViewProps.get('saveName', None)
        label = taskViewProps.get('label', None)
        taskView = taskviewClass(category, taskName, label, sName)
        taskView.sortOrder = taskViewProps.get('sortOrder', None)
        taskView.showMacroStats = taskViewProps.get('showMacroStats', None)
        category.addTask(taskView)

        # Create sliders
        for sliderCategory, sliderDefs in taskViewProps['modifiers'].items():
            for sDef in sliderDefs:
                modifierName = sDef['mod']
                modifier = human.getModifier(modifierName)
                label = sDef.get('label', None)
                camFunc = _getCamFunc(sDef.get('cam', None))
                tooltip = None
                if len(modifier.description) > 0:
                    tooltip = modifier.description
                slider = modifierslider.ModifierSlider(modifier,
                                                       label=label,
                                                       cameraView=camFunc,
                                                       tooltip=tooltip)
                enabledCondition = sDef.get("enabledCondition", None)
                taskView.addSlider(sliderCategory, slider, enabledCondition)

        if taskView.saveName is not None:
            gui3d.app.addLoadHandler(taskView.saveName, taskView.loadHandler)
            gui3d.app.addSaveHandler(taskView.saveHandler)

        taskViews.append(taskView)

    return taskViews
 def createTargetControls(self, box, targetFile, facsTargetFolder, boxName):
     targetFile = os.path.relpath(targetFile, facsTargetFolder)
     facs_modifier = humanmodifier.SimpleModifier(boxName, facsTargetFolder,
                                                  targetFile)
     facs_modifier.setHuman(self.facs_human)
     self.label_create = str(facs_modifier.name)
     self.labelSlider[self.label_create] = box.addWidget(
         gui.TextView("Intensity: 0%"))
     self.slidersValues[self.label_create] = 0
     self.sliders[self.label_create] = box.addWidget(
         modifierslider.ModifierSlider(
             modifier=facs_modifier,
             label=self.facs_code_names[self.label_create]))
     # Create object for mhEvent on sliders to catch values and update labeltxt
     FACSslider(self.sliders[self.label_create],
                self.labelSlider[self.label_create], self.slidersValues,
                self.label_create)
예제 #7
0
        def onClicked(event):
            log.message('start...')
            for slider in self.sliders:
                for valuenum in range(0, 105, 5):
                    valuenums = valuenum / 100.000000
                    slider.update()
                    # log.message(slider.modifier.getValue())
                    # if slider.enabledCondition:
                    # log.message(slider)
                    slider.modifier.setValue(valuenums)
                    # log.message(slider.modifier.getValue())
                    sli = modifierslider.ModifierSlider(slider.modifier)
                    value = slider.modifier.getValue()
                    valuesli = sli.getValue()
                    # sli.onChanging(slider.modifier.getValue())
                    action = humanmodifier.ModifierAction(slider.modifier, value, valuesli, sli.update)
                    log.message(str(valuesli))
                    log.message(str(value))
                    if valuesli != value:
                        G.app.do(action)
                    else:
                        action.do()

                    filenameImage = fileAotupicture + '/' + str(time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
                    filenameIma = fileAotupicture + '/' + str(time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
                    filenameIma1 = fileAotupicture + '/result' + str(time.strftime("%Y-%m-%d_%H.%M.%S")), '.png'
                    width = G.windowWidth;
                    height = G.windowHeight;
                    width1 = width - 3;
                    height1 = height - 3;
                    # log.message(filenameImage)
                    mh.grabScreen(0, 0, width, height, filenameImage)
                    img = cv2.imread(filenameImage)
                    height1, width1 = img.shape[:2]
                    # print height,width
                    for i in range(height1):
                        for j in range(width1):
                            r, b, g = img[i][j]
                            rb = abs(r - b)
                            rg = abs(r - g)
                            bg = abs(b - g)
                            if rb < 10 and rg < 10 and bg < 10:
                                img[i][j] = [0, 0, 0]
                            else:
                                img[i][j] = [255, 255, 255]

                    imsave = normalize.Normalize(img)
                    cv2.imwrite(filenameIma, imsave)
                    # cv2.imshow("img",imsave)
                    # cv2.waitKey(10)
                    delt = onpicture()
                    log.message(str(delt))
                    if delt <= deltvalue[0]:
                        deltvalue[0] = delt
                        deltva[0] = valuenums

                num = deltva[0] * 20 + 1
                result = cv2.imread(fileResult + str(num) + '.png')
                cv2.imshow("Result", result)
                cv2.waitKey(0)
                log.message(deltvalue)
                log.message(num)

            slider.modifier.setValue(valuenums)
            # log.message(slider.modifier.getValue())
            sli = modifierslider.ModifierSlider(slider.modifier)
            value = slider.modifier.getValue()
            valuesli = sli.getValue()
            # sli.onChanging(slider.modifier.getValue())
            action = humanmodifier.ModifierAction(slider.modifier, value, valuesli, sli.update)
            G.app.do(action)
            mh.grabScreen(0, 0, width, height, filenameImage)
            imgw = cv2.imread(filenameImage)
            height1, width1 = imgw.shape[:2]
            # print height,width
            for i in range(height1):
                for j in range(width1):
                    r, b, g = imgw[i][j]
                    rb = abs(r - b)
                    rg = abs(r - g)
                    bg = abs(b - g)
                    if rb < 10 and rg < 10 and bg < 10:
                        imgw[i][j] = [0, 0, 0]
                    else:
                        imgw[i][j] = [255, 255, 255]

            imsavew = normalize.Normalize(imgw)
            cv2.imwrite(filenameIma1, imsavew)
예제 #8
0
 def worker(sliders, stopSearch):
     log.message('start...')
     for slider in sliders:
         if (stopSearch):
             stopSearch = False
             break
         value = 0
         for valuenum in range(0, 101, 1):
             if (stopSearch):
                 stopSearch = False
                 break
             valuenums = valuenum / 100.000000
             slider.update()
             slider.modifier.setValue(valuenums)
             log.message('slider modifiy value:' + str(valuenums))
             sli = modifierslider.ModifierSlider(slider.modifier)
             # value = slider.modifier.getValue()
             valuesli = sli.getValue()
             # #sli.onChanging(slider.modifier.getValue())
             action = humanmodifier.ModifierAction(
                 slider.modifier, value, valuesli, sli.update)
             log.message('before value:' + str(value))
             # 以下更新场景代码均无效
             if valuesli != value:
                 G.app.do(action)
             else:
                 action.do()
             #gui3d.app.do(action)
             #G.app.do(action)
             #G.app.redraw()
             log.message('update views')
             value = valuesli
             filenameImage = fileAotupicture + '/' + str(
                 time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
             filenameIma = fileAotupicture + '/' + str(
                 time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
             filenameIma1 = fileAotupicture + '/result' + str(
                 time.strftime("%Y-%m-%d_%H.%M.%S")), '.png'
             width = G.windowWidth
             height = G.windowHeight
             width1 = width - 3
             height1 = height - 3
             log.message('grab screen')
             mh.grabScreen(0, 0, width, height, filenameImage)
             img = cv2.imread(filenameImage)
             height1, width1 = img.shape[:2]
             # print height,width
             for i in range(height1):
                 for j in range(width1):
                     r, b, g = img[i][j]
                     rb = abs(r - b)
                     rg = abs(r - g)
                     bg = abs(b - g)
                     if rb < 10 and rg < 10 and bg < 10:
                         img[i][j] = [0, 0, 0]
                     else:
                         img[i][j] = [255, 255, 255]
             imsave = normalize.Normalize(img)
             log.message('show normalize image')
             try:
                 log.message('cv2 start')
                 cv2.imwrite(filenameIma, imsave)
                 # log.message('cv2 imwrite:'+filenameIma)
                 # newimg=cv2.imread(filenameIma)
                 # log.message('cv2 imread')
                 # cv2.imshow("img", imsave)
                 # log.message('cv2 imshow')
                 ## 60与电脑的刷新频率有关,如果<60刷新频率跟不上,则不会显示图像
                 # cv2.waitKey(60)
                 # cv2.destroyAllWindows()
                 # delt = onpicture()
                 imnew = cv2.imread(filepicture)
                 delt = findcontours.GetDeltValue(imsave, imnew)
                 log.message('delt value:' + str(delt))
                 if delt <= deltvalue[0]:
                     deltvalue[0] = delt
                     deltva[0] = valuenums
             except Exception, e:
                 log.message(e)
         num = deltva[0] * 20 + 1
         # result = cv2.imread(fileResult + str(num) + '.png')
         # cv2.imshow("Result", result)
         # cv2.waitKey(0)
         log.message(deltvalue)
         log.message(num)
예제 #9
0
    def __init__(self,
                 category,
                 name,
                 label=None,
                 saveName=None,
                 cameraView=None):
        if label is None:
            label = name.capitalize()
        if saveName is None:
            saveName = name

        super(Modifier1TaskView, self).__init__(category, name, label=label)

        self.saveName = saveName
        self.cameraFunc = _getCamFunc(cameraView)

        self.groupBoxes = OrderedDict()
        self.radioButtons = []
        self.sliders = []
        self.modifiers = {}

        self.categoryBox = self.addRightWidget(gui.GroupBox('Category'))
        self.groupBox = self.addLeftWidget(gui.StackedBox())

        self.showMacroStats = False
        self.human = gui3d.app.selectedHuman
        a = [0]
        deltvalue = [100]
        deltva = [0]
        box = self.addLeftWidget(gui.GroupBox(u'体型自动化'))
        self.aButton = box.addWidget(gui.Button(u'体型搜索'))
        self.bButton = box.addWidget(gui.Button(u'Test'))

        @self.bButton.mhEvent
        def onClicked(event):
            #img=cv2.imread('/home/smith/PycharmProjects/AutoMakeHuman/src/7_auto_human_body/data/MyAutoData/picture.png')
            #cv2.imshow("img", img)
            #cv2.waitKey(0)
            slider = self.sliders[0]
            slider.modifier.setValue(1)
            sli = modifierslider.ModifierSlider(slider.modifier)
            value = slider.modifier.getValue()
            valuesli = sli.getValue()
            # sli.onChanging(slider.modifier.getValue())
            action = humanmodifier.ModifierAction(slider.modifier, value,
                                                  valuesli, sli.update)
            G.app.do(action)

        def worker(sliders, stopSearch):
            log.message('start...')
            for slider in sliders:
                if (stopSearch):
                    stopSearch = False
                    break
                value = 0
                for valuenum in range(0, 101, 1):
                    if (stopSearch):
                        stopSearch = False
                        break
                    valuenums = valuenum / 100.000000
                    slider.update()
                    slider.modifier.setValue(valuenums)
                    log.message('slider modifiy value:' + str(valuenums))
                    sli = modifierslider.ModifierSlider(slider.modifier)
                    # value = slider.modifier.getValue()
                    valuesli = sli.getValue()
                    # #sli.onChanging(slider.modifier.getValue())
                    action = humanmodifier.ModifierAction(
                        slider.modifier, value, valuesli, sli.update)
                    log.message('before value:' + str(value))
                    # 以下更新场景代码均无效
                    if valuesli != value:
                        G.app.do(action)
                    else:
                        action.do()
                    #gui3d.app.do(action)
                    #G.app.do(action)
                    #G.app.redraw()
                    log.message('update views')
                    value = valuesli
                    filenameImage = fileAotupicture + '/' + str(
                        time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
                    filenameIma = fileAotupicture + '/' + str(
                        time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
                    filenameIma1 = fileAotupicture + '/result' + str(
                        time.strftime("%Y-%m-%d_%H.%M.%S")), '.png'
                    width = G.windowWidth
                    height = G.windowHeight
                    width1 = width - 3
                    height1 = height - 3
                    log.message('grab screen')
                    mh.grabScreen(0, 0, width, height, filenameImage)
                    img = cv2.imread(filenameImage)
                    height1, width1 = img.shape[:2]
                    # print height,width
                    for i in range(height1):
                        for j in range(width1):
                            r, b, g = img[i][j]
                            rb = abs(r - b)
                            rg = abs(r - g)
                            bg = abs(b - g)
                            if rb < 10 and rg < 10 and bg < 10:
                                img[i][j] = [0, 0, 0]
                            else:
                                img[i][j] = [255, 255, 255]
                    imsave = normalize.Normalize(img)
                    log.message('show normalize image')
                    try:
                        log.message('cv2 start')
                        cv2.imwrite(filenameIma, imsave)
                        # log.message('cv2 imwrite:'+filenameIma)
                        # newimg=cv2.imread(filenameIma)
                        # log.message('cv2 imread')
                        # cv2.imshow("img", imsave)
                        # log.message('cv2 imshow')
                        ## 60与电脑的刷新频率有关,如果<60刷新频率跟不上,则不会显示图像
                        # cv2.waitKey(60)
                        # cv2.destroyAllWindows()
                        # delt = onpicture()
                        imnew = cv2.imread(filepicture)
                        delt = findcontours.GetDeltValue(imsave, imnew)
                        log.message('delt value:' + str(delt))
                        if delt <= deltvalue[0]:
                            deltvalue[0] = delt
                            deltva[0] = valuenums
                    except Exception, e:
                        log.message(e)
                num = deltva[0] * 20 + 1
                # result = cv2.imread(fileResult + str(num) + '.png')
                # cv2.imshow("Result", result)
                # cv2.waitKey(0)
                log.message(deltvalue)
                log.message(num)

            slider.modifier.setValue(valuenums)
            # log.message(slider.modifier.getValue())
            sli = modifierslider.ModifierSlider(slider.modifier)
            value = slider.modifier.getValue()
            valuesli = sli.getValue()
            # sli.onChanging(slider.modifier.getValue())
            action = humanmodifier.ModifierAction(slider.modifier, value,
                                                  valuesli, sli.update)
            G.app.do(action)
            mh.grabScreen(0, 0, width, height, filenameImage)
            imgw = cv2.imread(filenameImage)
            height1, width1 = imgw.shape[:2]
            # print height,width
            for i in range(height1):
                for j in range(width1):
                    r, b, g = imgw[i][j]
                    rb = abs(r - b)
                    rg = abs(r - g)
                    bg = abs(b - g)
                    if rb < 10 and rg < 10 and bg < 10:
                        imgw[i][j] = [0, 0, 0]
                    else:
                        imgw[i][j] = [255, 255, 255]
            imsavew = normalize.Normalize(imgw)
            cv2.imwrite(filenameIma1, imsavew)
            # sli.resetValue()
            # syncSliders()
            # slider.modifier.human
            # enabled = getattr(slider.modifier.human, slider.enabledCondition)()
            # slider.setEnabled(str(2))
            # log.message(str(enabled))
            return
    def __init__(self, category):
        gui3d.TaskView.__init__(self, category, 'Expression tuning')

        self.expressions = [
            ('eyebrows-left', ['down', 'extern-up', 'inner-up', 'up']),
            ('eyebrows-right', ['down', 'extern-up', 'inner-up', 'up']),
            ('eye-left', ['closure', 'opened-up', 'slit']),
            ('eye-right', ['closure', 'opened-up', 'slit']),
            ('mouth', [
                'compression', 'corner-puller', 'depression',
                'depression-retraction', 'elevation', 'eversion', 'parling',
                'part-later', 'protusion', 'pursing', 'retraction',
                'upward-retraction', 'open'
            ]),
            ('nose', [
                'depression', 'left-dilatation', 'left-elevation',
                'right-dilatation', 'right-elevation', 'compression'
            ]),
            ('neck', ['platysma']),
        ]

        self.include = "All"

        self.groupBoxes = []
        self.radioButtons = []
        self.sliders = []

        self.modifiers = {}
        self.targets = {}

        self.categoryBox = self.addRightWidget(gui.GroupBox('Category'))
        self.groupBox = self.addLeftWidget(gui.StackedBox())

        for name, subnames in self.expressions:
            # Create box
            box = self.groupBox.addWidget(gui.SliderBox(name.capitalize()))
            self.groupBoxes.append(box)

            # Create sliders
            for subname in subnames:
                if _UseWarping:
                    targetName = name + "-" + subname
                    modifier = ExpressionWarpModifier(targetName)
                else:
                    template = 'data/targets/expression/units/caucasian/%s-%s.target' % (
                        name, subname)
                    modifier = ExpressionSimpleModifier(template)

                modifier.setHuman(gui3d.app.selectedHuman)
                slider = box.addWidget(
                    modifierslider.ModifierSlider(modifier=modifier,
                                                  label=subname.capitalize()))

                @slider.mhEvent
                def onChange(event):
                    slider = event
                    for target in slider.modifier.targets:
                        self.addTarget(target)

                slider.modifier = modifier
                self.modifiers[name + '-' + subname] = modifier
                self.sliders.append(slider)
                modifier.slider = slider
            # Create radiobutton
            self.categoryBox.addWidget(
                GroupBoxRadioButton(self,
                                    self.radioButtons,
                                    name.capitalize(),
                                    box,
                                    selected=len(self.radioButtons) == 0))

        self.groupBox.showWidget(self.groupBoxes[0])