Commit cef27bb8863160b88a8391c275fa7fc5dd7196c4
1 parent
bafb8e39
Exists in
master
Corrige lib de expressão facial, remove configuração de mão 33 duplicada no avatar
Showing
6 changed files
with
39 additions
and
169 deletions
Show diff stats
Makefile
| 1 | -BLEND = avatar_cartoon_v1.0.0.blend | |
| 2 | -BLENDER = blender | |
| 3 | -BLUE = \33[34;5m | |
| 4 | -CACHE = ./__pycache__ | |
| 1 | +BLEND = avatar_cartoon_v2.70.blend | |
| 5 | 2 | CONTROLLER = controller.py |
| 6 | -CORE = git@git.lavid.ufpb.br:wikilibras-core | |
| 7 | -DONE = [$(GREEN)Finalizado$(NONE)] | |
| 8 | -FAIL = [$(RED)Falhou$(NONE)] Codigo: $$? | |
| 9 | -GREEN = \33[32;5m | |
| 10 | -JSON = '{"userId": 2, "rightHand": ["circular", "plano", "horario", 1, 2, 0, 50, 20], "leftHand":[], "facialExp": [6], "signName":"teste_circular"}' | |
| 11 | 3 | MAIN = libras.py |
| 12 | -MODULE = Wikilibras | |
| 13 | -NONE = \33[m | |
| 4 | +# Circular: ['circular', x, x, Raio=1, Voltas=3 CfM=0, PAr=80, Ori=0] | |
| 5 | +JSON = '{"userId": 4, "rightHand": ["circular", "plano", "horario", 1, 3, 0, 80, 0], "leftHand":[], "facialExp": [1], "signName": "teste circular"}' | |
| 6 | +#JSON = '{"userId": 4, "rightHand": ["pontual", 55, 81, 21], "leftHand":[], "facialExp": [], "signName": "teste pontual"}' | |
| 7 | +#JSON = '{"userId": 4, "rightHand": ["pontual", 0, 80, 1], "leftHand":[], "facialExp": [1], "signName": "teste facial 1"}' | |
| 8 | +#JSON = '{"userId": 4, "rightHand": ["pontual", 0, 80, 2], "leftHand":[], "facialExp": [21], "signName": "teste facial 2"}' | |
| 9 | +BLENDER = blender | |
| 10 | +CACHE += "./__pycache__" | |
| 11 | +CACHE += "./users" | |
| 12 | +CACHE += "./events.log" | |
| 13 | +DONE = [\33[32;5mFinalizado\33[m] | |
| 14 | +FAIL = [\33[31;5mFalhou\33[m] Codigo: $$? | |
| 14 | 15 | PYTHON = python3 |
| 15 | -RED = \33[31;5m | |
| 16 | -WHITE = \33[37;5m | |
| 17 | 16 | |
| 18 | -__default__: py | |
| 17 | +.PHONY: py bpy clean help | |
| 19 | 18 | |
| 20 | -.clscr: | |
| 21 | - @echo -n "\033c" | |
| 19 | +py: | |
| 20 | + @echo "[\33[32;5mExecutando\33[m]\33[34;5m $(PYTHON) "$(CONTROLLER)" {JSON} ...\33[m"; $(PYTHON) "$(CONTROLLER)" $(JSON) && echo "$(DONE)" || echo "$(FAIL)" | |
| 22 | 21 | |
| 23 | 22 | bpy: |
| 24 | - @echo "[$(GREEN)Executando$(NONE)]$(BLUE) $(BLENDER) -b "$(BLEND)" -P "$(MAIN)" JSON ...$(NONE)";\ | |
| 25 | - $(BLENDER) -b "$(BLEND)" -P "$(MAIN)" $(JSON)\ | |
| 26 | - && echo "$(DONE)" || { echo "$(FAIL)"; exit $$?; } | |
| 27 | - | |
| 28 | -clean: .clscr | |
| 29 | - @echo -n "$(WHITE)Limpando... $(NONE) ";\ | |
| 30 | - rm -rf "$(CACHE)"\ | |
| 31 | - && echo "$(DONE)" || { echo "$(FAIL)"; exit $$?; } | |
| 32 | - | |
| 33 | -git-clone: | |
| 34 | - @input="";\ | |
| 35 | - while [ "$$input" != "s" ] && [ "$$input" != "n" ];\ | |
| 36 | - do\ | |
| 37 | - echo -n "$(GREEN)Clonar $(BLUE)$(CORE)?$(NONE) (s/n): ";\ | |
| 38 | - read input;\ | |
| 39 | - input="`echo $$input | tr [:upper:] [:lower:]`";\ | |
| 40 | - done;\ | |
| 41 | - if [ "$$input" = "s" ];\ | |
| 42 | - then\ | |
| 43 | - git clone $(CORE);\ | |
| 44 | - else\ | |
| 45 | - exit 0;\ | |
| 46 | - fi\ | |
| 47 | - && echo "$(DONE)" || { echo "$(FAIL)"; exit $$?; } | |
| 48 | - | |
| 49 | -git-config: | |
| 50 | - @echo -n "$(GREEN)Nome:$(BLUE) ";\ | |
| 51 | - git config --global user.name;\ | |
| 52 | - echo -n "$(GREEN)Email:$(BLUE) ";\ | |
| 53 | - git config --global user.email;\ | |
| 54 | - input="";\ | |
| 55 | - while [ "$$input" != "s" ] && [ "$$input" != "n" ];\ | |
| 56 | - do\ | |
| 57 | - echo -n "$(GREEN)Configurar Git?$(NONE) (s/n): ";\ | |
| 58 | - read input;\ | |
| 59 | - input="`echo $$input | tr [:upper:] [:lower:]`";\ | |
| 60 | - done;\ | |
| 61 | - if [ "$$input" = "s" ];\ | |
| 62 | - then\ | |
| 63 | - name="";\ | |
| 64 | - while [ -z "$$name" ];\ | |
| 65 | - do\ | |
| 66 | - echo -n "$(GREEN)Digite seu nome:$(NONE) ";\ | |
| 67 | - read name;\ | |
| 68 | - done;\ | |
| 69 | - email="";\ | |
| 70 | - while [ -z "$$email" ];\ | |
| 71 | - do\ | |
| 72 | - echo -n "$(GREEN)Digite seu email:$(NONE) ";\ | |
| 73 | - read email;\ | |
| 74 | - done;\ | |
| 75 | - input="";\ | |
| 76 | - while [ "$$input" != "s" ] && [ "$$input" != "n" ];\ | |
| 77 | - do\ | |
| 78 | - echo -n "$(GREEN)Confirma dados?$(NONE) (s/n): ";\ | |
| 79 | - read input;\ | |
| 80 | - input="`echo $$input | tr [:upper:] [:lower:]`";\ | |
| 81 | - done;\ | |
| 82 | - if [ "$$input" = "s" ];\ | |
| 83 | - then\ | |
| 84 | - git config --global user.name "$$name";\ | |
| 85 | - git config --global user.email "$$email";\ | |
| 86 | - git config --global color.diff auto;\ | |
| 87 | - git config --global color.status auto;\ | |
| 88 | - git config --global color.branch auto;\ | |
| 89 | - git config --global color.ui true;\ | |
| 90 | - git config --global push.default simple;\ | |
| 91 | - else\ | |
| 92 | - exit 0;\ | |
| 93 | - fi;\ | |
| 94 | - else\ | |
| 95 | - exit 0;\ | |
| 96 | - fi\ | |
| 97 | - && echo "$(DONE)" || { echo "$(FAIL)"; exit $$?; } | |
| 23 | + @echo "[\33[32;5mExecutando\33[m]\33[34;5m $(BLENDER) -b "$(BLEND)" -P "$(MAIN)" {JSON} ...\33[m"; $(BLENDER) -b "$(BLEND)" -P "$(MAIN)" $(JSON) && echo "$(DONE)" || echo "$(FAIL)" | |
| 98 | 24 | |
| 99 | 25 | help: |
| 100 | 26 | @echo "" |
| 101 | - @echo " $(WHITE) Make <args> $(NONE)" | |
| 27 | + @echo " \33[37;5m Make <args> \33[m" | |
| 102 | 28 | @echo "" |
| 103 | - @echo " $(GREEN) <args> $(NONE) $(BLUE) <funcao> $(NONE)" | |
| 29 | + @echo " \33[32;5m <args> \33[m \33[34;5m <funcao> \33[m" | |
| 104 | 30 | @echo "" |
| 105 | - @echo " $(GREEN) bpy $(NONE) $(BLUE) Executa: $(BLENDER) <$(MAIN)> com parametros JSON do Makefile $(NONE)" | |
| 106 | - @echo " $(GREEN) clean $(NONE) $(BLUE) Remove pasta(s) temporaria(s): $(CACHE) $(NONE)" | |
| 107 | - @echo " $(GREEN) git-clone $(NONE) $(BLUE) Clona repositorio: \"$(CORE)\" na pasta atual $(NONE)" | |
| 108 | - @echo " $(GREEN) git-config $(NONE) $(BLUE) Configura Git para o primeiro uso $(NONE)" | |
| 109 | - @echo " $(GREEN) help $(NONE) $(BLUE) Exibe ajuda $(NONE)" | |
| 110 | - @echo " $(GREEN) py $(NONE) $(BLUE) Executa: $(PYTHON) <$(CONTROLLER)> com parametros JSON do Makefile $(NONE)" | |
| 111 | - @echo " $(GREEN) recv $(NONE) $(BLUE) Recebe dados do repositorio: \"$(CORE)\" $(NONE)" | |
| 112 | - @echo " $(GREEN) send $(NONE) $(BLUE) Envia dados para o repositorio: \"$(CORE)\" $(NONE)" | |
| 31 | + @echo " \33[32;5m bpy \33[m \33[34;5m Executa: $(BLENDER) <$(MAIN)> com parametros JSON do Makefile \33[m" | |
| 32 | + @echo " \33[32;5m clean \33[m \33[34;5m Remove pasta(s) temporaria(s): $(CACHE) \33[m" | |
| 33 | + @echo " \33[32;5m help \33[m \33[34;5m Exibe ajuda \33[m" | |
| 34 | + @echo " \33[32;5m py \33[m \33[34;5m Executa: $(PYTHON) <$(CONTROLLER)> com parametros JSON do Makefile \33[m" | |
| 113 | 35 | @echo "" |
| 114 | 36 | |
| 115 | -py: | |
| 116 | - @echo "[$(GREEN)Executando$(NONE)]$(BLUE) $(PYTHON) "$(CONTROLLER)" JSON ...$(NONE)";\ | |
| 117 | - $(PYTHON) "$(CONTROLLER)" $(JSON)\ | |
| 118 | - && echo "$(DONE)" || { echo "$(FAIL)"; exit $$?; } | |
| 119 | - | |
| 120 | -recv: | |
| 121 | - @input="";\ | |
| 122 | - while [ "$$input" != "s" ] && [ "$$input" != "n" ];\ | |
| 123 | - do\ | |
| 124 | - echo -n "$(GREEN)Receber dados alterados?$(NONE) (s/n): ";\ | |
| 125 | - read input;\ | |
| 126 | - input="`echo $$input | tr [:upper:] [:lower:]`";\ | |
| 127 | - done;\ | |
| 128 | - if [ "$$input" = "s" ];\ | |
| 129 | - then\ | |
| 130 | - git pull;\ | |
| 131 | - else\ | |
| 132 | - exit 0;\ | |
| 133 | - fi\ | |
| 134 | - && echo "$(DONE)" || { echo "$(FAIL)"; exit $$?; } | |
| 37 | +.clscr: | |
| 38 | + @echo -n "\033c" | |
| 135 | 39 | |
| 136 | -send: | |
| 137 | - @input="";\ | |
| 138 | - while [ "$$input" != "s" ] && [ "$$input" != "n" ];\ | |
| 139 | - do\ | |
| 140 | - echo -n "$(GREEN)Enviar alteracoes realizadas?$(NONE) (s/n): ";\ | |
| 141 | - read input;\ | |
| 142 | - input="`echo $$input | tr [:upper:] [:lower:]`";\ | |
| 143 | - done;\ | |
| 144 | - if [ "$$input" = "s" ];\ | |
| 145 | - then\ | |
| 146 | - comment="";\ | |
| 147 | - while [ -z "$$comment" ];\ | |
| 148 | - do\ | |
| 149 | - echo -n "$(GREEN)Digite o comentario das alteracoes:$(NONE) ";\ | |
| 150 | - read comment;\ | |
| 151 | - done;\ | |
| 152 | - input="";\ | |
| 153 | - while [ "$$input" != "s" ] && [ "$$input" != "n" ];\ | |
| 154 | - do\ | |
| 155 | - echo -n "$(GREEN)Enviar dados?$(NONE) (s/n): ";\ | |
| 156 | - read input;\ | |
| 157 | - input="`echo $$input | tr [:upper:] [:lower:]`";\ | |
| 158 | - done;\ | |
| 159 | - if [ "$$input" = "s" ];\ | |
| 160 | - then\ | |
| 161 | - git add .;\ | |
| 162 | - git commit -m "$$comment";\ | |
| 163 | - git push;\ | |
| 164 | - else\ | |
| 165 | - exit 0;\ | |
| 166 | - fi;\ | |
| 167 | - else\ | |
| 168 | - exit 0;\ | |
| 169 | - fi\ | |
| 170 | - && echo "$(DONE)" || { echo "$(FAIL)"; exit $$?; } | |
| 40 | +clean: .clscr | |
| 41 | + @echo -n "\33[37;5mLimpando... \33[m "; rm -rf $(CACHE); echo "$(DONE)" | ... | ... |
avatar_cartoon_v1.0.0.blend
No preview for this file type
No preview for this file type
controller.py
| ... | ... | @@ -8,15 +8,15 @@ getcwd = dirname(abspath(__file__)) |
| 8 | 8 | |
| 9 | 9 | from pyutil import printStackTrace |
| 10 | 10 | |
| 11 | -blend_path = join(getcwd, "avatar_cartoon_v1.0.0.blend") | |
| 11 | +blend_path = join(getcwd, "avatar_cartoon_v2.70.blend") | |
| 12 | 12 | main_path = join(getcwd, "libras.py") |
| 13 | -restult = 0 | |
| 13 | +result = 0 | |
| 14 | 14 | |
| 15 | 15 | try: |
| 16 | 16 | # Caso seja necessário gravar logs do blender utilizar a linha de código abaixo |
| 17 | - # restult = call(['blender', '-b', blend_path, '-P', main_path, argv[1]], stdout = open( 'bpy.log', 'w')) | |
| 18 | - restult = call(['blender', '-b', blend_path, '-P', main_path, argv[1]]) | |
| 17 | + # result = call(['blender', '-b', blend_path, '-P', main_path, argv[1]], stdout = open('bpy.log', 'w')) | |
| 18 | + result = call(['blender', '-b', blend_path, '-P', main_path, argv[1]]) | |
| 19 | 19 | except: |
| 20 | - restult = printStackTrace(__file__) | |
| 20 | + result = printStackTrace(__file__) | |
| 21 | 21 | |
| 22 | -exit(restult) | |
| 22 | +exit(result) | ... | ... |
libras.py
| ... | ... | @@ -43,8 +43,8 @@ def setHandConfiguration(actions, handParam, positionFrames, bones): |
| 43 | 43 | util.setPose(actions, handParam, positionFrames, bones) |
| 44 | 44 | |
| 45 | 45 | # Função responsável por setar a configuração da face |
| 46 | -def setFaceConfiguration(handParam, positionFrames, bones): | |
| 47 | - util.setPose([7], handParam, positionFrames, bones) | |
| 46 | +def setFaceConfiguration(handParam, positionFrames, bones): | |
| 47 | + util.setPose(['007_Facial'], handParam, positionFrames, bones) | |
| 48 | 48 | |
| 49 | 49 | # Sugestao: Alguma forma de uniformizar o calculo do endFrame (atualizado aqui e no movimento circular) |
| 50 | 50 | initialFrame, endFrame = 15, util.get_endFrame(json_input, util.hands_frames_retilineo) |
| ... | ... | @@ -65,10 +65,10 @@ def configureHands(): |
| 65 | 65 | move = json_input[hands[i]][0] |
| 66 | 66 | pose = util.armature.pose.bones[iks[i]] |
| 67 | 67 | handParam = json_input[hands[i]][-3:] |
| 68 | - | |
| 68 | + | |
| 69 | 69 | if(move in ["pontual", "circular", "semicircular", "retilineo", "senoidal"]): |
| 70 | 70 | setHandConfiguration(actions[i], handParam, util.hands_default_frames, bones_[i]) |
| 71 | - | |
| 71 | + | |
| 72 | 72 | if(move in ["circular", "semicircular"]): |
| 73 | 73 | orientation, direction, radius, laps = json_input[hands[i]][1:5] |
| 74 | 74 | endFrame = moves.circular_or_semiCircular(pose, orientation, direction, radius, laps, 5) |
| ... | ... | @@ -87,7 +87,6 @@ def configureHands(): |
| 87 | 87 | def configureFace(): |
| 88 | 88 | global endFrame |
| 89 | 89 | if(json_input["facialExp"] != []): |
| 90 | - # Set face | |
| 91 | 90 | setFaceConfiguration(json_input["facialExp"], [endFrame/4], util.faceBonesConf) |
| 92 | 91 | |
| 93 | 92 | poseDefault([1]) | ... | ... |
moves.py
| ... | ... | @@ -170,7 +170,7 @@ def locationCircular(center, radius, i_axis, j_axis, k_axis, pose, initialPositi |
| 170 | 170 | pose.location[i_axis] = center[i_axis] + sqrt22 |
| 171 | 171 | pose.location[j_axis] = center[j_axis] + rad2 |
| 172 | 172 | pose.location[k_axis] = center[k_axis] + rad2 |
| 173 | - util.keyframe_insert(pose, 'location', initialPosition) | |
| 173 | + util.keyframe_insert(pose, 'location', currentFrame) | |
| 174 | 174 | currentFrame += frameJump |
| 175 | 175 | if ((l % 8) == 2): |
| 176 | 176 | pose.location[i_axis] = center[i_axis] |
| ... | ... | @@ -182,7 +182,7 @@ def locationCircular(center, radius, i_axis, j_axis, k_axis, pose, initialPositi |
| 182 | 182 | elif(turn == -1): |
| 183 | 183 | pose.location[j_axis] = center[j_axis] + sqrt22 |
| 184 | 184 | pose.location[k_axis] = center[k_axis] + sqrt22 |
| 185 | - util.keyframe_insert(pose, 'location', initialPosition) | |
| 185 | + util.keyframe_insert(pose, 'location', currentFrame) | |
| 186 | 186 | currentFrame += frameJump |
| 187 | 187 | if ((l % 8) == 3): |
| 188 | 188 | pose.location[i_axis] = center[i_axis] - sqrt22 |
| ... | ... | @@ -196,7 +196,7 @@ def locationCircular(center, radius, i_axis, j_axis, k_axis, pose, initialPositi |
| 196 | 196 | pose.location[i_axis] = center[i_axis] - sqrt22 |
| 197 | 197 | pose.location[j_axis] = center[j_axis] + rad2 |
| 198 | 198 | pose.location[k_axis] = center[k_axis] + rad2 |
| 199 | - util.keyframe_insert(pose, 'location', initialPosition) | |
| 199 | + util.keyframe_insert(pose, 'location', currentFrame) | |
| 200 | 200 | currentFrame += frameJump |
| 201 | 201 | |
| 202 | 202 | if ((l % 8) == 4): | ... | ... |