Ganador del Premio “Maestro que deja Huella 2014”

Estimados amigos y amigas:

El pasado 03 de julio del 2014, se realizó la elección del ganador del Premio “Maestro que deja Huella 2014”, organizado por el grupo INTERBANCK. Al concurso se presentaron 4800 proyectos de todo el Perú. Siendo elegido como ganador el Proyecto que se viene desarrollando “Mundo Aumentado X” y su servidor como Maestro que deja huella 2014.

Esto es un gran mérito, ya que se compitió con proyectos que promovían el logro de competencias en la  ciencia, el arte, la lectura,  la matemática y la cultura bajo enfoques muy diversos y criterios de trabajo que promueven la participación de la comunidad dentro de la escuela.

Nuestra propuesta de trabajo que integra la tecnología bajo un enfoque constructivista y de gestión de información logró alzarse como el proyecto ganador, siendo un éxito que permitirá reforzar la infraestructura tecnológica  y proponer nuevas alternativas del uso de las TIC con apoyo de la empresa privada. La propuesta integro:

  • El desarrollo de las nociones básicas de las matemáticas.
  • La producción de cuentos usando una plataforma virtual
  • El desarrollo del pensamiento computacional a través del uso de la robótica, y la programación; donde lo más destacado que se logró fue la construcción de traductores para el lenguaje de señas peruanas.
  • El arte y la creatividad, la sensibilidad social.
  • La investigación en el Museo Arqueológico de Ancash, la elaboración de contenidos para libros de realidad aumentada y un gran etc.

Sin duda el premio “Maestro que deja Huella” del grupo INTERBANK, es alentadora en todo sentido para los maestros peruanos, y debería ser imitada por otros grupos y empresas privadas. Ya que permite una inversión de cinco mil  dólares en el proyecto del docente ganador así como la difusión de su propuesta.

Finalmente, deseo expresar mi reconocimiento a todos los maestros que vienen dando todo de si para que la educación alcance el nivel que requerimos, porque: “Somos arquitectos de sueños y valores, contagiamos  alegría. Aunque nos salgan canas nuestro espíritu nuca envejece ya que nunca dejamos de aprender”

 

 

 

Realidad Aumentada aplicada a la Matemática

Luego de algún tiempo retomo la escritura en el blog, para comentarles el emprendimiento que se ha iniciado en favor de aplicar la tecnología de la Realidad Aumentada para poder reforzar los aprendizajes en matemática, fundamentalmente en los primeros grados.  El Informe Horizon 2010 elaborado por el eLearn Center de la UOC y el New Media Consortium   vaticinó que la realidad aumentada sencilla sólo tardaría de dos a tres años en imprimir una fuerte influencia en la educación; esta vaticinio se ha ido cumpliendo en estos cerca de 3 años; el grato reto que asumí fue poder ser referentes en el uso de esta tecnología; por fortuna se coincidió con la empresa mexicana  M.C. Ar  en este empeño y en estos meses estoy trabajando para ellos en el desarrollo de un sistema que pueda apoyar la enseñanza de las Matemáticas basándonos en la curricula de primer grado en México, que es muy similar en los contenidos a varias de las currículas latinoamericanas en especial la peruana.

Durante el desarrollo del proyecto se van construyendo  juegos de RA, que usan conceptos de las denominadas aplicaciones de computación basadas en el gesto. El lenguaje de programación que se eligió fue CSharp bajo el framework Microsoft XNA; dentro de este entorno se usaron  librerías de visión artificial basadas en OpenCV y adaptada a CSharp con la denominación de OpenCvSharp. Las aplicaciones construidas  logran interactividad a través de los gestos; usando para ello la detección de flujo de movimiento,  es decir, se determina el patrón aparente de movimiento de objetos, superficies, y los bordes en una escena visual que es causado por el movimiento relativo entre un observador (un ojo una cámara ) y la escena,

Experimentalmente se esta validando las aplicaciones en la  I.E. “Jesús Nazareno”, bajo estrategias del juego didáctico; donde se introducen los juegos  para poder validar sus resultados, que espero poder comentar en este espacio. Estos son algunos de los conceptos que se están trabajando:

–        Clasificación de objetos.

–        Seriación de objetos.

–        Representación de la cardinalidad de un conjunto de objetos.

–        Identificación de números ordinales.

–        Identificación de la relación “mayor que”, “menor que”, “igual que”

–        Sumar y restar de números.

Videos ilustrativos de lo que se esta avanzando:

Juan Cadillo

Contando experiencias con la Realidad Aumentada

