Primero que todo se debe analizar imágenes para tratar de determinar alguna diferencia entre lo 'bello' y lo 'feo'.
FaceDetect
Img | # de Piexeles | R | G | B | Grises |
beau | 18305,26 | 165,03 | 156,51 | 150,52 | 157,35 |
boni | 13692,52 | 166,88 | 154,22 | 142,13 | 154,41 |
fe | 14928,08 | 141,24 | 138,04 | 135,85 | 138,38 |
ug | 14793,62 | 167,98 | 157,55 | 147,37 | 157,63 |
A partir de estos datos se toma una decisión, al fin y al cabo la decisión (como todas las decisiones de gusto) es arbitraria, evidentemente se hace a partir de los datos extraídos de fuentes externas, pero arbitrarias al fin.
El código:
import codeanticode.gsvideo.*;
import pFaceDetect.*;
GSMovie cam;
PFaceDetect face;
PImage img;
PImage cara;
PrintWriter output;
color ca;
float ra, ga, ba;
color cp;
int t;
float subtotalr, subtotalg, subtotalb, totalr, totalg, totalb;
float promedior, promediog, promediob, promgris;
void setup () {
size (320, 240);
background (0);
output = createWriter("valores.txt");
cam = new GSMovie (this, "beautiful_.avi");
//cam.loop();
cam.play();
while (!cam.available ()) {
cam.read();
}
face = new PFaceDetect (this, width, height,
"haarcascade_frontalface_default.xml");
//cam.play();
img = createImage(width, height, RGB);
rectMode(CORNER);
noFill();
stroke(255, 0, 0);
smooth();
//noLoop();
}
void draw () {
if (cam.available() == true) {
cam.read();
image (cam, 0, 0, width, height);
face.findFaces (cam);
drawFace();
}
t++;
//println(t);
if (t==340) {
output.flush();
output.close();
exit();
}
}
void drawFace() {
int [][] res = face.getFaces();
if (res.length>0) {
for (int i=0;i<res.length;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);
int bx = x+w;
int by = y+h;
cara = createImage(w, h, RGB);
//cam.loadPixels();
//cara.loadPixels();
int p=0;
float[] sumar = new float [w*h];
float[] sumag = new float [w*h];
float[] sumab = new float [w*h];
for (int b=y;b<by;b++) {
for (int a=x;a<bx;a++) {
cam.loadPixels();
cara.loadPixels();
//int p=0;
int ss=b*w+a;
ca = cam.pixels[b*w+a];
ra = red (ca);
ga = green (ca);
ba = blue (ca);
sumar[p] = ra;
sumag[p] = ga;
sumab[p] = ba;
cp = color (ra, ga, ba);
//output.println(ss+";"+ra+";"+ga+";"+ba+";");
//output.println("otro pixel");
cara.pixels[p]=cp;
cara.updatePixels();
p++;
//ca = cam.get(a,b);
//cara.set(a,b,ca);
}
//output.println("fila");
}
image(cara, 0, 0, w, h);
cam.updatePixels();
//output.println("otra cara");
output.print(w*h+" ");
for (int l=0;l<(w*h)-1;l++) {
subtotalr=sumar[0];
totalr=subtotalr+sumar[l+1];
sumar[0]=totalr;
subtotalg=sumag[0];
totalg=subtotalg+sumag[l+1];
sumag[0]=totalg;
subtotalb=sumab[0];
totalb=subtotalb+sumab[l+1];
sumab[0]=totalb;
}
promedior = totalr/(w*h);
promediog = totalg/(w*h);
promediob = totalb/(w*h);
promgris = (promedior+promediog+promediob)/3;
output.println(promedior+" "+promediog+" "+promediob+" "+promgris);
//cara.updatePixels();
}
}
}
/*void keyPressed() {
output.flush();
output.close();
exit();
}*/
No hay comentarios.:
Publicar un comentario