MovTipoContato.py 18.1 KB
from utils02 import *
import Blender
from Blender import*
from Blender.Scene import Render
import math
import os
import commands
import subprocess as sub
import sys

def substr(str,origem, tamanho):
	return str[origem:tamanho+origem]

paramDir = sys.argv[5]
#paramEsq = sys.argv[6]

libPoseMaoDireita = open("Libs/LibConfigMaoDir", "r")
libOritentacaoLadoDireito = open("Libs/LibOrientacaoDir", "r")
libPontoArticulacaoDireita = open("Libs/LibPontoArticulacaoDir", "r")

libPoseMaoEsquerda = open("Libs/LibConfigMaoEsq", "r")
libOritentacaoLadoEsquerdo = open("Libs/LibOrientacaoEsq", "r")
libPontoArticulacaoEsquerda = open("Libs/LibPontoArticulacaoEsq", "r")

listaPoseMaoDireita = libPoseMaoDireita.readlines();
listalibOritentacaoLadoDireito = libOritentacaoLadoDireito.readlines();
listalibPontoArticulacaoDireita = libPontoArticulacaoDireita.readlines();

listaPoseMaoEsquerda = libPoseMaoEsquerda.readlines();
listalibOritentacaoLadoEsquerdo  = libOritentacaoLadoEsquerdo.readlines();
listalibPontoArticulacaoEsquerda = libPontoArticulacaoEsquerda.readlines();

libExpressaoFacial = open("Libs/LibExpressaoFacial", "r")
listaExpressaoFacial = libExpressaoFacial.readlines();

libPosePadrao = open("Libs/LibPosePadrao", "r")
listaPosePadrao = libPosePadrao.readlines();



armadura = Blender.Object.Get('Armature.001');
pose = armadura.getPose()

poseb = pose.bones['ik_FK.R']
poseb1 = pose.bones['ik_FK.L']

arquivoDireita = open(paramDir, "r")
parametrosDireita = arquivoDireita.readlines();
#arquivoEsquerda = open(paramEsq, "r")
#parametrosEsquerda = arquivoEsquerda.readlines();

act = Armature.NLA.NewAction("Circular")
act.setActive(armadura)

print "############ CONFIGURACOES DA MAO DIREITA ############"

configDir = parametrosDireita[0]
configDir = configDir[:-1]
print configDir

oriDir = parametrosDireita[1]
oriDir = oriDir[:-1]
print oriDir

paDir = parametrosDireita[2]
paDir = paDir[:-1]
print paDir

tipoContato = parametrosDireita[3]
tipoContato = tipoContato[:-1]
print tipoContato

expFacial = parametrosDireita[4]
expFacial = expFacial[:-1]
print expFacial

nomeSinal = parametrosDireita[5]
nomeSinal = nomeSinal[:-1]
print nomeSinal

if(tipoContato == "coçar"):
	endFrame = 55;

