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

Entrega del Premio Fundación Telefónica de Innovación Educativa 2012

Una de las actividades más significativas de la etapa 4 “¿Qué y como enseñar y aprender en la sociedad digital?” del  Encuentro Internacional de Educación 2012 – 2013, desarrollado en la ciudad de Lima el 28 y 29 de Noviembre del 2012, fue la entrega del Premio Fundación Telefónica de Innovación Educativa.

Este premio es el reconocimiento a los trabajos más innovadores presentados por maestros de 30 países, que asumieron el reto de mejorar con sus prácticas  y mediante  diversas tecnologías la enseñanza en sus respectivas escuelas.

La lista con los trabajos y sus respectivas valoraciones se encuentra en este enlace. La actividad de premiación tuvo un previo el 28 de noviembre en la jornada vespertina del Encuentro, donde cuatro de las experiencias fueron ilustradas por sus respectivos autores.

La presentación inicial estuvo a cargo de Pablo Gonzalo, quién es Responsable del Premio Fundación Telefónica de Innovación Educativa. Jefe de Proyectos – Área de Conocimiento en Red y Educación en Fundación Telefónica a nivel Internacional.

Iniciando  el peruano César Choque Raymundo con su proyecto “Nuestro Ecosistema”; él ha desarrollado un módulo educativo autoejecutable que ha sido pensado y planificado teniendo en cuenta la importancia de la educación ambiental como tema transversal en la educación básica regular.

La segunda experiencia presentada fue  el proyecto “Gigantes de cristal” de la profesora Valeria Engelhard, este proyecto fue realizado interdisciplinariamente con siete docentes más y  realizado con alumnos de 3º año de la escuela secundaria. Su importancia radica en formar conciencia sobre el  cuidado y protección de los campos de hielo continental patagónico que se encuentran en el sur de Argentina.

La tercera experiencia también fue de otra profesora argentina, Andrea Lovino presentó el proyecto “Cortometraje animado: Ojonón, el primer monstruo aventurero”, proyecto trabajo con niños de infantil que busca el desarrollo de una conciencia crítica de las producciones ajenas, y la capacidad de crear con niños pequeños.

Cerrando la presentación de experiencia Domingo Santabárbara  presento su proyecto  “Conocemos nuestro barrio a través de realidad aumentada y código QR”. Este maestro español mostró un uso creativo de recursos existentes en la red que permiten usar la realidad aumentada con los niños de educación infantil.

Luego de las exposiciones y culminada la primera jornada del Encuentro, los profesores ganadores reconocieron el espacio de la premiación y compartieron amenamente en el hotel Sheratón.

El 29 de Noviembre a las 10:45 a.m. dentro de las actividades del Encuentro se inició la Premiación. Nuevamente Pablo Gonzalo responsable del Premio fue el encargado de dirigir la ceremonia, acompañado por Lillian Moore hicieron entrega de los premios Fundación Telefónica de Innovación Educativa 2012.

La profesora Marta Reina Herrera dirigió las palabras de agradecimiento (sin duda esto me emocionó pues recordé la experiencia vivida en el 2011 (Madrid) y el agradecimiento que  ofrecí a nombre de mis colegas ganadores de ese año a Fundación Telefónica).

Finalizado el evento, los asistentes disfrutamos de la compañía de estos docentes innovadores.

Juan Cadillo

(Docente Referente 2012 – Insider del Encuentro)

Ceremonia de Premiación del Certamen Internacional Educared

Me siento agradecido con Educared y la Fundación Telefónica por la grata atención  recibida en Madrid con motivo de la premiación en el XI Certamen Internacional  Educared, este evento guarda un gran valor Educativo ya que busca mejorar la Educación a través de propuestas inovadoras en el campo Educativo y Tecnológico. La creatividad fue uno de los pilares de este certamen mundial.

Y desde aquí un homenaje a todos los participantes y auspiciadores.

 

Juan Cadillo