Juan David Ruiz's Blog
Graphic Designer
Blog creado y dedicado al desarrollo del juego de cartas "El Dorado" utilizando Realidad Aumentada.

Home // Contacto: juanda.ru@hotmail.com //

DETECTOR DE ROSTROS y JMYRON (PROCESSING 1.0) !!!

Encontré un pequeño tutorial de como reconocer rostros por medio de Processing utilizando librerías y software como OpenCV , pFaceDetect y JMyron ....

Instalación de pFaceDetect:

Descarga y descomprime la carpeta pFaceDetect. Copia esta carpeta solamente con la carpeta que tiene adentro llamada library (../pFaceDetect/library) estas se copian a la carpeta de librerías de Processing. La carpeta de fuente de codigo (src) es para su referencias. Ud podra modificar los parámetros de detección y recopilar esta información para su uso futuro. La carpeta data contiene archivos clasificadores del programa OpenCV para el reconocimiento del rostro.


Instalación de JMyron:

Descargue y descomprima la carpeta JMyron y esta se copia a la carpeta de librerías de Processing. Copie la carpeta JMyron Example a la carpeta de examples de Processing.

IMPORTANTE PARA USUARIOS DE WINDOWS:
Existe la carpeta llamada Extra DLLs - De estos DLLs depende JMyron para su funcionamiento entonces verifique que estos sean copiados a la carpeta de sistema de windows (C:\windows\System32)

Si Processing ya esta siendo ejecutado cierre y reinicie el programa para su funcionamiento.


Instalación de OpenCV:

Es un archivo .EXE entonces su instalación es automática.


Dependencias

La librería depende de OpenCV 1.0. La ultima versión al publico la 1.1 no funciona. Por eso es importante descargar la versión 1.0. Los siguientes archivos de OpenCV 1.0 son esenciales y deben ser copiados a la carpeta de instalación (root) de Processing:

  • cxcore100.dll
  • cv100.dll
  • libguide40.dll

Si ud pretende no dejar instalado OpenCV en su computador, igual deberá copiar los archivos anteriores a la carpeta de instalación (root) de Processing.


AQUÍ LES DEJO EL EJEMPLO DE CÓDIGO:

import pFaceDetect.*;

import JMyron.*;

PFaceDetect face;
JMyron m;
PImage img;

void setup() {
size(320,240);
m = new JMyron();
m.start(width,height);
m.findGlobs(0);
face = new PFaceDetect(this,width,height,
"haarcascade_frontalface_default.xml");
frameRate(15);
img = createImage(width,height,ARGB);
rectMode(CORNER);
noFill();
stroke(255,0,0);
smooth();
}

void draw() {
background(0);
m.update();
arraycopy(m.cameraImage(),img.pixels);
img.updatePixels();
face.findFaces(img);
image(img,0,0);
drawFace();
}

void drawFace() {
int [][] res = face.getFaces();
if (res.length>0) {
for (int i=0;i int x = res[i][0];
int y = res[i][1];
int w = res[i][2];
int h = res[i][3];
rect(x,y,w,h);
}
}
}

void stop() {
m.stop();
super.stop();
}
Comentarios: 1
Escrito por: DJ Juanda Ruiz (DJ Juanda Ruiz). Fecha: 7/13/2009 11:13:00 a. m.


―――――――――――――――――――――――――――――――――――――――――――――――――――

CAPTURAR WEBCAM EN PROCESSING 1.0 !!!

Encontré el código de como capturar una lista de webcams disponibles para seleccionar... Comenten si les funciona porque a mi si :P...

import processing.video.*;
Capture myCapture;

void setup()
{
size(200, 200);

myCapture = new Capture(this, width, height, 30);

// El nombre de la captura depende de los
// dispositivos que se encuentren conectados. El código
// siguiente obtiene esta lista y la muestra:
// si no les funciona comenten la siguiente linea
// y el computador reconocerá la webcam apropiada.
println(Capture.list());
// Para especificar la cámara, reemplace "Camera Name"
// en la siguiente linea con uno que aparezca en Capture.list()
// myCapture = new Capture(this, width, height, "Camera Name", 30);
}

void captureEvent(Capture myCapture) {
myCapture.read();
}

void draw() {
image(myCapture, 0, 0);
}

Link de referencia: http://processing.org/reference/libraries/video/

