Вы находитесь на странице: 1из 50

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL

1

UNIVERSIDAD
NACIONAL DE
INGENIERA
FACULTAD DE INGENIERA
INDUSTRIAL Y DE SISTEMAS



INTELIGENCIA ARTIFICIAL

MANUAL KINETIC


Integrantes:

BALBERENA ZAVALA, JORGE
CAMUS TRUJILLO, HEBERD
PUENTE JARA, ALEX ATILIO
RIVERA ROMAN, JONATHAN
VALENZUELA, JHOSEP
QUINTANA , MARCO


DOCENTE: OPORTO, SAMUEL

21/07/2012


UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
2

INDICE

INTRODUCCION
1. INTRODUCCION AL KINECT
1.1. Que es el Kinect?
1.2. Componentes
1.3. Compra
1.4. Requerimiento
1.4.1. Hardware
1.4.2. Software
1.5. Tecnologa
1.6. Instalacin del SDK Versin 1.5
1.7. Operacin
1.7.1. Aplicacin para detectar el video del Sensor Kinect
2. FUNCIONAMIENTO DEL KINECT
2.1. Requerimientos
2.2. Encendido del Sensor
2.3. Encendido de la Cmara
2.3.1. Cdigo Fuente
3. CAPTURA DE DATOS
3.1. Interfaz
3.1.1. Cdigo Fuente
3.2. Datos de Entrenamiento
3.2.1. Cdigo Fuente
3.3. Datos de Prueba
3.3.1. Cdigo Fuente
4. BASE DE DATOS
4.1. Tablas
4.2. Procedimientos Almacenados y Funciones
5. MODELO DE APRENDIZAJE
5.1. Construccin del Modelo
ANEXO






UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
3



INTRODUCCION

En el siguiente manual explicaremos como realizamos la codificacin para
obtener datos del sensor Kinect, la captura de datos de entrenamiento y de
prueba, para ellos necesitamos una serie de componentes como herramientas.
Entre los componentes necesitamos el SDK del sensor para poder desarrollar
en algn lenguaje de programacin como es Visual basic, C#, C++. Entre las
herramientas de desarrollo utilizaremos el Visual Studio y como herramienta
de base de datos, el Microsoft SQL Server en el cual en crearemos los Stores
Porcedures como funciones para la insercin de los datos de entrenamiento y
prueba.
El solucin se es de tipo WPF y se dividi en 3 regiones: Variables, Constructor
Encendido cmara, Entrenamiento y Prueba.





















UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
4



1. INTRODUCCION DEL KINECT

1.1. Que es el Kinect?




Es un dispositivo que permite la captura de movimiento en 3 dimensiones,
Microsoft Research (empresa que forma parte de Microsoft y que se encarga de la
investigacin) invirti veinte aos de desarrollo en la tecnologa de Kinect y fue
anunciado por primera vez el 1 de junio de 2009 en la Electronic Entertainment
Expo 2009 como "Project Natal" y posteriormente se cambi al nombre Kinect.
Desde su lanzamiento una de sus muchas aplicaciones es el campo de los
videojuegos, aunque en la actualidad y con el lanzamiento de Kinect para
Windows las aplicaciones se han incrementado exponencialmente en diferentes
mbitos como la medicina, robtica, educacin, programacin, etc.
Existen dos versiones del Kinect: Microsoft Kinect para Windows y el Microsoft
Kinect XBOX 360, el primero est orientado para aplicaciones en PC mientras que
el segundo est orientado para consolas XBOX 360.



UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
5




1.2. Componentes













El sensor de Kinect es una barra horizontal de aproximadamente 23 cm (9
pulgadas) conectada a una pequea base circular con un eje de articulacin de
rtula, y est diseado para ser colocado longitudinalmente por encima o por
debajo de la pantalla de vdeo.
El dispositivo cuenta con una cmara RGB, un sensor de profundidad, un
micrfono de mltiples matrices y un procesador personalizado que ejecuta el
software patentado, que proporciona captura de movimiento de todo el cuerpo en
3D, reconocimiento facial y capacidades de reconocimiento de voz. El micrfono
de matrices del sensor de Kinect permite a la Xbox 360 llevar a cabo la
localizacin de la fuente acstica y la supresin del ruido ambiente, permitiendo
participar en el chat de Xbox Live sin utilizar auriculares.
El sensor contiene un mecanismo de inclinacin motorizado y en caso de usar un
Xbox 360 del modelo original, tiene que ser conectado a una toma de corriente, ya
que la corriente que puede proveerle el cable USB es insuficiente; para el caso del
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
6

modelo de Xbox 360 S esto no es necesario ya que esta consola cuenta con una
toma especialmente diseada para conectar el Kinect y esto permite proporcionar
la corriente necesaria que requiere el dispositivo para funcionar correctamente.
El sensor de profundidad es un proyector de infrarrojos combinado con un sensor
CMOS monocromo que permite a Kinect ver la habitacin en 3D en cualquier
condicin de luz ambiental. El rango de deteccin de la profundidad del sensor es
ajustable gracias al software de Kinect capaz de calibrar automticamente el
sensor, basado en la jugabilidad y en el ambiente fsico del jugador, tal como la
presencia de sofs.
1.3. Compra
Lugares de compra del Kinect
Amazon
http://www.amazon.com/
Tipo de Kinect: KINECT FOR WINDOWS
Precio de compra: $. 230.00 (dlares
americanos)
Envo: Desde Amazon no hacen el envo del
Kinect hacia Per, por lo que si se desea comprar
el Kinect para Windows desde Amazon, se debe
tener una persona que reciba el dispositivo y
enviarlo a Per
Ripley-Peru
http://www.ripley.com.pe/
Tipo de Kinect: KINECT XBOX 360
Precio de compra: S/. 750.00 (nuevos soles
peruanos)
Envo: En sta tienda solo vende el Kinect XBOX y
no el Kinect para Windows

1.4. Requerimientos
4.1 Hardware Requerimientos
Sensor: 1 Sensor Microsoft Kinect para Windows
Procesador: Dual-core 2.66-GHz o superior
Memoria: 2 GB RAM
Disco duro: 190 MB de espacio libre
Bus: 32-bit (x86) o 64-bit (x64)
Puerto USB: 1 puerto USB 2.0 o superior
4.2 Software Requerimientos
Sistema Operativo: Microsoft Windows 7 o superior
Controlador:
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
7

SDK v1.5 de Microsoft [ http://www.microsoft.com/en-us/kinectforwindows/develop/developer-
downloads.aspx ]
GNU de cdigo abierto
Herramienta de desarrollo: Microsoft Visual Studio 2010 Express o Visual Studio 2010
edicin NET Framework 4.0
Opcional: Microsoft Speech Platform SDK v11 para desarrollo de aplicaciones con voz en
Kinect

1.5. Tecnologa

















1.6. Instalacin del SDK Versin 1.5

1. Asegrese de que el Sensor Kinect no este conectado a ningn Puerto USB de la
computadora.
2. Si alguna versin del SDK del Microsoft Kinect se encuentra instalada, deber desinstalarla
antes de proceder con la instalacin.
3. Remover cualquier otro driver del Sensor Kinect.
4. Desinstalar Microsoft Server Speech Platform Runtime o cualquier componente del
incluyendo ambas versions de x86 and x64 bit adems del Microsoft Server Speech
Recognition Language - Kinect Language Pack.
5. Cerrar Visual Studio.
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
8

6. Desde el archivo de instalacin, doble-click en KinectSDK-v1.5-Setup.exe, este instalador
es para ambas versiones 32-bit y 64-bit.




















Ejecutando el instalador


UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
9



Instalando la herramienta de desarrollo

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
10


7. Una vez que el SDK se ha instalado completamente exitosamente, asegrese de enchufar
el Sensor Kinect al tomacorriente y posteriormente conectarlo a un puerto USB de la
computadora. Los controladores se leern automticamente.

Asegurndonos de que los controladores se instalaron correctamente

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
11

8. El Sensor Kinect debera ahora trabajar correctamente. Abrir el ejemplo del Explorador del
Kinect desde el men Inicio, Todos los programas, Kinect for Windows SDK v1.5, Kinect
Studio v1.5.0.exe y verifique que el Sensor Kinect muestre la cadena Skeletor, la imagen a
color, profundidad de la imagen, y datos de audio.


UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
12

1.7. Operacin

1.7.1. Aplicacin para detectar el video del Sensor Kinect

Paso1: Abrir el Microsoft Visual C# 2010 y crear nuevo proyecto del tipo WPF y llamarlo
detecting









UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
13

Paso2: Agregar la referencia al Proyecto

Paso3: Copiar el siguiente cdigo fuente a MainWindow.xaml.cs

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
14

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Kinect;