#Pose Padrao inicial
	for i in range(0 , len(listaPosePadrao), 1):
		if (listaPosePadrao[i].split()): 			
  			if (listaPosePadrao[i].split()[0] == "Pose_1"):  			
				for k in range(i , i+ int(listaPosePadrao[i].split()[-1]), 1): 
        				bone = pose.bones[listaPosePadrao[k+1].split()[0]]
        				bone.loc[:] = float(listaPosePadrao[k+1].split()[2]), float(listaPosePadrao[k+1].split()[3]), float(listaPosePadrao[k+1].split()[4])
					bone.insertKey(armadura, 1, Object.Pose.LOC)
        				euler = bone.quat.toEuler()
        				euler[:] = float(listaPosePadrao[k+1].split()[6]), float(listaPosePadrao[k+1].split()[7]), float(listaPosePadrao[k+1].split()[8])	
        				bone.quat = euler.toQuat()
        				bone.insertKey(armadura, 1, Object.Pose.ROT)

	#Configuracao de mao direita
	configuracoesMao = ["conf_1", "conf_59"];
	
	#Configuracao de mao direita
	for i in range(0 , len(listaPoseMaoDireita), 1):
		if (listaPoseMaoDireita[i].split()):
			if (listaPoseMaoDireita[i].split()[0] == configuracoesMao[0]): 
				for k in range(i , i+15, 1): 
					bone = pose.bones[listaPoseMaoDireita[k+1].split()[0]]
					bone.loc[:] = float(listaPoseMaoDireita[k+1].split()[2]), float(listaPoseMaoDireita[k+1].split()[3]), float(listaPoseMaoDireita[k+1].split()[4])				
					bone.insertKey(armadura, 20, Object.Pose.LOC)
					euler = bone.quat.toEuler()
					euler[:] = float(listaPoseMaoDireita[k+1].split()[6]), float(listaPoseMaoDireita[k+1].split()[7]), float(listaPoseMaoDireita[k+1].split()[8])				
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, 20, Object.Pose.ROT)

		#Configuracao de mao direita
	for i in range(0 , len(listaPoseMaoDireita), 1):
		if (listaPoseMaoDireita[i].split()):
			if (listaPoseMaoDireita[i].split()[0] == configuracoesMao[1]): 
				for k in range(i , i+15, 1): 
					bone = pose.bones[listaPoseMaoDireita[k+1].split()[0]]
					bone.loc[:] = float(listaPoseMaoDireita[k+1].split()[2]), float(listaPoseMaoDireita[k+1].split()[3]), float(listaPoseMaoDireita[k+1].split()[4])				
					bone.insertKey(armadura, 27, Object.Pose.LOC)
					euler = bone.quat.toEuler()
					euler[:] = float(listaPoseMaoDireita[k+1].split()[6]), float(listaPoseMaoDireita[k+1].split()[7]), float(listaPoseMaoDireita[k+1].split()[8])				
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, 27, Object.Pose.ROT)

		#Configuracao de mao direita
	for i in range(0 , len(listaPoseMaoDireita), 1):
		if (listaPoseMaoDireita[i].split()):
			if (listaPoseMaoDireita[i].split()[0] == configuracoesMao[0]): 
				for k in range(i , i+15, 1): 
					bone = pose.bones[listaPoseMaoDireita[k+1].split()[0]]
					bone.loc[:] = float(listaPoseMaoDireita[k+1].split()[2]), float(listaPoseMaoDireita[k+1].split()[3]), float(listaPoseMaoDireita[k+1].split()[4])				
					bone.insertKey(armadura, 34, Object.Pose.LOC)
					euler = bone.quat.toEuler()
					euler[:] = float(listaPoseMaoDireita[k+1].split()[6]), float(listaPoseMaoDireita[k+1].split()[7]), float(listaPoseMaoDireita[k+1].split()[8])				
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, 34, Object.Pose.ROT)

		#Configuracao de mao direita
	for i in range(0 , len(listaPoseMaoDireita), 1):
		if (listaPoseMaoDireita[i].split()):
			if (listaPoseMaoDireita[i].split()[0] == configuracoesMao[1]): 
				for k in range(i , i+15, 1): 
					bone = pose.bones[listaPoseMaoDireita[k+1].split()[0]]
					bone.loc[:] = float(listaPoseMaoDireita[k+1].split()[2]), float(listaPoseMaoDireita[k+1].split()[3]), float(listaPoseMaoDireita[k+1].split()[4])				
					bone.insertKey(armadura, 41, Object.Pose.LOC)
					euler = bone.quat.toEuler()
					euler[:] = float(listaPoseMaoDireita[k+1].split()[6]), float(listaPoseMaoDireita[k+1].split()[7]), float(listaPoseMaoDireita[k+1].split()[8])				
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, 41, Object.Pose.ROT)

		#Configuracao de mao direita
	for i in range(0 , len(listaPoseMaoDireita), 1):
		if (listaPoseMaoDireita[i].split()):
			if (listaPoseMaoDireita[i].split()[0] == configuracoesMao[0]): 
				for k in range(i , i+15, 1): 
					bone = pose.bones[listaPoseMaoDireita[k+1].split()[0]]
					bone.loc[:] = float(listaPoseMaoDireita[k+1].split()[2]), float(listaPoseMaoDireita[k+1].split()[3]), float(listaPoseMaoDireita[k+1].split()[4])				
					bone.insertKey(armadura, 48, Object.Pose.LOC)
					euler = bone.quat.toEuler()
					euler[:] = float(listaPoseMaoDireita[k+1].split()[6]), float(listaPoseMaoDireita[k+1].split()[7]), float(listaPoseMaoDireita[k+1].split()[8])				
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, 48, Object.Pose.ROT)

		#Configuracao de mao direita
	for i in range(0 , len(listaPoseMaoDireita), 1):
		if (listaPoseMaoDireita[i].split()):
			if (listaPoseMaoDireita[i].split()[0] == configuracoesMao[1]): 
				for k in range(i , i+15, 1): 
					bone = pose.bones[listaPoseMaoDireita[k+1].split()[0]]
					bone.loc[:] = float(listaPoseMaoDireita[k+1].split()[2]), float(listaPoseMaoDireita[k+1].split()[3]), float(listaPoseMaoDireita[k+1].split()[4])				
					bone.insertKey(armadura, 55, Object.Pose.LOC)
					euler = bone.quat.toEuler()
					euler[:] = float(listaPoseMaoDireita[k+1].split()[6]), float(listaPoseMaoDireita[k+1].split()[7]), float(listaPoseMaoDireita[k+1].split()[8])				
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, 55, Object.Pose.ROT)

	#Define a orientacao da mao direita
	for i in range(0 , len(listalibOritentacaoLadoDireito), 1):
		if (listalibOritentacaoLadoDireito[i].split()):
			if (listalibOritentacaoLadoDireito[i].split()[0] == oriDir):	
				for k in range(i , i+2, 1):	
					bone = pose.bones[listalibOritentacaoLadoDireito[k+1].split()[0]]					
					bone.loc[:] = float(listalibOritentacaoLadoDireito[k+1].split()[2]), float(listalibOritentacaoLadoDireito[k+1].split()[3]), float(listalibOritentacaoLadoDireito[k+1].split()[4])					
					bone.insertKey(armadura, 17, Object.Pose.LOC)
					euler = bone.quat.toEuler()					
					euler[:] = float(listalibOritentacaoLadoDireito[k+1].split()[6]), float(listalibOritentacaoLadoDireito[k+1].split()[7]), float(listalibOritentacaoLadoDireito[k+1].split()[8])					
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, 17, Object.Pose.ROT)

	#Define a orientacao da mao direita
	for i in range(0 , len(listalibOritentacaoLadoDireito), 1):
		if (listalibOritentacaoLadoDireito[i].split()):
			if (listalibOritentacaoLadoDireito[i].split()[0] == oriDir):	
				for k in range(i , i+2, 1):	
					bone = pose.bones[listalibOritentacaoLadoDireito[k+1].split()[0]]					
					bone.loc[:] = float(listalibOritentacaoLadoDireito[k+1].split()[2]), float(listalibOritentacaoLadoDireito[k+1].split()[3]), float(listalibOritentacaoLadoDireito[k+1].split()[4])					
					bone.insertKey(armadura, endFrame, Object.Pose.LOC)
					euler = bone.quat.toEuler()					
					euler[:] = float(listalibOritentacaoLadoDireito[k+1].split()[6]), float(listalibOritentacaoLadoDireito[k+1].split()[7]), float(listalibOritentacaoLadoDireito[k+1].split()[8])					
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, endFrame, Object.Pose.ROT)
	
	#Ponto de articulacao da mao direita
	for i in range(0 , len(listalibPontoArticulacaoDireita), 1):
		if (listalibPontoArticulacaoDireita[i].split()): 			
	  		if (listalibPontoArticulacaoDireita[i].split()[0] == paDir):
				for k in range(i , i+2, 1): 
	        			bone = pose.bones[listalibPontoArticulacaoDireita[k+1].split()[0]]		
					bone.loc[:] = float(listalibPontoArticulacaoDireita[k+1].split()[2]), float(listalibPontoArticulacaoDireita[k+1].split()[3]), float(listalibPontoArticulacaoDireita[k+1].split()[4])
					bone.insertKey(armadura, 17, Object.Pose.LOC)
	        			euler = bone.quat.toEuler()
	        			euler[:] = float(listalibPontoArticulacaoDireita[k+1].split()[6]), float(listalibPontoArticulacaoDireita[k+1].split()[7]), float(listalibPontoArticulacaoDireita[k+1].split()[8])
	        			bone.quat = euler.toQuat()
	        			bone.insertKey(armadura, 17, Object.Pose.ROT)

	#Ponto de articulacao da mao direita
	for i in range(0 , len(listalibPontoArticulacaoDireita), 1):
			if (listalibPontoArticulacaoDireita[i].split()): 			
		  		if (listalibPontoArticulacaoDireita[i].split()[0] == paDir):
					for k in range(i , i+2, 1): 
		        			bone = pose.bones[listalibPontoArticulacaoDireita[k+1].split()[0]]		
						bone.loc[:] = float(listalibPontoArticulacaoDireita[k+1].split()[2]), float(listalibPontoArticulacaoDireita[k+1].split()[3]), float(listalibPontoArticulacaoDireita[k+1].split()[4])
						bone.insertKey(armadura, 55, Object.Pose.LOC)
		        			euler = bone.quat.toEuler()
		        			euler[:] = float(listalibPontoArticulacaoDireita[k+1].split()[6]), float(listalibPontoArticulacaoDireita[k+1].split()[7]), float(listalibPontoArticulacaoDireita[k+1].split()[8])
		        			bone.quat = euler.toQuat()
		        			bone.insertKey(armadura, 55, Object.Pose.ROT)

	#Pose Padrao inicial
	for i in range(0 , len(listaPosePadrao), 1):
		if (listaPosePadrao[i].split()): 			
  			if (listaPosePadrao[i].split()[0] == "Pose_1"):  			
				for k in range(i , i+ int(listaPosePadrao[i].split()[-1]), 1): 
        				bone = pose.bones[listaPosePadrao[k+1].split()[0]]
        				bone.loc[:] = float(listaPosePadrao[k+1].split()[2]), float(listaPosePadrao[k+1].split()[3]), float(listaPosePadrao[k+1].split()[4])
					bone.insertKey(armadura, endFrame + 15, Object.Pose.LOC)
        				euler = bone.quat.toEuler()
        				euler[:] = float(listaPosePadrao[k+1].split()[6]), float(listaPosePadrao[k+1].split()[7]), float(listaPosePadrao[k+1].split()[8])	
        				bone.quat = euler.toQuat()
        				bone.insertKey(armadura, endFrame + 15, Object.Pose.ROT)