NOTA: Para que la camara funcione correctamente, tendra que instalar un digitalizador de video que sea compatible con QuickTime (VDIG). Desafortunadamente muchas camaras en Windows no soportan Quick Time pero para eso existe WinVDIG. Desafortunadamente, WinVDIG 1.0.5 parece estar corrupto y no funcionar (o no funciona del todo o la imagen no se puede escalar), entonces es preferible bajar: WinVDIG 1.0.1.
Comentarios: 1
Escrito por: DJ Juanda Ruiz (DJ Juanda Ruiz). Fecha: 7/12/2009 09:56:00 a. m.


―――――――――――――――――――――――――――――――――――――――――――――――――――

Tutorial Processing...


En este tutorial explican lo básico de lo que es el lenguaje Processing haciendo una clara comparación con Flash de Adobe que nos ayuda a las personas que ya hemos venido trabajando con este software y con ActionScript. Durante el tutorial aprendemos de que las variaciones son significativas pero al mismo tiempo se entiende como se trabaja el lenguaje. Aqui igual voy a explicar por encima de que se trata con mis palabras:



En esta imagen se puede observar como se van a trabajar las coordenadas X y Y en el plano. Es importante saber esto ya que no se van a ubicar manualmente con la interfaz como se solia hacer con Flash sino que todo se le hara un llamado externo con ubicacion Y,X.



// La funcion de "size" le dictara al computador
// el tamaño en pixeles de la ventana.
Si no defines esto
// al inicio quedará determinado como 100x100.


size(300, 200);


// La funcion de "background" le dictara al computador
// el color de lienzo en
RGB. (si no se especifica color el
// predeterminado sera gris)

background(250,250,250);


// Funciones conocidas como "If , Then"

int a = 1;
int b = 2;

if(a==b){
println("IGUALES");
}else{
println("DIFERENTES");
}



// Funcion "for" para repetir bucles

for(int i=0 ; i<5 color="#000000">; i++){
println(i);
}


// Con esta funcion se creara un punto de color
// rojo en las coordenadas x=50 , y=50

// Llamar la función de trazo (stroke) te permite
// cambiar el color del dibujo actual de tal manera
// que cada comando de color llamado luego será
// dibujado usando ese color. Si nunca llamas
// trazo en Processing, por definición será negro.

stroke(255,0,0);
point(50,50);

// En la línea de funciones, los dos primeros parámetros
// son las primeras coordenadas (punto de salida) y los últimos
// dos parámetros son las segundas coordenadas x,y (puntos de terminado).
// La línea se dibuja desde la primera coordenada a la segunda.

stroke(255,255,255);
line(0,0,60,40);
line(30,50,100,100);

// Otras formas predeterminadas son:

// triangle (triángulo) dibujará un polígono de tres puntas.
// Tiene seis parámetros. Parámetros 1 y 2 son los primeras coordenadas X,Y.
// Parámetros 3 y 4 son las segundas coordenadas X,Y.
// Los parámetros 5 y 6 son las terceras coordenadas X,Y.

triangle(x1, y1, x2, y2, x3, y3);


// quad (cuadrado) dibujará un polígono de 4 puntas.
// La estructura de los parámetros es similar a las del triángulo,
// pero esta vez un cuarto par de parámetros se agregan para
// especificar una cuarta coordenada X,Y.

quad(x1, y1, x2, y2, x3, y3, x4, y4);

// rect dibujará un rectángulo. El primer y segundo parámetro
// especificarán la posición, mientras que el tercero y el cuarto
// lo harán con la altura y el ancho.

rect(
x, y, width, height);

// ellipse dibujará un óvalo. Sus parámetros trabajan de la
// misma manera que los de rect.

ellipse(
x, y, width, height);

// Fill (llenar) se introduce como un primo del trazo.
// Fill es lo que hace que el polígono verde, mientras que
// el trazo es lo que hace que los bordes sean rojos.
// Los parámetros de fill especifican el color, como el trazo.
// Está predeterminado como blanco. Pero qué pasa si no quieres llenar?

// Existe otro metodo que es
noFill( ); que hara que el elemento no tenga fondo.
// Tambien existe
noStroke (no trazo), que deshabilita los bordes de ser dibujados . Para habilitar el trazo o el llenar una vez más debes llamar el trazo o el llenar especificando un color.

size(150,100);
fill(#CC6600);
stroke(#FFFFFF);

quad(61,60, 94,60, 99,83, 81,90);



Esto es lo basico para empezar con Processing ya partes mas complicadas las pueden encontrar en el tutorial que deje arriba. Descarga el software gratuito aqui:


Comentarios: 0
Escrito por: DJ Juanda Ruiz (DJ Juanda Ruiz). Fecha: 7/08/2009 05:28:00 p. m.


―――――――――――――――――――――――――――――――――――――――――――――――――――