movPontual_backup.py 9.6 KB
from setKey2 import *
from utils02 import *
import Blender
from Blender import *
import math
import sys
import os
import commands
import subprocess as sub

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

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

# pegando Objeto chamado "Armature.001" -----------------------------------------------------------
arm_ob = Blender.Object.Get('Armature.001')
pose = arm_ob.getPose()

# Criando nova Action -----------------------------------------------------------------------------
act = Armature.NLA.NewAction("TESTE_02")
act.setActive(arm_ob)

parametros = [paramDir, paramEsq]

endFrame = 0

for lado in range (0, 2 ,1): # Loop para Direita e Esquerda
	dados = open(parametros[lado],"r")
	listDados = dados.readlines()
	dados.close()	
		
	if(len(listDados) > 2):		
# Key Frame Ponto de Articulação ----------------------------------------------------------------
		for i in range(0, len(pontoArt(int(listDados[0].split("_")[1]), lado)), 1):
			bone = pose.bones[ pontoArt(int(listDados[0].split("_")[1]), lado)[i].split()[0] ]
			x = float( pontoArt(int(listDados[0].split("_")[1]), lado)[i].split()[2] )
			y = float( pontoArt(int(listDados[0].split("_")[1]), lado)[i].split()[3] )
			z = float( pontoArt(int(listDados[0].split("_")[1]), lado)[i].split()[4] )
			euler = Mathutils.Euler(x,y,z)
			bone.loc[:] = x, y, z
			bone.insertKey(arm_ob, 10, Object.Pose.LOC)

# Key Frames Orientação Mãos ----------------------------------------------------------------------
		for i in range(0, len(orient(int(listDados[1].split("_")[1]), lado)), 1): 
			bone = pose.bones[ orient(int(listDados[1].split("_")[1]), lado)[i].split()[0] ]
			x = float( orient(int(listDados[1].split("_")[1]), lado)[i].split()[6] )
			y = float( orient(int(listDados[1].split("_")[1]), lado)[i].split()[7] )
			z = float( orient(int(listDados[1].split("_")[1]), lado)[i].split()[8] )
			euler[:] = x, y, z
			bone.quat = euler.toQuat()
			bone.insertKey(arm_ob, 10, Object.Pose.ROT)
	
# Key Frames Configs de Mão -----------------------------------------------------------------------
		for i in range(0, len(confMao(int(listDados[2].split("_")[1]), lado)), 1): 
			bone = pose.bones[ confMao(int(listDados[2].split("_")[1]), lado)[i].split()[0] ]
			x = float( confMao(int(listDados[2].split("_")[1]), lado)[i].split()[6] )
			y = float( confMao(int(listDados[2].split("_")[1]), lado)[i].split()[7] )
			z = float( confMao(int(listDados[2].split("_")[1]), lado)[i].split()[8] )
			euler[:] = x, y, z
			bone.quat = euler.toQuat()
			bone.insertKey(arm_ob, 10, Object.Pose.ROT)			
			
# Pegando maior frame -----------------------------------------------------------------------------
			#if F > endFrame : 
			endFrame = 10			
			
dados = open(parametros[1],"r")
listParamEsq = dados.readlines()
dados.close()

libExpressaoFacial = open("Libs/LibExpressaoFacial", "r")
listaExpressaoFacial = libExpressaoFacial.readlines();			
			
t1 = listParamEsq[0];
t1 = t1[:-1];

if(t1 == 'Nenhum'):
	exp_facial = listParamEsq[1];
	expressao_facial = substr(exp_facial, 0, len(exp_facial) - 1);
else:
	exp_facial = listParamEsq[len(listParamEsq) - 1];
	expressao_facial = substr(exp_facial, 0, len(exp_facial) - 1);
	