La Realidad aumentada es una tecnología que nos permite representar con el proyector o sobre la pantalla objetos sintéticos  que podemos manipular de diferentes manera; existe diferentes niveles de complejidad; la más  difundida esta basada en marcadores que permiten ubicar sobre el marcadores videos, imágenes u objetos tridimensionales que se pueden girar y verlos desde diferentes ángulos. Para ello necesitamos un programa de interpretación, por ejemplo  BuildAr Viewer o Aumentaty, una cámara web que capture la imagen y los markers necesarios para cada objeto.Por mi experiencia se ha logrado extender el uso de Realidad Aumentada a juegos en los que no es necesario usar estos marcadores o en su defecto dar una mayor interactividad usando Etoy y Scratch con niños de Educación Primaria en Huaraz-Perú.

Así mismo formo parte de un proyecto que buscan construir en los próximos seis meses un set de juegos para enseñar matemática a los niños del primer grado en México usando Realidad Aumenta, que espero tenga el resultado esperado.

Este es un pequeño avance de esta primera semana de trabajo:

Juan Cadillo

Detalles Técnicos dentro del proyecto “Uso de las TICs en el desarrollo de las habilidades del Siglo XXI”

Dentro del proyecto “Uso de las TICs en el desarrollo de las habilidades del Siglo XXI”, se esta construyendo un conjunto de aplicaciones que posibiliten el uso efectivo de los contenidos preparados en base al trabajo con los niños y niñas.
En esta oportunidades les contaré del trabajo que vengo realizando en la construcción de una aplicación de realidad aumentada de la cual espero pueda motivar a los niños a aprender el lenguaje de señas; esta aplicación esta formada por varios componentes:

  • Componente de reconocimiento y ubicación del rostro
  • Componente de reconocimiento de voz
  • Componente de detección de movimiento y Menú
  • Componente de ubicación de contenidos

Veamos el primero:

Componente de reconocimiento y ubicación del rostro

La detección del rostro es uno de los elementos fundamentales en cualquier sistema de reconocimiento facial, en nuestro caso buscamos identificar un rostro y sobre su ubicación colocar contenido que ilustra el uso de un conjunto de señas. El identificador debe ser capaz de reconocer el rostro más grande dentro del flujo de video (esto debe ser independiente de la edad, el sexo y la orientación). Dentro del proyecto la implementación de este componente da pie a un conjunto de investigaciones de corte técnico para buscar una solución eficiente.
Algunos de los retos afrontados son la detección facial, el escalado, la pose, iluminación, la oclusión y la edad.
Por motivos de uso de plataformas el desarrollo se ha realizado sobre Csharp y OpenCVSharp; usando los algoritmos implementados para OpenCVSharp, siendo usadas las funciones de clasificación en cascada que usa la técnica de Viola y Jones.

detección de rostro

menurostro2
Este es el algoritmo en bruto que fue usado y optimizado para nuestro caso y es extraído de los ejemplos de OpenCvSharp 1.4.1

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;

namespace OpenCvSharp.Test
{
///

///

/// http://opencv.jp/sample/object_detection.html#face_detection
class FaceDetect
{
public FaceDetect()
{
// CvHaarClassifierCascade, cvHaarDetectObjects

CvColor[] colors = new CvColor[]{
new CvColor(0,0,255),
new CvColor(0,128,255),
new CvColor(0,255,255),
new CvColor(0,255,0),
new CvColor(255,128,0),
new CvColor(255,255,0),
new CvColor(255,0,0),
new CvColor(255,0,255),
};

const double Scale = 1.14;
const double ScaleFactor = 1.0850;
const int MinNeighbors = 2;

using (IplImage img = new IplImage(Const.ImageYalta, LoadMode.Color))
using (IplImage smallImg = new IplImage(new CvSize(Cv.Round(img.Width / Scale), Cv.Round(img.Height / Scale)), BitDepth.U8, 1))
{

using (IplImage gray = new IplImage(img.Size, BitDepth.U8, 1))
{
Cv.CvtColor(img, gray, ColorConversion.BgrToGray);
Cv.Resize(gray, smallImg, Interpolation.Linear);
Cv.EqualizeHist(smallImg, smallImg);
}

using (CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile(Const.XmlHaarcascade)) //
using (CvMemStorage storage = new CvMemStorage())
{
storage.Clear();

//
Stopwatch watch = Stopwatch.StartNew();
CvSeq faces = Cv.HaarDetectObjects(smallImg, cascade, storage, ScaleFactor, MinNeighbors, 0, new CvSize(30, 30));
watch.Stop();
Console.WriteLine(“detection time = {0}ms\n”, watch.ElapsedMilliseconds);

//
for (int i = 0; i < faces.Total; i++)
{
CvRect r = faces[i].Value.Rect;
CvPoint center = new CvPoint
{
X = Cv.Round((r.X + r.Width * 0.5) * Scale),
Y = Cv.Round((r.Y + r.Height * 0.5) * Scale)
};
int radius = Cv.Round((r.Width + r.Height) * 0.25 * Scale);
img.Circle(center, radius, colors[i % 8], 3, LineType.AntiAlias, 0);
}
}

//
CvWindow.ShowImages(img);
}
}
}
}

