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()
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)))
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 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)))
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)
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)
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)
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])