else:
	#Configuracao de mao direita
	for i in range(0 , len(listaPoseMaoDireita), 1):
		if (listaPoseMaoDireita[i].split()):
			if (listaPoseMaoDireita[i].split()[0] == configDir): 
				for k in range(i , i+15, 1): 
					bone = pose.bones[listaPoseMaoDireita[k+1].split()[0]]
					bone.loc[:] = float(listaPoseMaoDireita[k+1].split()[2]), float(listaPoseMaoDireita[k+1].split()[3]), float(listaPoseMaoDireita[k+1].split()[4])				
					bone.insertKey(armadura, 15, Object.Pose.LOC)
					euler = bone.quat.toEuler()
					euler[:] = float(listaPoseMaoDireita[k+1].split()[6]), float(listaPoseMaoDireita[k+1].split()[7]), float(listaPoseMaoDireita[k+1].split()[8])				
					bone.quat = euler.toQuat()
					bone.insertKey(armadura, 15, Object.Pose.ROT)

	#Define a orientacao da mao direita
	for i in range(0 , len(listalibOritentacaoLadoDireito), 1):
			if (listalibOritentacaoLadoDireito[i].split()):
				if (listalibOritentacaoLadoDireito[i].split()[0] == oriDir):	
					for k in range(i , i+2, 1):	
						bone = pose.bones[listalibOritentacaoLadoDireito[k+1].split()[0]]					
						bone.loc[:] = float(listalibOritentacaoLadoDireito[k+1].split()[2]), float(listalibOritentacaoLadoDireito[k+1].split()[3]), float(listalibOritentacaoLadoDireito[k+1].split()[4])					
						bone.insertKey(armadura, 15, Object.Pose.LOC)
						euler = bone.quat.toEuler()					
						euler[:] = float(listalibOritentacaoLadoDireito[k+1].split()[6]), float(listalibOritentacaoLadoDireito[k+1].split()[7]), float(listalibOritentacaoLadoDireito[k+1].split()[8])					
						bone.quat = euler.toQuat()
						bone.insertKey(armadura, 15, Object.Pose.ROT)

	
	#Ponto de articulacao da mao direita
	for i in range(0 , len(listalibPontoArticulacaoDireita), 1):
			if (listalibPontoArticulacaoDireita[i].split()): 			
		  		if (listalibPontoArticulacaoDireita[i].split()[0] == paDir):
					for k in range(i , i+2, 1): 
		        			bone = pose.bones[listalibPontoArticulacaoDireita[k+1].split()[0]]		
						bone.loc[:] = float(listalibPontoArticulacaoDireita[k+1].split()[2]), float(listalibPontoArticulacaoDireita[k+1].split()[3]), float(listalibPontoArticulacaoDireita[k+1].split()[4])
						bone.insertKey(armadura, 15, Object.Pose.LOC)
		        			euler = bone.quat.toEuler()
		        			euler[:] = float(listalibPontoArticulacaoDireita[k+1].split()[6]), float(listalibPontoArticulacaoDireita[k+1].split()[7]), float(listalibPontoArticulacaoDireita[k+1].split()[8])
		        			bone.quat = euler.toQuat()
		        			bone.insertKey(armadura, 15, Object.Pose.ROT)
	xp = poseb.loc.x
	yp = poseb.loc.y
	zp = poseb.loc.z

	frame = 0;
	if(tipoContato == 'tocar'):

		frame = 25
		poseb.loc[:] = xp , yp, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 30
		poseb.loc[:] = xp , yp , zp - 0.4
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 35
		poseb.loc[:] = xp, yp, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 40
		poseb.loc[:] = xp, yp, zp - 0.4
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 45
		poseb.loc[:] = xp, yp, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 50
		poseb.loc[:] = xp, yp, zp - 0.4
		poseb.insertKey(armadura, frame, Object.Pose.LOC)

	if(tipoContato == 'alisar'):
		frame = 25
		poseb.loc[:] = xp , yp, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 28
		poseb.loc[:] = xp , yp - 0.3 , zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 31
		poseb.loc[:] = xp, yp, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 34
		poseb.loc[:] = xp, yp + 0.3, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 37
		poseb.loc[:] = xp, yp, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 40
		poseb.loc[:] = xp, yp - 0.3, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 43
		poseb.loc[:] = xp, yp, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		frame = 46
		poseb.loc[:] = xp, yp + 0.3, zp
		poseb.insertKey(armadura, frame, Object.Pose.LOC)
		
	
	# Key Frames Pose Padrão Final ----------------------------------------------------------------
	#poseInicial = ["Pose_1", "Pose_2"]
	endFrame = frame;

	print "endFrame = " + str(endFrame);
	
	for i in range(0 , len(listaPosePadrao), 1):
		if (listaPosePadrao[i].split()): 			
			if (listaPosePadrao[i].split()[0] == poseInicial):  
				for k in range(i , int(listaPosePadrao[i].split()[-1]), 1): 
					bone = pose.bones[listaPosePadrao[k+1].split()[0]]	
					bone.loc[:] = float(listaPosePadrao[k+1].split()[2]), float(listaPosePadrao[k+1].split()[3]), float(listaPosePadrao[k+1].split()[4])	
					bone.insertKey(armadura, endFrame + 20, Object.Pose.LOC)
	
       					euler = bone.quat.toEuler()
       					euler[:] = float(listaPosePadrao[k+1].split()[6]), float(listaPosePadrao[k+1].split()[7]), float(listaPosePadrao[k+1].split()[8])		
       					bone.quat = euler.toQuat()
       					bone.insertKey(armadura, endFrame + 20, Object.Pose.ROT)
	