Componente de reconocimiento de voz:

Se esta usando los componentes de reconocimiento de voz de Microsoft en especial el System.Speech.Recognition, que permite el reconocimiento de voz; para reducir los tiempos se ha construido una gramática simple como por ejemplo reconocer cuatro palabras: izquierda, derecha e izquierda.

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Speech.Synthesis;
using System.Speech.Recognition;
using System.Speech.Recognition.SrgsGrammar;

namespace voz
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
SpeechSynthesizer mysyn = new SpeechSynthesizer();
SpriteFont letraPuntaje, letraPuntaje1;
string texto;
//SpeechRecognitionEngine _Recognition = new SpeechRecognitionEngine();
private SpeechRecognitionEngine reconocedor = new SpeechRecognitionEngine();
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = “Content”;
}

/// <summary>

protected override void Initialize()
{
// TODO: Add your initialization logic here
reconocedor.SetInputToDefaultAudioDevice();
texto = “derecha”;
SrgsDocument doc = new SrgsDocument();
SrgsRule rules = new SrgsRule(“rules”, new SrgsOneOf(“derecha”, “izquierda”, “arriba”, “abajo”));
doc.Rules.Add(rules);
doc.Root = rules;
doc.Culture = reconocedor.RecognizerInfo.Culture;
doc.Language = “es-ES”;
reconocedor.LoadGrammar(new Grammar(doc));//

reconocedor.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(reconocedor_SpeechRecognized);

reconocedor.RecognizeAsync(RecognizeMode.Multiple);
base.Initialize();
}

/// <summary>
/// LoadContent will be called once per game and is the place to load
/// all of your content.
/// </summary>
List<string> nombre = new List<string>();
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
letraPuntaje = Content.Load<SpriteFont>(“letra”);

foreach (InstalledVoice voz in mysyn.GetInstalledVoices())
{
nombre.Add(voz.VoiceInfo.Name.ToString());
}

// TODO: use this.Content to load your game content here
}
void reconocedor_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{

///destripa el datagrmaa

foreach (RecognizedWordUnit word in e.Result.Words)
{

texto = word.Text;
}
}
/// <summary>
/// UnloadContent will be called once per game and is the place to unload
/// all content.
/// </summary>
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}

/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name=”gameTime”>Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();

// TODO: Add your update logic here

base.Update(gameTime);
}

/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name=”gameTime”>Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

// TODO: Add your drawing code here

spriteBatch.Begin();
spriteBatch.DrawString(letraPuntaje, texto, new Vector2(60, 180),
Color.PaleVioletRed, MathHelper.ToRadians(0), new Vector2(0, 0), 2f, SpriteEffects.None, 0);
spriteBatch.End();
base.Draw(gameTime);
}

}
}

Componente de detección de movimiento y Menú

Respecto a este componente básicamente se cuenta en número de pixeles blancos dentro de una imagen en blanco y negro dentro de una región de la imagen ver la figura inferior.

blancoynegro

Componente de ubicación de contenidos

Este es el componente más importante y esta relacionado con el trabajo de los niños y niñas de la I.E. “Jesús Nazareno”. Ellos están aprendiendo de una manera muy dinámica el lenguaje de señas, este aprendizaje está siendo alentado por los padres de familia y afortunadamente con la participación de especialistas del Centro de Educación Especial “Señor de la Soledad” se ha podido mejorar la interpretación de las señas. Para ello se usan gif animados los que son ubicados sobre la posición de ubicación del rostro y se coordinan en base a estructuras CASE.

bailar trabajar comer barrer

Aquí la primera versión del Software

Juan Cadillo

Realidad Aumentada algo que puedes hacer en casa o la escuela fácilmente… te lo demostramos

Una de mis mayores pasiones en estos dos último años ha sido poder investigar y desarrollar aplicaciones con realidad aumentada, orientadas a favorecer el desarrollo de diferentes capacidades en los niños. Sin duda a lo largo de este tiempo han aparecido diversas aplicaciones que amplían las posibilidades de este nuevo concepto.