namespace detecting
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{


/// <summary>
/// detecting a Kinect Sensor
/// </summary>
#region Member Variables
private KinectSensor _Kinect;
#endregion Member Variables

#region Constructor
public MainWindow()
{
InitializeComponent();

this.Loaded += (s, e) => { DiscoverKinectSensor(); };
this.Unloaded += (s, e) => { this.Kinect = null; };
}
#endregion Constructor

#region Methods
private void DiscoverKinectSensor()
{
KinectSensor.KinectSensors.StatusChanged += KinectSensors_StatusChanged;
this.Kinect = KinectSensor.KinectSensors.FirstOrDefault(x => x.Status ==
KinectStatus.Connected);
}

private void KinectSensors_StatusChanged(object sender, StatusChangedEventArgs e)
{
switch (e.Status)
{
case KinectStatus.Connected:
if (this.Kinect == null)
{
this.Kinect = e.Sensor;
}
break;

case KinectStatus.Disconnected:
if (this.Kinect == e.Sensor)
{
this.Kinect = null;
this.Kinect = KinectSensor.KinectSensors.FirstOrDefault(x => x.Status ==
KinectStatus.Connected);
if (this.Kinect == null)
{
//notify the user that the sensor is disconnected
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
15

}
}
break;
//handle all other statues according to needs
}
}
#endregion Methods




///Enabling the ColorImageStream
public KinectSensor Kinect
{
get { return this._Kinect; }
set
{
if (this._Kinect != value)
{
if (this._Kinect != null)
{
UninitializeKinectSensor(this._Kinect);
this._Kinect = null;
}
if (value != null && value.Status == KinectStatus.Connected)
{
this._Kinect = value;
InitializeKinectSensor(this._Kinect);
}
}
}
}


private void InitializeKinectSensor(KinectSensor sensor)
{
if (sensor != null)
{
sensor.ColorStream.Enable();
sensor.ColorFrameReady += Kinect_ColorFrameReady;
sensor.Start();
}
}


private void UninitializeKinectSensor(KinectSensor sensor)
{
if (sensor != null)
{
sensor.Stop();
sensor.ColorFrameReady -= Kinect_ColorFrameReady;
}
}



///Processing Color Image Frame Data
private void Kinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame frame = e.OpenColorImageFrame())
{
if (frame != null)
{
byte[] pixelData = new byte[frame.PixelDataLength];
frame.CopyPixelDataTo(pixelData);

ColorImageElement.Source = BitmapImage.Create(frame.Width, frame.Height, 96, 96,
PixelFormats.Bgr32, null, pixelData, frame.Width * frame.BytesPerPixel);
}
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
16

}
}




}
}

Paso4: Copiar el siguiente cdigo fuente a MainWindow.xaml

<Window x:Class="detecting.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="480" Width="640">
<Grid>
<Image x:Name="ColorImageElement">
</Image>
</Grid>
</Window>

Paso5: Ejecutar el proyecto
Se muestra la imgen que captura el sensor Kinect

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
17













UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
18

2. FUNCIONAMIENTO DEL KINECT

2.1. REQUERIMIENTOS
Para el funcionamiento del sensor Kinect se necesita haber instalado en la PC
el SDK (Software Development Kit) que lo podemos obtener del siguiente link
http://www.microsoft.com/en-us/kinectforwindows/ .


Click en el la ultima parte. (Dowload SDK)







Y podremos visualizar la descarga para el SDK y un toolkit (cdigos fuentes y ejemplos
desarrollados con el kinect).

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
19


2.2. ENCENDIDO DEL SENSOR
Luego de haber instalado los componentes del sensor, conectaremos el sensor a la PC a
travs del puerto USB y el enchufe hacia la corriente.




UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
20

2.3. ENCENDIDO DE LA CAMARA
En el cdigo fuente la regin de encendido de la cmara tenemos:
En la Regin ENCENDER LA CAMARA una subregin de Methods:
Regin Subregin Mtodo Descripcin
ENCENDER LA
CAMARA
Methods
DiscoverKinectSensor

Detecta si el
sensor est
conectado
Methods
KinectSensors_StatusChanged

Detecta si el
sensor a
cambiado de
estado:
Conectado a
Desconectado.

Kinect
Llamado para
inicializar el
sensor o no
inicializar
dependiendo la
deteccin del
sensor.

InitializeKinectSensor
Inicializa el Kinetc

UninitializeKinectSensor
No inicializa el
Kinetc

2.3.1. Cdigo Fuente
#region ENCENDER LA CAMARA
//ENCENDER LA CAMERA
#region Methods
private void DiscoverKinectSensor()
{
KinectSensor.KinectSensors.StatusChanged += KinectSensors_StatusChanged;
this.Kinect = KinectSensor.KinectSensors.FirstOrDefault(x => x.Status ==
KinectStatus.Connected);
}

private void KinectSensors_StatusChanged(object sender,
StatusChangedEventArgs e)
{
switch (e.Status)
{
case KinectStatus.Connected:
if (this.Kinect == null)
{
this.Kinect = e.Sensor;
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
21

}
break;

case KinectStatus.Disconnected:
if (this.Kinect == e.Sensor)
{
this.Kinect = null;
this.Kinect = KinectSensor.KinectSensors.FirstOrDefault(x =>
x.Status == KinectStatus.Connected);
if (this.Kinect == null)
{
//notify the user that the sensor is disconnected
}
}
break;
//handle all other statues according to needs
}
}
#endregion Methods
// Enabling the ColorImageStream
public KinectSensor Kinect
{
get { return this._Kinect; }
set
{
if (this._Kinect != value)
{
if (this._Kinect != null)
{
UninitializeKinectSensor(this._Kinect);
this._Kinect = null;
}
if (value != null && value.Status == KinectStatus.Connected)
{
this._Kinect = value;
InitializeKinectSensor(this._Kinect);
}
}
}
}


private void InitializeKinectSensor(KinectSensor sensor)
{
if (sensor != null)
{
sensor.ColorStream.Enable();
sensor.ColorFrameReady += Kinect_ColorFrameReady;
sensor.Start();
}
}


private void UninitializeKinectSensor(KinectSensor sensor)
{
if (sensor != null)
{
sensor.Stop();
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
22

sensor.ColorFrameReady -= Kinect_ColorFrameReady;
}
}

// Processing Color Image Frame Data
private void Kinect_ColorFrameReady(object sender,
ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame frame = e.OpenColorImageFrame())
{
if (frame != null)
{
byte[] pixelData = new byte[frame.PixelDataLength];
frame.CopyPixelDataTo(pixelData);

ColorImageElement.Source = BitmapImage.Create(frame.Width,
frame.Height, 96, 96, PixelFormats.Bgr32, null, pixelData, frame.Width *
frame.BytesPerPixel);
}
}
}
#endregion ENCENDER LA CAMARA

3. CAPTURA DE DATOS
La captura de datos se realiza a travs de la cmara del sensor en el cual captura los
puntos del cuerpo humano.
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
23

3.1. INTERFAZ
Para la solucin consideramos la siguiente interfaz:










El recuadro tenemos la cmara del Kinect.
Tenemos las clases: Lentamente, Normalmente, Trote, Rpido.
En los Botones consideramos la captura de los puntos del cuerpo humano as los
como datos ya trabajados de los puntos para el Entrenamiento y Prueba para el
modelo de aprendizaje. Ejecutando la interfaz tenemos:








UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
24


3.1.1. CODIGO FUENTE
El cdigo Fuente de la interfaz
<Window x:Class="EXTRACCION_DATOS.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="" Height="572" Width="685" Loaded="Window_Loaded">
<Grid Height="509">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="184*" />
<ColumnDefinition Width="151*" />
<ColumnDefinition Width="0*" />
<ColumnDefinition Width="328*" />
</Grid.ColumnDefinitions>
<Image x:Name="ColorImageElement" Margin="24,12,139,186" Grid.ColumnSpan="4"
ImageFailed="ColorImageElement_ImageFailed">
</Image>
<Button Content="Datos Prueba" Height="23" HorizontalAlignment="Left"
Margin="33,343,0,0" Name="button1" VerticalAlignment="Top" Width="115"
Click="button1_Click" Grid.Column="3" />
<Label Content="Clase" Height="28" HorizontalAlignment="Left"
Margin="17,326,0,0" Name="label1" VerticalAlignment="Top" Width="85"
FontWeight="Bold" FontSize="14" />
<RadioButton Content="Lentamente" Height="19" HorizontalAlignment="Left"
Margin="24,357,0,0" Name="rbLentamente" VerticalAlignment="Top" Width="108"
FontSize="14" Checked="rbHola_Checked" IsChecked="True" />
<RadioButton Content="Normalmente" Height="19" HorizontalAlignment="Left"
Margin="24,383,0,0" Name="rbNormalmente" VerticalAlignment="Top" FontSize="14" />
<Button Content="Entrenar Datos" Height="28" HorizontalAlignment="Left"
Margin="0,384,0,0" Name="button4" VerticalAlignment="Top" Width="124"
Click="button4_Click" Grid.ColumnSpan="2" Grid.Column="1" />
<Button Content="Datos Entrenamiento" Height="27" HorizontalAlignment="Left"
Margin="0,339,0,0" Name="button5" VerticalAlignment="Top" Width="129"
Click="button5_Click" Grid.ColumnSpan="2" Grid.Column="1" />
<Label Content="CLASE" Height="83" HorizontalAlignment="Left"
Margin="77,399,0,0" Name="Clase" VerticalAlignment="Top" Width="230" FontSize="64"
Grid.Column="3" />
<RadioButton Content="Trote" Height="19" HorizontalAlignment="Left"
Margin="24,407,0,0" Name="rbTrote" VerticalAlignment="Top" FontSize="14" />
<RadioButton Content="Rapido" Height="19" HorizontalAlignment="Left"
Margin="24,431,0,0" Name="rbRapido" VerticalAlignment="Top" FontSize="14" />
<Button Content="Prueba" Height="23" HorizontalAlignment="Left"
Margin="33,389,0,0" Name="button2" VerticalAlignment="Top" Width="115"
Click="button2_Click" Grid.Column="3" />
</Grid>
</Window>




UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
25

3.2. Datos de Entrenamiento
Los datos de entrenamiento se obtienen en al ejecutar la captura de datos haciendo clic
en el botn Data Entrenamiento y se obtienen los puntos del cuerpo humano.






El otro botn (Entrenar Datos) se refiere a la ejecucin de 1 procedimiento almacenado en
el cual procesa los puntos hallando las distancias de un punto del cuerpo al centroide y el
ngulo que forma este vector con la vertical.
3.2.1. Cdigo Fuente
En la regin de entrenamiento del cdigo fuente tenemos los siguientes mtodos:
Mtodos Descripcin
button5_Click
Evento que se ejecuta
con el botn Datos
Entrenamiento en el cual
captura los puntos del
cuerpo humano y los
almacena en una base de
datos.
sensor_AllFramesReady
Evento llamado por el de
arriba para ontener el
skeleton del cuerpo
humano y almacena los
datos.
GetFirstSkeleton
Obtiene el skeleton del
cuerpo humano.
button4_Click
Evento que procesa la data
para el entrenamiento.


UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
26

#region ENTRENAMIENTO
private void button5_Click(object sender, RoutedEventArgs e)
{
KinectSensor sensor = KinectSensor.KinectSensors[0];
var parameters = new TransformSmoothParameters
{
Smoothing = 0.2f,
Correction = 0.0f,
Prediction = 0.0f,
JitterRadius = 1.0f,
MaxDeviationRadius = 0.5f
};
sensor.SkeletonStream.Enable(parameters);
//sensor.SkeletonStream.Enable();{}

sensor.AllFramesReady += new
EventHandler<AllFramesReadyEventArgs>(sensor_AllFramesReady);
sensor.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
sensor.Start();

}

void sensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
{
Skeleton skeleton = GetFirstSkeleton(e);
// SqlConnection conn = myConexion();
if (skeleton == null)
{
return;
}
//String xx = Convert.ToString(num_filas);
if (num_filas == 100)
{
return;
}
string condition = "";
if (rbLentamente.IsChecked == true)
{ condition = rbLentamente.Content.ToString(); }

if (rbNormalmente.IsChecked == true)
{
condition = rbNormalmente.Content.ToString();
}
if (rbTrote.IsChecked == true)
{
condition = rbTrote.Content.ToString();
}
if (rbRapido.IsChecked == true)
{
condition = rbRapido.Content.ToString();
}
//Acceso a Base de Datos
string Caden = "Data Source=.;Initial Catalog=Caminante;Integrated
Security=True";
//ConfigurationSettings.AppSettings["cnx"]
SqlConnection Cnn = new SqlConnection(Caden);
Cnn.Open();

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
27

// SqlConnection conexion = new
SqlConnection(ConfigurationManager.ConnectionStrings["cnx"].ConnectionString);

SqlCommand command = new SqlCommand("SP_Insert_Puntos", Cnn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Id", SqlDbType.BigInt).Value = num_filas;
command.Parameters.Add("@Clase", SqlDbType.VarChar).Value = condition;
//Puntos X
command.Parameters.Add("@XTobilloIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleLeft].Position.X;
command.Parameters.Add("@XTobilloDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleRight].Position.X;
command.Parameters.Add("@XCodoIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowLeft].Position.X;
command.Parameters.Add("@XCodoDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowRight].Position.X;
command.Parameters.Add("@XPieIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootLeft].Position.X;
command.Parameters.Add("@XPieDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootRight].Position.X;
command.Parameters.Add("@XManoIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandLeft].Position.X;
command.Parameters.Add("@XManoDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandRight].Position.X;
command.Parameters.Add("@XCabeza", SqlDbType.Float).Value =
skeleton.Joints[JointType.Head].Position.X;
command.Parameters.Add("@XCaderaCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipCenter].Position.X;
command.Parameters.Add("@XCaderaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipLeft].Position.X;
command.Parameters.Add("@XCaderaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipRight].Position.X;
command.Parameters.Add("@XRodillaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeLeft].Position.X;
command.Parameters.Add("@XRodillaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeRight].Position.X;
command.Parameters.Add("@XHombroCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderCenter].Position.X;
command.Parameters.Add("@XHombroIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderLeft].Position.X;
command.Parameters.Add("@XHombroDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderRight].Position.X;
command.Parameters.Add("@XColVertebral", SqlDbType.Float).Value =
skeleton.Joints[JointType.Spine].Position.X;
command.Parameters.Add("@XMuecaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristLeft].Position.X;
command.Parameters.Add("@XMuecaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristRight].Position.X;
//Puntos Y
command.Parameters.Add("@YTobilloIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleLeft].Position.Y;
command.Parameters.Add("@YTobilloDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleRight].Position.Y;
command.Parameters.Add("@YCodoIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowLeft].Position.Y;
command.Parameters.Add("@YCodoDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowRight].Position.Y;
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
28

command.Parameters.Add("@YPieIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootLeft].Position.Y;
command.Parameters.Add("@YPieDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootRight].Position.Y;
command.Parameters.Add("@YManoIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandLeft].Position.Y;
command.Parameters.Add("@YManoDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandRight].Position.Y;
command.Parameters.Add("@YCabeza", SqlDbType.Float).Value =
skeleton.Joints[JointType.Head].Position.Y;
command.Parameters.Add("@YCaderaCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipCenter].Position.Y;
command.Parameters.Add("@YCaderaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipLeft].Position.Y;
command.Parameters.Add("@YCaderaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipRight].Position.Y;
command.Parameters.Add("@YRodillaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeLeft].Position.Y;
command.Parameters.Add("@YRodillaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeRight].Position.Y;
command.Parameters.Add("@YHombroCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderCenter].Position.Y;
command.Parameters.Add("@YHombroIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderLeft].Position.Y;
command.Parameters.Add("@YHombroDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderRight].Position.Y;
command.Parameters.Add("@YColVertebral", SqlDbType.Float).Value =
skeleton.Joints[JointType.Spine].Position.Y;
command.Parameters.Add("@YMuecaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristLeft].Position.Y;
command.Parameters.Add("@YMuecaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristRight].Position.Y;
//Puntos Z
command.Parameters.Add("@ZTobilloIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleLeft].Position.Z;
command.Parameters.Add("@ZTobilloDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleRight].Position.Z;
command.Parameters.Add("@ZCodoIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowLeft].Position.Z;
command.Parameters.Add("@ZCodoDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowRight].Position.Z;
command.Parameters.Add("@ZPieIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootLeft].Position.Z;
command.Parameters.Add("@ZPieDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootRight].Position.Z;
command.Parameters.Add("@ZManoIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandLeft].Position.Z;
command.Parameters.Add("@ZManoDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandRight].Position.Z;
command.Parameters.Add("@ZCabeza", SqlDbType.Float).Value =
skeleton.Joints[JointType.Head].Position.Z;
command.Parameters.Add("@ZCaderaCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipCenter].Position.Z;
command.Parameters.Add("@ZCaderaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipLeft].Position.Z;
command.Parameters.Add("@ZCaderaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipRight].Position.Z;
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
29

command.Parameters.Add("@ZRodillaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeLeft].Position.Z;
command.Parameters.Add("@ZRodillaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeRight].Position.Z;
command.Parameters.Add("@ZHombroCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderCenter].Position.Z;
command.Parameters.Add("@ZHombroIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderLeft].Position.Z;
command.Parameters.Add("@ZHombroDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderRight].Position.Z;
command.Parameters.Add("@ZColVertebral", SqlDbType.Float).Value =
skeleton.Joints[JointType.Spine].Position.Z;
command.Parameters.Add("@ZMuecaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristLeft].Position.Z;
command.Parameters.Add("@ZMuecaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristRight].Position.Z;
command.ExecuteNonQuery();
Cnn.Close();
//Id = Id + 1;
num_filas = num_filas + 1;
}

Skeleton GetFirstSkeleton(AllFramesReadyEventArgs e)
{
using (SkeletonFrame skeletonFrameData = e.OpenSkeletonFrame())
{
if (skeletonFrameData == null)
{
return null;
}
skeletonFrameData.CopySkeletonDataTo(allSkeletons);

//get the first tracked skeleton
Skeleton first = (from j in allSkeletons
where j.TrackingState ==
SkeletonTrackingState.Tracked
select j).FirstOrDefault();
return first;

}
}

private void button4_Click(object sender, RoutedEventArgs e)
{
//Inserta distancias y angulos en la tabla de Entrenamiento
// SqlConnection conexionEntrenamiento = new
SqlConnection(ConfigurationManager.ConnectionStrings["cnx"].ConnectionString);
string CadenEntrenamiento = "Data Source=.;Initial
Catalog=Caminante;Integrated Security=True";
//ConfigurationSettings.AppSettings["cnx"]
SqlConnection CnnEntranamiento = new SqlConnection(CadenEntrenamiento);
CnnEntranamiento.Open();
SqlCommand comandEntrenamiento = new
SqlCommand("SP_Insert_Entrenamiento", CnnEntranamiento);
comandEntrenamiento.ExecuteNonQuery();
CnnEntranamiento.Close();
}

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
30

private void Window_Loaded(object sender, RoutedEventArgs e)
{

}

private void rbHola_Checked(object sender, RoutedEventArgs e)
{

}



private void ColorImageElement_ImageFailed(object sender,
ExceptionRoutedEventArgs e)
{

}

}
}
#endregion ENTRENAMIENTO

3.3. Datos de Prueba
Los datos de prueba se obtienen haciendo clic en el botn Data Prueba y se obtienen los
puntos del cuerpo humano.



El otro botn (Prueba) se refiere a la ejecucin de 1 procedimiento almacenado en el cual
procesa los puntos hallando las distancias de un punto del cuerpo al centroide y el ngulo
que forma este vector con la vertical.
3.3.1. Cdigo Fuente
En la regin de entrenamiento del cdigo fuente tenemos los siguientes mtodos:
Mtodos Descripcin
button1_Click

Evento que se ejecuta
con el botn Datos
Prueba en el cual
captura los puntos del
cuerpo humano y los
almacena en una tabla de
la base de datos.
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
31

sensor_AllFramesReadyPrueba

Evento llamado por el de
arriba para obtener el
skeleton del cuerpo
humano y almacena los
datos.
GetFirstSkeleton
Obtiene el skeleton del
cuerpo humano.
button2_Click

Evento que procesa la data
para la prueba. (Halla
distancia y angulos).

#region PRUEBA
//EVENTO CLICK EXTRACCION DE DATOS
public void button1_Click(object sender, RoutedEventArgs e)
{

KinectSensor sensor = KinectSensor.KinectSensors[0];
var parameters = new TransformSmoothParameters
{
Smoothing = 0.2f,
Correction = 0.0f,
Prediction = 0.0f,
JitterRadius = 1.0f,
MaxDeviationRadius = 0.5f
};
sensor.SkeletonStream.Enable(parameters);
//sensor.SkeletonStream.Enable();{}

sensor.AllFramesReady += new
EventHandler<AllFramesReadyEventArgs>(sensor_AllFramesReadyPrueba);
sensor.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
sensor.Start();
//ConeccionBD Conection = new ConeccionBD();
//Conection.ConeccionBDA();

}

private void button2_Click(object sender, RoutedEventArgs e)
{
//Inserta distancias y angulos en la tabla de Entrenamiento
// SqlConnection conexionEntrenamiento = new
SqlConnection(ConfigurationManager.ConnectionStrings["cnx"].ConnectionString);
string CadenPrueba = "Data Source=.;Initial Catalog=Caminante;Integrated
Security=True";
//ConfigurationSettings.AppSettings["cnx"]
SqlConnection CnnPrueba = new SqlConnection(CadenPrueba);
CnnPrueba.Open();
SqlCommand comandPrueba = new SqlCommand("SP_Insert_Prueba", CnnPrueba);
comandPrueba.ExecuteNonQuery();
CnnPrueba.Close();
}

void sensor_AllFramesReadyPrueba(object sender, AllFramesReadyEventArgs e)
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
32

{
Skeleton skeleton = GetFirstSkeleton(e);
// SqlConnection conn = myConexion();
if (skeleton == null)
{
return;
}
//String xx = Convert.ToString(num_filas);
if (num_filas == 100)
{
return;
}
string condition = "";
if (rbLentamente.IsChecked == true)
{ condition = rbLentamente.Content.ToString(); }

if (rbNormalmente.IsChecked == true)
{
condition = rbNormalmente.Content.ToString();
}
if (rbTrote.IsChecked == true)
{
condition = rbTrote.Content.ToString();
}
if (rbRapido.IsChecked == true)
{
condition = rbRapido.Content.ToString();
}
//Acceso a Base de Datos
string Caden = "Data Source=.;Initial Catalog=Caminante;Integrated
Security=True";
//ConfigurationSettings.AppSettings["cnx"]
SqlConnection CnxPrueba = new SqlConnection(Caden);
CnxPrueba.Open();

// SqlConnection conexion = new
SqlConnection(ConfigurationManager.ConnectionStrings["cnx"].ConnectionString);

SqlCommand command = new SqlCommand("SP_Insert_Puntos_Prueba",
CnxPrueba);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Id", SqlDbType.BigInt).Value = num_filas;
command.Parameters.Add("@Clase", SqlDbType.VarChar).Value = condition;
//Puntos X
command.Parameters.Add("@XTobilloIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleLeft].Position.X;
command.Parameters.Add("@XTobilloDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleRight].Position.X;
command.Parameters.Add("@XCodoIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowLeft].Position.X;
command.Parameters.Add("@XCodoDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowRight].Position.X;
command.Parameters.Add("@XPieIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootLeft].Position.X;
command.Parameters.Add("@XPieDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootRight].Position.X;
command.Parameters.Add("@XManoIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandLeft].Position.X;
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
33

command.Parameters.Add("@XManoDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandRight].Position.X;
command.Parameters.Add("@XCabeza", SqlDbType.Float).Value =
skeleton.Joints[JointType.Head].Position.X;
command.Parameters.Add("@XCaderaCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipCenter].Position.X;
command.Parameters.Add("@XCaderaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipLeft].Position.X;
command.Parameters.Add("@XCaderaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipRight].Position.X;
command.Parameters.Add("@XRodillaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeLeft].Position.X;
command.Parameters.Add("@XRodillaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeRight].Position.X;
command.Parameters.Add("@XHombroCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderCenter].Position.X;
command.Parameters.Add("@XHombroIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderLeft].Position.X;
command.Parameters.Add("@XHombroDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderRight].Position.X;
command.Parameters.Add("@XColVertebral", SqlDbType.Float).Value =
skeleton.Joints[JointType.Spine].Position.X;
command.Parameters.Add("@XMuecaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristLeft].Position.X;
command.Parameters.Add("@XMuecaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristRight].Position.X;
//Puntos Y
command.Parameters.Add("@YTobilloIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleLeft].Position.Y;
command.Parameters.Add("@YTobilloDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleRight].Position.Y;
command.Parameters.Add("@YCodoIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowLeft].Position.Y;
command.Parameters.Add("@YCodoDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowRight].Position.Y;
command.Parameters.Add("@YPieIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootLeft].Position.Y;
command.Parameters.Add("@YPieDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootRight].Position.Y;
command.Parameters.Add("@YManoIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandLeft].Position.Y;
command.Parameters.Add("@YManoDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandRight].Position.Y;
command.Parameters.Add("@YCabeza", SqlDbType.Float).Value =
skeleton.Joints[JointType.Head].Position.Y;
command.Parameters.Add("@YCaderaCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipCenter].Position.Y;
command.Parameters.Add("@YCaderaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipLeft].Position.Y;
command.Parameters.Add("@YCaderaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipRight].Position.Y;
command.Parameters.Add("@YRodillaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeLeft].Position.Y;
command.Parameters.Add("@YRodillaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeRight].Position.Y;
command.Parameters.Add("@YHombroCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderCenter].Position.Y;
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
34

command.Parameters.Add("@YHombroIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderLeft].Position.Y;
command.Parameters.Add("@YHombroDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderRight].Position.Y;
command.Parameters.Add("@YColVertebral", SqlDbType.Float).Value =
skeleton.Joints[JointType.Spine].Position.Y;
command.Parameters.Add("@YMuecaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristLeft].Position.Y;
command.Parameters.Add("@YMuecaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristRight].Position.Y;
//Puntos Z
command.Parameters.Add("@ZTobilloIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleLeft].Position.Z;
command.Parameters.Add("@ZTobilloDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.AnkleRight].Position.Z;
command.Parameters.Add("@ZCodoIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowLeft].Position.Z;
command.Parameters.Add("@ZCodoDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ElbowRight].Position.Z;
command.Parameters.Add("@ZPieIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootLeft].Position.Z;
command.Parameters.Add("@ZPieDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.FootRight].Position.Z;
command.Parameters.Add("@ZManoIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandLeft].Position.Z;
command.Parameters.Add("@ZManoDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HandRight].Position.Z;
command.Parameters.Add("@ZCabeza", SqlDbType.Float).Value =
skeleton.Joints[JointType.Head].Position.Z;
command.Parameters.Add("@ZCaderaCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipCenter].Position.Z;
command.Parameters.Add("@ZCaderaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipLeft].Position.Z;
command.Parameters.Add("@ZCaderaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.HipRight].Position.Z;
command.Parameters.Add("@ZRodillaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeLeft].Position.Z;
command.Parameters.Add("@ZRodillaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.KneeRight].Position.Z;
command.Parameters.Add("@ZHombroCentro", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderCenter].Position.Z;
command.Parameters.Add("@ZHombroIzquierdo", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderLeft].Position.Z;
command.Parameters.Add("@ZHombroDerecho", SqlDbType.Float).Value =
skeleton.Joints[JointType.ShoulderRight].Position.Z;
command.Parameters.Add("@ZColVertebral", SqlDbType.Float).Value =
skeleton.Joints[JointType.Spine].Position.Z;
command.Parameters.Add("@ZMuecaIzquierda", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristLeft].Position.Z;
command.Parameters.Add("@ZMuecaDerecha", SqlDbType.Float).Value =
skeleton.Joints[JointType.WristRight].Position.Z;
command.ExecuteNonQuery();
CnxPrueba.Close();
//Id = Id + 1;
num_filas = num_filas + 1;
}
#endregion PRUEBA

UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
35

4. BASE DE DATOS
4.1. Tablas
Tenemos las tablas para la capturas de puntos en los ejes X,Y y Z,
As como las Tablas de Entrenamiento y Prueba hallando en este caso las distancias y
ngulos.










Posicin X

CREATE TABLE [dbo].[PosicionesX](
[AnkleLeft] [decimal](20, 8) NULL,
[AnkleRight] [decimal](20, 8) NULL,
[ElbowLeft] [decimal](20, 8) NULL,
[ElbowRight] [decimal](20, 8) NULL,
[FootLeft] [decimal](20, 8) NULL,
[FootRight] [decimal](20, 8) NULL,
[HandLeft] [decimal](20, 8) NULL,
[HandRight] [decimal](20, 8) NULL,
[Head] [decimal](20, 8) NULL,
[HipCenter] [decimal](20, 8) NULL,
[HipLeft] [decimal](20, 8) NULL,
[HipRight] [decimal](20, 8) NULL,
[KneeLeft] [decimal](20, 8) NULL,
[KneeRight] [decimal](20, 8) NULL,
[ShoulderCenter] [decimal](20, 8) NULL,
[ShoulderLeft] [decimal](20, 8) NULL,
[ShoulderRight] [decimal](20, 8) NULL,
[Spine] [decimal](20, 8) NULL,
[WristLeft] [decimal](20, 8) NULL,
[WristRight] [decimal](20, 8) NULL,
[Id] [int] IDENTITY(1,1) NOT NULL
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
36

) ON [PRIMARY]

Posicin Y

CREATE TABLE [dbo].[PosicionesY](
[Id] [bigint] NULL,
[Clase] [nvarchar](250) NULL,
[TobilloIzquierdo] [decimal](20, 4) NULL,
[TobilloDerecho] [decimal](20, 4) NULL,
[CodoIzquierdo] [decimal](20, 4) NULL,
[CodoDerecho] [decimal](20, 4) NULL,
[PieIzquierdo] [decimal](20, 4) NULL,
[PieDerecho] [decimal](20, 4) NULL,
[ManoIzquierda] [decimal](20, 4) NULL,
[ManoDerecha] [decimal](20, 4) NULL,
[Cabeza] [decimal](20, 4) NULL,
[CaderaCentro] [decimal](20, 4) NULL,
[CaderaIzquierda] [decimal](20, 4) NULL,
[CaderaDerecha] [decimal](20, 4) NULL,
[RodillaIzquierda] [decimal](20, 4) NULL,
[RodillaDerecha] [decimal](20, 4) NULL,
[HombroCentro] [decimal](20, 4) NULL,
[HombroIzquierdo] [decimal](20, 4) NULL,
[HombroDerecho] [decimal](20, 4) NULL,
[ColVertebral] [decimal](20, 4) NULL,
[MuecaIzquierda] [decimal](20, 4) NULL,
[MuecaDerecha] [decimal](20, 4) NULL
) ON [PRIMARY]


CREATE TABLE [dbo].[PosicionesZ](
[Id] [bigint] NULL,
[Clase] [nvarchar](250) NULL,
[TobilloIzquierdo] [decimal](20, 4) NULL,
[TobilloDerecho] [decimal](20, 4) NULL,
[CodoIzquierdo] [decimal](20, 4) NULL,
[CodoDerecho] [decimal](20, 4) NULL,
[PieIzquierdo] [decimal](20, 4) NULL,
[PieDerecho] [decimal](20, 4) NULL,
[ManoIzquierda] [decimal](20, 4) NULL,
[ManoDerecha] [decimal](20, 4) NULL,
[Cabeza] [decimal](20, 4) NULL,
[CaderaCentro] [decimal](20, 4) NULL,
[CaderaIzquierda] [decimal](20, 4) NULL,
[CaderaDerecha] [decimal](20, 4) NULL,
[RodillaIzquierda] [decimal](20, 4) NULL,
[RodillaDerecha] [decimal](20, 4) NULL,
[HombroCentro] [decimal](20, 4) NULL,
[HombroIzquierdo] [decimal](20, 4) NULL,
[HombroDerecho] [decimal](20, 4) NULL,
[ColVertebral] [decimal](20, 4) NULL,
[MuecaIzquierda] [decimal](20, 4) NULL,
[MuecaDerecha] [decimal](20, 4) NULL
) ON [PRIMARY]
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
37


GO


Tabla_Entrenamiento:

CREATE TABLE [dbo].[Tabla_Entrenamiento](
[ID] [bigint] NOT NULL,
[TobilloIzquierdoDistancia] [decimal](20, 4) NULL,
[TobilloIzquierdoAngulo] [decimal](20, 4) NULL,
[TobilloDerechoDistancia] [decimal](20, 4) NULL,
[TobilloDerechoAngulo] [decimal](20, 4) NULL,
[CodoIzquierdoDistancia] [decimal](20, 4) NULL,
[CodoIzquierdoAngulo] [decimal](20, 4) NULL,
[CodoDerechoDistancia] [decimal](20, 4) NULL,
[CodoDerechoAngulo] [decimal](20, 4) NULL,
[PieIzquierdoDistancia] [decimal](20, 4) NULL,
[PieIzquierdoAngulo] [decimal](20, 4) NULL,
[PieDerechoDistancia] [decimal](20, 4) NULL,
[PieDerechoAngulo] [decimal](20, 4) NULL,
[ManoIzquierdaDistancia] [decimal](20, 4) NULL,
[ManoIzquierdaAngulo] [decimal](20, 4) NULL,
[ManoDerechaDistancia] [decimal](20, 4) NULL,
[ManoDerechaAngulo] [decimal](20, 4) NULL,
[CaderaIzquierdaDistancia] [decimal](20, 4) NULL,
[CaderaIzquierdaAngulo] [decimal](20, 4) NULL,
[CaderaDerechaDistancia] [decimal](20, 4) NULL,
[CaderaDerechaAngulo] [decimal](20, 4) NULL,
[RodillaIzquierdaDistancia] [decimal](20, 4) NULL,
[RodillaIzquierdaAngulo] [decimal](20, 4) NULL,
[RodillaDerechaDistancia] [decimal](20, 4) NULL,
[RodillaDerechaAngulo] [decimal](20, 4) NULL,
[HombroIzquierdoDistancia] [decimal](20, 4) NULL,
[HombroIzquierdoAngulo] [decimal](20, 4) NULL,
[HombroDerechoDistancia] [decimal](20, 4) NULL,
[HombroDerechoAngulo] [decimal](20, 4) NULL,
[MuecaIzquierdaDistancia] [decimal](20, 4) NULL,
[MuecaIzquierdaAngulo] [decimal](20, 4) NULL,
[MuecaDerechaDistancia] [decimal](20, 4) NULL,
[MuecaDerechaAngulo] [decimal](20, 4) NULL,
[Clase] [nvarchar](250) NULL
) ON [PRIMARY]

Tabla_Prueba:

CREATE TABLE [dbo].[Tabla_Prueba](
[ID] [bigint] NOT NULL,
[TobilloIzquierdoDistancia] [decimal](20, 4) NULL,
[TobilloIzquierdoAngulo] [decimal](20, 4) NULL,
[TobilloDerechoDistancia] [decimal](20, 4) NULL,
[TobilloDerechoAngulo] [decimal](20, 4) NULL,
[CodoIzquierdoDistancia] [decimal](20, 4) NULL,
[CodoIzquierdoAngulo] [decimal](20, 4) NULL,
[CodoDerechoDistancia] [decimal](20, 4) NULL,
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
38

[CodoDerechoAngulo] [decimal](20, 4) NULL,
[PieIzquierdoDistancia] [decimal](20, 4) NULL,
[PieIzquierdoAngulo] [decimal](20, 4) NULL,
[PieDerechoDistancia] [decimal](20, 4) NULL,
[PieDerechoAngulo] [decimal](20, 4) NULL,
[ManoIzquierdaDistancia] [decimal](20, 4) NULL,
[ManoIzquierdaAngulo] [decimal](20, 4) NULL,
[ManoDerechaDistancia] [decimal](20, 4) NULL,
[ManoDerechaAngulo] [decimal](20, 4) NULL,
[CaderaIzquierdaDistancia] [decimal](20, 4) NULL,
[CaderaIzquierdaAngulo] [decimal](20, 4) NULL,
[CaderaDerechaDistancia] [decimal](20, 4) NULL,
[CaderaDerechaAngulo] [decimal](20, 4) NULL,
[RodillaIzquierdaDistancia] [decimal](20, 4) NULL,
[RodillaIzquierdaAngulo] [decimal](20, 4) NULL,
[RodillaDerechaDistancia] [decimal](20, 4) NULL,
[RodillaDerechaAngulo] [decimal](20, 4) NULL,
[HombroIzquierdoDistancia] [decimal](20, 4) NULL,
[HombroIzquierdoAngulo] [decimal](20, 4) NULL,
[HombroDerechoDistancia] [decimal](20, 4) NULL,
[HombroDerechoAngulo] [decimal](20, 4) NULL,
[MuecaIzquierdaDistancia] [decimal](20, 4) NULL,
[MuecaIzquierdaAngulo] [decimal](20, 4) NULL,
[MuecaDerechaDistancia] [decimal](20, 4) NULL,
[MuecaDerechaAngulo] [decimal](20, 4) NULL,
[Clase] [nvarchar](250) NULL
) ON [PRIMARY]

4.2. Procedimientos Almacenados
Los procedimientos almacenados que se ejecutan son:









Y las funciones que hallan el ngulo y distancia.
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
39

Script Insercin de las coordenadas


CREATE PROCEDURE [dbo].[SP_Insert_Puntos]
-- Add the parameters for the stored procedure here
@Id bigint,
@Clase nvarchar(250),
@XTobilloIzquierdo decimal(20,8) ,
@XTobilloDerecho decimal(20,8) ,
@XCodoIzquierdo decimal(20,8) ,
@XCodoDerecho decimal(20,8) ,
@XPieIzquierdo decimal(20,8) ,
@XPieDerecho decimal(20,8) ,
@XManoIzquierda decimal(20,8) ,
@XManoDerecha decimal(20,8) ,
@XCabeza decimal(20,8) ,
@XCaderaCentro decimal(20,8) ,
@XCaderaIzquierda decimal(20,8) ,
@XCaderaDerecha decimal(20,8) ,
@XRodillaIzquierda decimal(20,8) ,
@XRodillaDerecha decimal(20,8) ,
@XHombroCentro decimal(20,8) ,
@XHombroIzquierdo decimal(20,8) ,
@XHombroDerecho decimal(20,8) ,
@XColVertebral decimal(20,8) ,
@XMuecaIzquierda decimal(20,8) ,
@XMuecaDerecha decimal(20,8) ,
@YTobilloIzquierdo decimal(20,8) ,
@YTobilloDerecho decimal(20,8) ,
@YCodoIzquierdo decimal(20,8) ,
@YCodoDerecho decimal(20,8) ,
@YPieIzquierdo decimal(20,8) ,
@YPieDerecho decimal(20,8) ,
@YManoIzquierda decimal(20,8) ,
@YManoDerecha decimal(20,8) ,
@YCabeza decimal(20,8) ,
@YCaderaCentro decimal(20,8),
@YCaderaIzquierda decimal(20,8) ,
@YCaderaDerecha decimal(20,8) ,
@YRodillaIzquierda decimal(20,8) ,
@YRodillaDerecha decimal(20,8) ,
@YHombroCentro decimal(20,8) ,
@YHombroIzquierdo decimal(20,8) ,
@YHombroDerecho decimal(20,8) ,
@YColVertebral decimal(20,8) ,
@YMuecaIzquierda decimal(20,8) ,
@YMuecaDerecha decimal(20,8) ,
@ZTobilloIzquierdo decimal(20,8) ,
@ZTobilloDerecho decimal(20,8) ,
@ZCodoIzquierdo decimal(20,8) ,
@ZCodoDerecho decimal(20,8) ,
@ZPieIzquierdo decimal(20,8) ,
@ZPieDerecho decimal(20,8) ,
@ZManoIzquierda decimal(20,8) ,
@ZManoDerecha decimal(20,8) ,
@ZCabeza decimal(20,8) ,
@ZCaderaCentro decimal(20,8),
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
40

@ZCaderaIzquierda decimal(20,8) ,
@ZCaderaDerecha decimal(20,8) ,
@ZRodillaIzquierda decimal(20,8) ,
@ZRodillaDerecha decimal(20,8) ,
@ZHombroCentro decimal(20,8) ,
@ZHombroIzquierdo decimal(20,8) ,
@ZHombroDerecho decimal(20,8) ,
@ZColVertebral decimal(20,8) ,
@ZMuecaIzquierda decimal(20,8) ,
@ZMuecaDerecha decimal(20,8)

AS
BEGIN
INSERT INTO PosicionesX
VALUES (@Id,@Clase,@XTobilloIzquierdo
,@XTobilloDerecho,@XCodoIzquierdo,@XCodoDerecho,@XPieIzquierdo,@XPieDerec
ho,@XManoIzquierda,@XManoDerecha,@XCabeza,
@XCaderaCentro,@XCaderaIzquierda
,@XCaderaDerecha,@XRodillaIzquierda,@XRodillaDerecha,@XHombroCentro,@XHom
broIzquierdo,@XHombroDerecho,@XColVertebral,@XMuecaIzquierda,
@XMuecaDerecha)

INSERT INTO PosicionesY
VALUES (@Id,@Clase,@YTobilloIzquierdo
,@YTobilloDerecho,@YCodoIzquierdo,@YCodoDerecho,@YPieIzquierdo,@YPieDerec
ho,@YManoIzquierda,@YManoDerecha,@YCabeza,
@YCaderaCentro,@YCaderaIzquierda
,@YCaderaDerecha,@YRodillaIzquierda,@YRodillaDerecha,@YHombroCentro,@YHom
broIzquierdo,@YHombroDerecho,@YColVertebral,@YMuecaIzquierda,
@YMuecaDerecha)

INSERT INTO PosicionesZ
VALUES (@Id,@Clase,@ZTobilloIzquierdo
,@ZTobilloDerecho,@ZCodoIzquierdo,@ZCodoDerecho,@ZPieIzquierdo,@ZPieDerec
ho,@ZManoIzquierda,@ZManoDerecha,@ZCabeza,
@ZCaderaCentro,@ZCaderaIzquierda
,@ZCaderaDerecha,@ZRodillaIzquierda,@ZRodillaDerecha,@ZHombroCentro,@ZHom
broIzquierdo,@ZHombroDerecho,@ZColVertebral,@ZMuecaIzquierda,
@ZMuecaDerecha)

--INSERT INTO Tabla_Entrenamiento(Id,Distancia,Angulo,clase)
--
VALUES(@Id,dbo.DISTANCIA(@XTobilloDerecho,@YMuecaDerecha,@XCodoDerecho,@
YCodoDerecho) ,
--
dbo.tangente(@XCodoDerecho,@YCodoDerecho,@XTobilloIzquierdo,@YHombroDerec
ho),
--@clase)
END




UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
41

Insercin de los datos procesados

GO
ALTER PROCEDURE [dbo].[SP_Insert_Entrenamiento]
AS
INSERT INTO Tabla_Entrenamiento
SELECT PosicionesX.Id,
dbo.DISTANCIA(PosicionesX.TobilloIzquiedo,PosicionesY.TobilloIzquierdo,Po
sicionesZ.TobilloIzquierdo,PosicionesX.ColVertebral,PosicionesY.ColVerteb
ral,PosicionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.TobilloIzquiedo,PosicionesY.TobilloIzquierdo,Posic
ionesZ.TobilloIzquierdo,PosicionesX.ColVertebral,PosicionesY.ColVertebral
,PosicionesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.TobilloDerecho,PosicionesY.TobilloDerecho,Posic
ionesZ.TobilloDerecho,PosicionesX.ColVertebral,PosicionesY.ColVertebral,P
osicionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.TobilloDerecho,PosicionesY.TobilloDerecho,Posicion
esZ.TobilloDerecho,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posi
cionesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.CodoIzquierdo,PosicionesY.CodoIzquierdo,Posicio
nesZ.CodoIzquierdo,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posi
cionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.CodoIzquierdo,PosicionesY.CodoIzquierdo,Posiciones
Z.CodoIzquierdo,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posicio
nesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.CodoDerecho,PosicionesY.CodoDerecho,PosicionesZ
.CodoDerecho,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posiciones
Z.ColVertebral),
dbo.ANGULO(PosicionesX.CodoDerecho,PosicionesY.CodoDerecho,PosicionesZ.Co
doDerecho,PosicionesX.ColVertebral,PosicionesY.ColVertebral,PosicionesZ.C
olVertebral),
dbo.DISTANCIA(PosicionesX.PieIzquierdo,PosicionesY.PieIzquierdo,Posicione
sZ.PieIzquierdo,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posicio
nesZ.ColVertebral),
dbo.ANGULO(PosicionesX.PieIzquierdo,PosicionesY.PieIzquierdo,PosicionesZ.
PieIzquierdo,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posiciones
Z.ColVertebral),
dbo.DISTANCIA(PosicionesX.PieDerecho,PosicionesY.PieDerecho,PosicionesZ.P
ieDerecho,PosicionesX.ColVertebral,PosicionesY.ColVertebral,PosicionesZ.C
olVertebral),
dbo.ANGULO(PosicionesX.PieDerecho,PosicionesY.PieDerecho,PosicionesZ.PieD
erecho,PosicionesX.ColVertebral,PosicionesY.ColVertebral,PosicionesZ.ColV
ertebral),
dbo.DISTANCIA(PosicionesX.ManoIzquierda,PosicionesY.ManoIzquierda,Posicio
nesZ.ManoIzquierda,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posi
cionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.ManoIzquierda,PosicionesY.ManoIzquierda,Posiciones
Z.ManoIzquierda,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posicio
nesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.ManoDerecha,PosicionesY.ManoDerecha,PosicionesZ
.ManoDerecha,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posiciones
Z.ColVertebral),
dbo.ANGULO(PosicionesX.ManoDerecha,PosicionesY.ManoDerecha,PosicionesZ.Ma
noDerecha,PosicionesX.ColVertebral,PosicionesY.ColVertebral,PosicionesZ.C
olVertebral),
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
42

dbo.DISTANCIA(PosicionesX.CaderaIzquierda,PosicionesY.CaderaIzquierda,Pos
icionesZ.CaderaIzquierda,PosicionesX.ColVertebral,PosicionesY.ColVertebra
l,PosicionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.CaderaIzquierda,PosicionesY.CaderaIzquierda,Posici
onesZ.CaderaIzquierda,PosicionesX.ColVertebral,PosicionesY.ColVertebral,P
osicionesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.CaderaDerecha,PosicionesY.CaderaDerecha,Posicio
nesZ.CaderaDerecha,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posi
cionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.CaderaDerecha,PosicionesY.CaderaDerecha,Posiciones
Z.CaderaDerecha,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posicio
nesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.RodillaIzquierda,PosicionesY.RodillaIzquierda,P
osicionesZ.RodillaIzquierda,PosicionesX.ColVertebral,PosicionesY.ColVerte
bral,PosicionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.RodillaIzquierda,PosicionesY.RodillaIzquierda,Posi
cionesZ.RodillaIzquierda,PosicionesX.ColVertebral,PosicionesY.ColVertebra
l,PosicionesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.RodillaDerecha,PosicionesY.RodillaDerecha,Posic
ionesZ.RodillaDerecha,PosicionesX.ColVertebral,PosicionesY.ColVertebral,P
osicionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.RodillaDerecha,PosicionesY.RodillaDerecha,Posicion
esZ.RodillaDerecha,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posi
cionesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.HombroIzquierdo,PosicionesY.HombroIzquierdo,Pos
icionesZ.HombroIzquierdo,PosicionesX.ColVertebral,PosicionesY.ColVertebra
l,PosicionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.HombroIzquierdo,PosicionesY.HombroIzquierdo,Posici
onesZ.HombroIzquierdo,PosicionesX.ColVertebral,PosicionesY.ColVertebral,P
osicionesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.HombroDerecho,PosicionesY.HombroDerecho,Posicio
nesZ.HombroDerecho,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posi
cionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.HombroDerecho,PosicionesY.HombroDerecho,Posiciones
Z.HombroDerecho,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posicio
nesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.MuecaIzquierda,PosicionesY.MuecaIzquierda,Pos
icionesZ.MuecaIzquierda,PosicionesX.ColVertebral,PosicionesY.ColVertebra
l,PosicionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.MuecaIzquierda,PosicionesY.MuecaIzquierda,Posici
onesZ.MuecaIzquierda,PosicionesX.ColVertebral,PosicionesY.ColVertebral,P
osicionesZ.ColVertebral),
dbo.DISTANCIA(PosicionesX.MuecaDerecha,PosicionesY.MuecaDerecha,Posicio
nesZ.MuecaDerecha,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posi
cionesZ.ColVertebral),
dbo.ANGULO(PosicionesX.MuecaDerecha,PosicionesY.MuecaDerecha,Posiciones
Z.MuecaDerecha,PosicionesX.ColVertebral,PosicionesY.ColVertebral,Posicio
nesZ.ColVertebral),
PosicionesX.Clase
FROM PosicionesX INNER JOIN PosicionesY
ON PosicionesX.Id=PosicionesY.Id AND PosicionesX.Clase=PosicionesY.Clase
INNER JOIN PosicionesZ
ON PosicionesX.Id=PosicionesZ.Id AND PosicionesX.Clase=PosicionesZ.Clase




UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
43


Funcin Distancia y Angulo


Angulo
ALTER FUNCTION [dbo].[ANGULO]
(
@X decimal(20,4),
@Y decimal(20,4),
@Z decimal(20,4),
@XCadera decimal(20,4),
@YCadera decimal(20,4),
@ZCadera decimal(20,4)
)
RETURNS decimal(20,4)
AS
BEGIN
DECLARE
@Angulo decimal(20,4)

IF (@YCadera<@Y)
BEGIN
SET @Angulo=ATAN(SQRT(((@XCadera-@X)*(@XCadera-@X))+(@ZCadera-
@Z)*(@ZCadera-@Z))/(@Y-@YCadera))*180/PI()
END
IF (@Y<@YCadera)
BEGIN
SET @Angulo=ATAN(SQRT(((@XCadera-@X)*(@XCadera-@X))+(@ZCadera-
@Z)*(@ZCadera-@Z))/(@YCadera-@Y))*180/PI()
END
IF (@Y=@YCadera)
BEGIN
SET @Angulo=NULL
END
RETURN @ANGULO

END
Distancia
ALTER FUNCTION [dbo].[DISTANCIA]
(
@X decimal(20,4),
@Y decimal(20,4),
@Z decimal(20,4),
@XCadera decimal(20,4),
@YCadera decimal(20,4),
@ZCadera decimal(20,4)
)
RETURNS decimal(20,4)
AS
BEGIN
DECLARE
@ValorX decimal(20,4),
@ValorY decimal(20,4),
@ValorZ decimal(20,4),
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
44

@ValorMX decimal(20,4),
@ValorMY decimal (20,8),
@ValorMZ decimal (20,8),
@ValorDistancia decimal(20,4)

SET @ValorX=(@XCadera-@X)
SET @ValorY=(@YCadera-@Y)
SET @ValorZ=(@ZCadera-@Z)

SET @ValorMX=(@ValorX*@ValorX)
SET @ValorMY=(@ValorY*@ValorY)
SET @ValorMZ=(@ValorZ*@ValorZ)
SET @ValorDistancia=SQRT(@ValorMX+@ValorMY+@ValorMZ)

RETURN @ValorDistancia

END

5. MODELO DE APRENDIZAJE

5.1. Construccin del Modelo
Paso1: CREAR EL ORIGEN DE DATOS:
Para esto se tiene que ejecutar el script:
CALL ASSprocs.CreateDataSource('DS_ORIGEN',
'Provider=SQLNCLI10.1;Data Source=.;
Integrated Security=SSPI;Initial
Catalog=Caminante','ImpersonateCurrentUser','','')
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
45


Grafico 1
Paso2: CREAR LA CONEXIN CON EL LINKED SERVER:
Para esto se tiene que ejecutar el script:
USE Caminante
EXEC Caminante.dbo.sp_addlinkedserver
@server = N'LINK_TEST', -- nombre del servidor vinculado
@srvproduct=N'DS_ORIGEN', -- nombre del origen de datos
@provider=N'MSOLAP', --protocolo
@datasrc=N'.', -- nombre del servidor
@catalog=N'KINECT' -- base de datos

Paso 3: CREAR La Estructura:
Para esto se tiene que ejecutar el script:
select * from openquery(LINK_TEST,'CALL DMXecute.DMXecute("
CREATE MINING STRUCTURE MS_EJEMPLO (
[ID] TEXT KEY,
[TobilloIzquierdoDistancia] DOUBLE CONTINUOUS,
[TobilloIzquierdoAngulo] DOUBLE CONTINUOUS,
[TobilloDerechoDistancia] DOUBLE CONTINUOUS,
[TobilloDerechoAngulo] DOUBLE CONTINUOUS,
[CodoIzquierdoDistancia] DOUBLE CONTINUOUS,
[CodoIzquierdoAngulo] DOUBLE CONTINUOUS,
[CodoDerechoDistancia] DOUBLE CONTINUOUS,
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
46

[CodoDerechoAngulo] DOUBLE CONTINUOUS,
[PieIzquierdoDistancia] DOUBLE CONTINUOUS,
[PieIzquierdoAngulo] DOUBLE CONTINUOUS,
[PieDerechoDistancia] DOUBLE CONTINUOUS,
[PieDerechoAngulo] DOUBLE CONTINUOUS,
[ManoIzquierdaDistancia] DOUBLE CONTINUOUS,
[ManoIzquierdaAngulo] DOUBLE CONTINUOUS,
[ManoDerechaDistancia] DOUBLE CONTINUOUS,
[ManoDerechaAngulo] DOUBLE CONTINUOUS,
[CaderaIzquierdaDistancia] DOUBLE CONTINUOUS,
[CaderaIzquierdaAngulo] DOUBLE CONTINUOUS,
[CaderaDerechaDistancia] DOUBLE CONTINUOUS,
[CaderaDerechaAngulo] DOUBLE CONTINUOUS,
[RodillaIzquierdaDistancia] DOUBLE CONTINUOUS,
[RodillaIzquierdaAngulo] DOUBLE CONTINUOUS,
[RodillaDerechaDistancia] DOUBLE CONTINUOUS,
[RodillaDerechaAngulo] DOUBLE CONTINUOUS,
[HombroIzquierdoDistancia] DOUBLE CONTINUOUS,
[HombroIzquierdoAngulo] DOUBLE CONTINUOUS,
[HombroDerechoDistancia] DOUBLE CONTINUOUS,
[HombroDerechoAngulo] DOUBLE CONTINUOUS,
[MuecaIzquierdaDistancia] DOUBLE CONTINUOUS,
[MuecaIzquierdaAngulo] DOUBLE CONTINUOUS,
[MuecaDerechaDistancia] DOUBLE CONTINUOUS,
[MuecaDerechaAngulo] DOUBLE CONTINUOUS,
[Clase] TEXT DISCRETE )
") ')

Paso 4: CREAR el Modelo de Redes Neuronales:
select * from openquery(LINK_TEST,'CALL DMXecute.DMXecute("
ALTER MINING STRUCTURE [MS_EJEMPLO]
ADD MINING MODEL [MM_RN]
(
[ID] ,
[TobilloIzquierdoDistancia] ,
[TobilloIzquierdoAngulo] ,
[TobilloDerechoDistancia] ,
[TobilloDerechoAngulo] ,
[CodoIzquierdoDistancia] ,
[CodoIzquierdoAngulo],
[CodoDerechoDistancia] ,
[CodoDerechoAngulo] ,
[PieIzquierdoDistancia] ,
[PieIzquierdoAngulo] ,
[PieDerechoDistancia] ,
[PieDerechoAngulo],
[ManoIzquierdaDistancia] ,
[ManoIzquierdaAngulo] ,
[ManoDerechaDistancia],
[ManoDerechaAngulo] ,
[CaderaIzquierdaDistancia],
[CaderaIzquierdaAngulo],
[CaderaDerechaDistancia] ,
[CaderaDerechaAngulo] ,
UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
47

[RodillaIzquierdaDistancia] ,
[RodillaIzquierdaAngulo] ,
[RodillaDerechaDistancia] ,
[RodillaDerechaAngulo] ,
[HombroIzquierdoDistancia] ,
[HombroIzquierdoAngulo] ,
[HombroDerechoDistancia] ,
[HombroDerechoAngulo],
[MuecaIzquierdaDistancia],
[MuecaIzquierdaAngulo] ,
[MuecaDerechaDistancia] ,
[MuecaDerechaAngulo],
[Clase] PREDICT)

USING Microsoft_Neural_Network(HIDDEN_NODE_RATIO=6)
") ')


















UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
48

ANEXO
Tablas de la Base de Datos











UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
49

TABLA PosicionesX , PosicionesY y PosicionesZ

Nombre Columna Tipo de Dato Tamao Descripcin
[ID] [bigint]
- Es el identificador de la fila
[TobilloIzquierdo] [decimal]
24

Es el valor del eje coordenado del
punto correspondiente
[TobilloDerechoDistancia] [decimal]
24
[CodoIzquierdoDistancia] [decimal]
24
[CodoDerechoDistancia] [decimal]
24
[PieIzquierdoDistancia] [decimal]
24
[PieDerechoDistancia] [decimal]
24
[ManoIzquierdaDistancia] [decimal]
24
[ManoDerechaDistancia] [decimal]
24
[CaderaIzquierdaDistancia] [decimal]
24
[CaderaDerechaDistancia] [decimal]
24
[RodillaIzquierdaDistancia] [decimal]
24
[RodillaDerechaDistancia] [decimal]
24
[HombroIzquierdoDistancia] [decimal]
24
[HombroDerechoDistancia] [decimal]
24
[MuecaIzquierdaDistancia] [decimal]
24
[MuecaDerechaDistancia] [decimal]
24































UNIVERSIDAD NACIONAL DE INGENIERA INTELIGENCIA ARTIFICIAL
50

Tabla Tabla_Entrenamiento
Nombre Columna Tipo de Dato Tamao Descripcin
[ID] [bigint]
- Es el identificador de la fila
[TobilloIzquierdoDistancia] [decimal]
24 Es el valor, ya sea del ngulo o la
distancia al punto asociado
[TobilloIzquierdoAngulo] [decimal]
24
[TobilloDerechoDistancia] [decimal]
24
[TobilloDerechoAngulo] [decimal]
24
[CodoIzquierdoDistancia] [decimal]
24
[CodoIzquierdoAngulo] [decimal]
24
[CodoDerechoDistancia] [decimal]
24
[CodoDerechoAngulo] [decimal]
24
[PieIzquierdoDistancia] [decimal]
24
[PieIzquierdoAngulo] [decimal]
24
[PieDerechoDistancia] [decimal]
24
[PieDerechoAngulo] [decimal]
24
[ManoIzquierdaDistancia] [decimal]
24
[ManoIzquierdaAngulo] [decimal]
24
[ManoDerechaDistancia] [decimal]
24
[ManoDerechaAngulo] [decimal]
24
[CaderaIzquierdaDistancia] [decimal]
24
[CaderaIzquierdaAngulo] [decimal]
24
[CaderaDerechaDistancia] [decimal]
24
[CaderaDerechaAngulo] [decimal]
24
[RodillaIzquierdaDistancia] [decimal]
24
[RodillaIzquierdaAngulo] [decimal]
24
[RodillaDerechaDistancia] [decimal]
24
[RodillaDerechaAngulo] [decimal]
24
[HombroIzquierdoDistancia] [decimal]
24
[HombroIzquierdoAngulo] [decimal]
24
[HombroDerechoDistancia] [decimal]
24
[HombroDerechoAngulo] [decimal]
24
[MuecaIzquierdaDistancia] [decimal]
24
[MuecaIzquierdaAngulo] [decimal]
24
[MuecaDerechaDistancia] [decimal]
24
[MuecaDerechaAngulo] [decimal]
24
[Clase] [nvarchar]
250 Es la clase