print endFrame;

expressaoFacial = ["Exp_9", expFacial, "Exp_9"]
for h in range(0, 3, 1):
	#Configurando expressão facial do sinal escolhida
	for i in range(0 , len(listaExpressaoFacial), 1):
		if (listaExpressaoFacial[i].split()): #Split em cada linha			
  			if (listaExpressaoFacial[i].split()[0] == expressaoFacial[h]):
  				#print listaExpressaoFacial[i].split()[0];
				for k in range(i , i+int(listaExpressaoFacial[i].split()[-1]), 1): 
        				bone = pose.bones[listaExpressaoFacial[k+1].split()[0]]		
        				#print bone;
					bone.loc[:] = float(listaExpressaoFacial[k+1].split()[2]), float(listaExpressaoFacial[k+1].split()[3]), float(listaExpressaoFacial[k+1].split()[4])
					bone.insertKey(armadura, h*(endFrame/2) + 1 + h*3, Object.Pose.LOC)
        				euler = bone.quat.toEuler()
        				euler[:] = float(listaExpressaoFacial[k+1].split()[6]), float(listaExpressaoFacial[k+1].split()[7]), float(listaExpressaoFacial[k+1].split()[8])
        				bone.quat = euler.toQuat()
        				bone.insertKey(armadura, h*(endFrame/2) + 1, Object.Pose.ROT)
fixRots(0);

cena = Blender.Scene.GetCurrent()
cont = cena.getRenderingContext()
cont.renderPath = "//"+nomeSinal+"_"
cont.sFrame = 1
cont.eFrame = endFrame + 25
cont.renderAnim()

sub.Popen("ffmpeg -i "+ nomeSinal+ "*.avi -b 2028k -s 640x480 -r 30 -acodec copy "+ nomeSinal+".flv",shell=True,stdout=sub.PIPE).stdout.readlines()
temp1 = commands.getoutput('ls /home/linear/Projetos/ProjetoLibras/server/ScriptsPython | grep '+nomeSinal + '*.avi')
videoAVIrenomeado = nomeSinal + '.avi';
os.rename(temp1,  videoAVIrenomeado);

#Blender.Save("Modelo_Teste.blend", 1);

Blender.Quit