Mi mayor preocupación al inicio era poder crear estas aplicaciones y empoderarlas con la creación de contenido trabajada por los niños y niñas en base a la investigación, la cooperación y el trabajo social en nuestra comunidad. En todos los casos trabajados y que he visto  la realidad aumentada es un elemento motivador que desarrolla habilidades de búsqueda de información, trabajo en equipos, diseño de contenidos, comunicación… y un gran etc. pero los conceptos de como funciona y que hay dentro del backend de esta tecnología quedaban ocultas para los niños. Afortunadamente esto puede cambiar si usamos las posibilidades que ofrece la combinación de diferentes aplicaciones (lenguajes de programación) como Scratch, Etoys aunado a  Wedo (que en este caso lo usamos porque afortunadamente contamos con este recurso). Scratch y Etoys son software distribuidos libremente y sus posibilidades han ido mejorando.

El trabajo con los niños que estoy experimentando a los largo de estos años, es la posibilidad de poder enseñarles programación usando estos lenguajes visuales. La ventaja de estos es que reducen las dificultades propias del código y se centran en la lógica. Sea Scratch o Etoys cada uno tiene ciertas ventajas sobre el otro, pero si aprovechamos ambos las cosas se ponen mucho más interesantes. Es así que Scratch tiene aunado a su código la posibilidad de manejar sensores como los de WEDO, o recibir conexiones remotas; también existen adaptaciones que trabajan con Arduino y dan otras posibilidades. Etoys puede manejar una cámara(en su versión Windows, algo falla en las olpc pese a tener la misma versión) y tiene la posibilidad de enviar mensajes a Scratch.

Entonces la idea que surge es porque no utilizar estas aplicaciones en conjunto y crear una versión que pueda detectar color en Etoys y en base a esta detección enviarle mensajes a   Scratch. Y en Scratch que tiene comandos para WEDO poder mover los motores que trae este set, y eso es lo que estamos haciendo. Para los niños  es algo simple y hasta natural con el tiempo el  poder controlar cosas en base a la programación y entender como funcionan las cosas que usan.

Aquí el video:

Veamos las condiciones necesarias:

  • Tener instalado Etoys la última versión, por que en las anteriores la cámara no funcionaba.
  • Tener Scratch
  • Tener una cámara web (mucho de la calidad depende de tener una buena cámara)
  • Tener una manopla con un color homogéneo que sea diferente a los colores del fondo que usas

Pasos:

En esta primera oportunidad solo trabajaremos con Etoys

Abrir Etoys y comenzar un nuevo proyecto.

abrirEtoys

Ir a provisiones, catálogo de objetos.

abrirCatalogodeobjetosdeprovsiones

Pestaña multimedia y sacar al Mundo el objeto cámara.

multimediaCamara

Por lo general la cámara se activa, puedes agrandar o reducir la imagen (pero hay un máximo según la capacidad o flujo de la cámara y su rango o tamaño).

multimediaCamaraabierta

Pintar un objeto, como el famoso autito de Etoys.

pintarauto

Redirige la dirección del auto con Shift + movimiento del mouse sobre la flecha verde de dirección.

cambiadireccion

Pinta dos círculos, uno que diga atrás y otro adelante con sus respectivas flechas de manera  similar a como se hizo con el auto.

pintaCirculos

Mueve los círculos hacia la imagen.

muevecirculos

Si das click sobre el objeto cámara observarás su halo, ir a menú en la parte superior al lado de la X en el borde izquierdo. Configura la cámara en enviar al fondo, se resiste al avance; y al final del menu también esta la opción de apagar o encender la cámara (off, on).

configurarcamara

Colócate sobre el circulo, saca halo, abrir visor.

visorprogramacion

Saca al Mundo, Prueba Si No

pruebasino

Luego saca de Adelante(si colocaste ese nombre)la orden esta encima de color

encimadecolor

Luego colócate sobre el auto, saca halo, y coloca sobre el guión de Adelante, auto avanza 5, pero cambia ese valor por 10.

pruebasinoautoavanza

Selecciona con el cuenta gotas el color de tu guante, trata de que sea cerca del circulo ya que los colores varían en función de la cantidad de luz y la posición.

cuentagotas

Activa los guiones en el reloj de cada guión y todo terminado, tu primera aplicación de realidad aumentada esta listo para impresionar en casa o el colegio.

scripterminado

Lo último no olvides esconder los guiones para que se vea mejor y acercar el guante para que el carro se mueva adelante o atrás. el reto es mejor el guión para hacer otras cosas.