# Key Frames Expressao Facial ---------------------------------------------------------------------
for i in range(0 , len(listaExpressaoFacial), 1):
	if (listaExpressaoFacial[i].split()): #Split em cada linha			
  		if (listaExpressaoFacial[i].split()[0] == "Exp_9"):
  			for k in range(i , i+ int(listaExpressaoFacial[i].split()[-1]), 1): 
        			bone = pose.bones[listaExpressaoFacial[k+1].split()[0]]		
        			bone.loc[:] = float(listaExpressaoFacial[k+1].split()[2]), float(listaExpressaoFacial[k+1].split()[3]), float(listaExpressaoFacial[k+1].split()[4])
				bone.insertKey(arm_ob, 1, 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(arm_ob, 1, Object.Pose.ROT)
        			
        			bone = pose.bones[listaExpressaoFacial[k+1].split()[0]]		
        			bone.loc[:] = float(listaExpressaoFacial[k+1].split()[2]), float(listaExpressaoFacial[k+1].split()[3]), float(listaExpressaoFacial[k+1].split()[4])
				bone.insertKey(arm_ob, 22, 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(arm_ob, 22, Object.Pose.ROT)			
			
		if (listaExpressaoFacial[i].split()[0] == expressao_facial):
  			for k in range(i , i+ int(listaExpressaoFacial[i].split()[-1]), 1): 
        			bone = pose.bones[listaExpressaoFacial[k+1].split()[0]]		
        			bone.loc[:] = float(listaExpressaoFacial[k+1].split()[2]), float(listaExpressaoFacial[k+1].split()[3]), float(listaExpressaoFacial[k+1].split()[4])
				bone.insertKey(arm_ob, 8, 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(arm_ob, 8, Object.Pose.ROT)
        			
        			bone = pose.bones[listaExpressaoFacial[k+1].split()[0]]		
        			bone.loc[:] = float(listaExpressaoFacial[k+1].split()[2]), float(listaExpressaoFacial[k+1].split()[3]), float(listaExpressaoFacial[k+1].split()[4])
				bone.insertKey(arm_ob, 15, 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(arm_ob, 15, Object.Pose.ROT)			
			
libPosePadrao = open("Libs/LibPosePadrao", "r")
listaPosePadrao = libPosePadrao.readlines();

print "EndFrame: " + str(endFrame)

# Key Frames Pose Padrão Inicial e Final ----------------------------------------------------------------
for i in range(0 , len(listaPosePadrao), 1):
	if (listaPosePadrao[i].split()): #Split em cada linha			
  		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(arm_ob, 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(arm_ob, 1, Object.Pose.ROT)
				
				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(arm_ob, 25, 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(arm_ob, 25, Object.Pose.ROT)


		if (listaPosePadrao[i].split()[0] == "Pose_2"):  			
			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(arm_ob, 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(arm_ob, 1, Object.Pose.ROT)
				
				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(arm_ob, 25, 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(arm_ob, 25, Object.Pose.ROT)



#print "Obtendo Nome do Video..."
dados = open(parametros[0],"r")
listDados = dados.readlines()
dados.close()

nomeVideoTemp = listDados[len(listDados) - 1]
nomeVideo = substr(nomeVideoTemp, 0, len(nomeVideoTemp) - 1)

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

#sub.Popen("ffmpeg -i "+ nomeVideo+ "*.avi -y -b 800 -r 25 -f flv -vcodec flv -acodec mp3 -ab 128 -ar 44100 "+ nomeVideo+".flv",shell=True,stdout=sub.PIPE).stdout.readlines()

sub.Popen("ffmpeg -i "+ nomeVideo+ "*.avi -b 2028k -s 640x480 -r 30 -acodec copy "+ nomeVideo+".flv",shell=True,stdout=sub.PIPE).stdout.readlines()

temp1 = commands.getoutput('ls /home/daniloanobre/Projetos/ProjetoLibras/server/ScriptsPython | grep '+nomeVideo + '*.avi')

videoAVIrenomeado = nomeVideo + '.avi';
os.rename(temp1,  videoAVIrenomeado);

sub.Popen("rm "+nomeVideo+"Dir"+ " "+ nomeVideo+"Esq",shell=True,stdout=sub.PIPE).stdout.readlines()

Blender.Quit()