En posteriores post, les mostrare como interactuar con Scratch y WEDO.  Y si te gusto déjame un comentario.

Juan Cadillo

Desarrollo de un Multimarcador para Realidad Aumentada

Desde Diciembre del 2012 me empeñe en desarrollar mi propia detección de marcadores en CSharp y XNA, para ello estoy empleando OpenCvSharp, un marco de trabajo muy bueno que esta siendo portado desde OpenCv.

Para el desarrollo de diferentes pasos me he inspirado en js-aruco que me permitió entender los pasos para desarrollar la homografía. La codificación del marcador es propia y esta basada en una secuencia de 2 a la 9 combinaciones, es decir el marcador esta dividido en un tablero de 7 x 7 partes (49), de las cuales solo tomo 9 que son las centrales. La parte exterior permite crear una bloque totalmente negro que separa el marcador de la parte blanca, la segunda cuadricula interior determina la orientación y la siguiente cuadricula es la que permite determinar la codificación, cuyo resultado son 512 marcadores posibles.

Una vez ubicado e identificado el marcador, el siguiente reto fue determinar la rotación, traslación y escalado. Fue realmente una tarea ardua, debido a que se tenía que transmitir estos valores a 3D en XNA, que de por si es ya es difícil sino tienes mucha experiencia en trabajar con 3D. Luego de mucho investigar en la matemática proyectiva y funciones recomendadas  (ProjectPoints2, SolvePnP, Rodrigues, etc.) que fueron casi un dolor agudo de cabeza por los datos de entrada como de salida (interpretación); me decidí hacerlo a mi modo…. básicamente basarme en el ángulo de rotación y su cambio según los sentidos de orientación que me permite trasladar y rotar el objeto en 3D según el movimiento del marcado. Esto me  permite economizar en tiempo de ejecución y memoria.

El escalado fue mucho más sencillo pues tomé como referencia el perímetro y en función de este determinar el tamaño del modelo a presentar.

Este es el video de muestra del avance logrado; ahora queda optimizar el código y documentarlo para su posterior liberación.

Juan Cadillo

Proyecto de Innovación: Formas y Colores – Realidad Aumentada y Visión Artificial – I

Estimados amigos que leen este blog, en esta oportunidad les contaré un poco sobre  el segundo proyecto para este 2012,  que aún esta en fase de planificación (por cuestiones del software) y se trata de crear aplicaciones para niños usando los conceptos de la Realidad Aumentada y la Visión Artificial  permitiendo  el trabajo con formas y colores; en los proyectos “Probado virtual” y “Pintura Virtual para la Realidad Aumentada” se avanzó con los conceptos pedagógicos sobre  el trabajo lúdico, el desarrollo de las capacidades kinestésicas  y las  competencias a desarrollar en  los niños y niñas por áreas. El software que se desarrollo para estos proyectos estaba limitado a la detección de movimiento y el reconocimiento de colores. Se trabajó con processing y librerías adaptadas de opencv para este lenguaje; lamentablemente muy pocas funciones de opencv (librerías de visión artificial) fueron migradas por lo que la alternativa era trabajar en el lenguaje C++, usando las librerías nativas.

En enero  inicie un trabajo con opencv  para el lenguaje C++, Qt Creator, asi Microsoft Visual C++ Express . Luego de mucho investigar he logrado reconocer formas y colores optimizando algoritmos e ideando muevas formas para trabajar el reconocimiento de formas, optimizar tiempos y lograr trabajar en tiempo real; aproveche parte de mi trabajo sobre colores derivados de los proyectos anteriores. Como muchos otros  proyectos de este tipo tengo aún problemas con la luz que es muy variable en los ambientes reales, pero aún así se ha logrado avanzar reduciendo el ruido de estas variaciones. La primera prueba del software fue hoy, se verificó el funcionamiento y la robustez del desarrollo con los niños en condiciones reales sin tomar criterios pedagógicos.

De los resultados se puede concluir que aplicación es estable con correcciones menores, y toca validar su uso para apoyar la:

 • Competencias: Reconoce, nombra y describe figuras geométricas, asociándolas con objetos de su entorno, y su

• Capacidad: Identificar elementos esenciales de figuras geométricas planas: rectángulo, cuadrado, triangulo.

Así también dentro del proyecto  tengo planificado crear juegos que refuercen estas y otras  competencias, espero que el tiempo pueda ser suficiente, ya que en la mayoría de casos las cuestiones técnicas referidas al software toman más tiempo del previsto.

Comparto con Ustedes las primeras pruebas, sean benignos puesto que esta es la primera prueba y debo confesar que me divertí mucho….

Juan Cadillo