ArtezGDA / computer-vision-recognition

Multiple Computer Vision (openCV) projects to recognize certain aspects in video (Processing)
1 stars 0 forks source link

Face Rec with code recognition. Need some help #1

Open barrydeslager opened 9 years ago

barrydeslager commented 9 years ago

import gab.opencv.; import processing.video.; import java.awt.*;

Capture video; OpenCV opencv; PImage img;

void setup() { size(640, 480); video = new Capture(this, 640/2, 480/2); opencv = new OpenCV(this, 640/2, 480/2); opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);

video.start();

img = loadImage("fibon.png"); }

void draw() { scale(2); opencv.loadImage(video);

boolean gevonden = false; image(video, 0, 0 );

noFill(); stroke(0, 255, 0); strokeWeight(15); Rectangle[] faces = opencv.detect(); println(faces.length);

if (faces.length > 1) { Rectangle gezicht1 = faces[0]; Rectangle gezicht2 = faces[1];

float total_x = (gezicht2.x +gezicht2.width) - gezicht1.x;
float tussen_x = gezicht2.x - (gezicht1.x +gezicht1.width);

float verhouding1 =    gezicht1.width / (gezicht2.width * 1.0);
float verhouding2 =    gezicht1.width / (total_x * 1.0);
float verhouding3 =    gezicht1.width / (tussen_x *1.0);
float verhouding4 =    tussen_x / (gezicht2.width *1.0);
float verhouding5 =    total_x / (gezicht2.x *1.0);
float verhouding6 =    tussen_x / (total_x * 1.0);

float total_y = (gezicht2.y +gezicht2.height) - gezicht1.y;
float tussen_y = gezicht2.y - (gezicht1.y +gezicht1.height);

float verhouding7 =    gezicht1.height / (gezicht2.height * 1.0);
float verhouding8 =    gezicht1.height / (total_y * 1.0);
float verhouding9 =    gezicht1.height / (tussen_y *1.0);
float verhouding10 =    tussen_y / (gezicht2.height *1.0);
float verhouding11 =    total_y / (gezicht2.y *1.0);
float verhouding12 =    tussen_y / (total_y * 1.0);

float marge = 0.05;
float phi = 1.6103;
float phi_min = phi - marge;
float phi_max = phi + marge;

float phi_inv_min = 1.0 / phi_min;
float phi_inv_max = 1.0 / phi_max;

if (((verhouding1 > phi_min) && (verhouding1 < phi_max)) || ((verhouding1 < phi_inv_min) && (verhouding1 > phi_inv_max))) 
{
  gevonden = true;
}
if (((verhouding2 > phi_min) && (verhouding2 < phi_max)) || ((verhouding2 < phi_inv_min) && (verhouding2 > phi_inv_max))) 
{
  gevonden = true;
}
if (((verhouding3 > phi_min) && (verhouding3 < phi_max)) || ((verhouding3 < phi_inv_min) && (verhouding3 > phi_inv_max))) 
{
  gevonden = true;
}
if (((verhouding1 > phi_min) && (verhouding4 < phi_max)) || ((verhouding4 < phi_inv_min) && (verhouding4 > phi_inv_max))) 
{
  gevonden = true;
}
if (((verhouding1 > phi_min) && (verhouding5 < phi_max)) || ((verhouding5 < phi_inv_min) && (verhouding5 > phi_inv_max))) 
{
  gevonden = true;
}
 if (((verhouding1 > phi_min) && (verhouding6 < phi_max)) || ((verhouding6 < phi_inv_min) && (verhouding6 > phi_inv_max))) 
{
  gevonden = true;
}
 if (((verhouding1 > phi_min) && (verhouding7 < phi_max)) || ((verhouding7 < phi_inv_min) && (verhouding7 > phi_inv_max))) 
{
  gevonden = true;
}
 if (((verhouding1 > phi_min) && (verhouding8 < phi_max)) || ((verhouding8 < phi_inv_min) && (verhouding8 > phi_inv_max))) 
{
  gevonden = true;
}
 if (((verhouding1 > phi_min) && (verhouding9 < phi_max)) || ((verhouding9 < phi_inv_min) && (verhouding9 > phi_inv_max))) 
{
  gevonden = true;
}
 if (((verhouding1 > phi_min) && (verhouding10 < phi_max)) || ((verhouding10 < phi_inv_min) && (verhouding10 > phi_inv_max))) 
{
  gevonden = true;
}
 if (((verhouding1 > phi_min) && (verhouding11 < phi_max)) || ((verhouding11 < phi_inv_min) && (verhouding11 > phi_inv_max))) 
{
  gevonden = true;
}
 if (((verhouding1 > phi_min) && (verhouding12 < phi_max)) || ((verhouding12 < phi_inv_min) && (verhouding12 > phi_inv_max))) 
{
  gevonden = true;
}

for (int i = 0; i < faces.length; i++) { println(faces[i].x + "," + faces[i].y);

if (gevonden) {
  int breedte = int(faces[i].width * (915 / 579.0));
  int hoogte = faces[i].height;
  int verschil = breedte - hoogte;
  int x = faces[i].x - (verschil / 2);
  int y = faces[i].y;
  image(img, x, y, breedte, hoogte);
  //915 × 579
} else {
  rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
}

}

if (gevonden ) { // doe iets als gevonden } else { // doe iets als niet gevonden } }

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

barrydeslager commented 9 years ago

Ik heb de if's aangepast bij alle verhoudingen. Ik krijg een error in de onderste regel en ik snap de syntax niet hoe ik moet aangeven dat ik gelijk wil laten horen wanneer de code de fibonacci heeft gevonden.

irlabs commented 9 years ago

Je moet sowieso regel 89 t/m 121 nog aanpassen, daar staat overal nog verhouding1.

En dan als je geluid wil laten horen: ergens na regel 144, (nadat je die if hebt gefixt ... zoal in m'n eerdere mail beschreven).

Het enige probleem wat ik dan nog kan bedenken, is dat het geluidsfragment langer duurt dan 1 frame van de applicatie. Want als de applicatie goed draait, doet hij zo'n 30 frames per seconde. Dus 30 x per seconde wordt draw aangeroepen. Dus als er een fibonacci verhouding wordt gevonden, zal hij ook zo'n 30 x per seconde dat geluid laten horen. Misschien is dat wat te veel van het goede, zeker als je geluidsfragment langer duurt dan 1/30 seconde.

Om dat netjes op te lossen zou je ervoor kunnen kiezen om alleen maar het geluid te laten horen als het van geen naar wel fibonacci gaat. Daarvoor heb je een extra globale variabele nodig: een boolean die je bijv. gevondenStatus noemt. (global variabele: definieer de variabele bovenin je code: boolean gevondenStatus;, en zet de begin waarde in de setup(): gevondenStatus = false;)

Dan in de draw(), in de bovengenoemde if

if (gevonden) {
  if (!gevondenStatus) {
    // fibonacci begint gevonden te worden
    // speel geluid af
    //
    // update de waarde van gevondenStatus
    gevondenStatus = true;
  }
  // doe dingen elk frame dat fibonacci gevonden is
} else {
  if (gevondenStatus) {
    // fibonacci was gevonden, maar nu niet meer
    // stop met afspelen van geluid (als dat nog bezig was)
    //
    // update de waarde van gevondenStatus
    gevondenStatus = false;
  }
}

Succes!

barrydeslager commented 9 years ago

Hallo Dirk,

Bedankt voor je reactie. Ik probeer het te begrijpen, maar het lukt me niet om er vat op te krijgen. Hoe schrijf ik dat ik iets wil afspelen? ik kan geen voorbeelden vinden op het internet. De moed zakt me een beetje in de schoenen eerlijk gezegd.

Gr Josse


Van: Dirk van Oosterbosch [notifications@github.com] Verzonden: maandag 8 juni 2015 9:46 Aan: ArtezGDA/Face-rec-confirm CC: Josse Hermsen Onderwerp: [Marketing Mail] Re: [Face-rec-confirm] Face Rec with code recognition. Need some help (#1)

Je moet sowieso regel 89 t/m 121 nog aanpassen, daar staat overal nog verhouding1.

En dan als je geluid wil laten horen: ergens na regel 144, (nadat je die if hebt gefixt ... zoal in m'n eerdere mail beschreven).

Het enige probleem wat ik dan nog kan bedenken, is dat het geluidsfragment langer duurt dan 1 frame van de applicatie. Want als de applicatie goed draait, doet hij zo'n 30 frames per seconde. Dus 30 x per seconde wordt draw aangeroepen. Dus als er een fibonacci verhouding wordt gevonden, zal hij ook zo'n 30 x per seconde dat geluid laten horen. Misschien is dat wat te veel van het goede, zeker als je geluidsfragment langer duurt dan 1/30 seconde.

Om dat netjes op te lossen zou je ervoor kunnen kiezen om alleen maar het geluid te laten horen als het van geen naar wel fibonacci gaat. Daarvoor heb je een extra globale variabele nodig: een boolean die je bijv. gevondenStatus noemt. (global variabele: definieer de variabele bovenin je code: boolean gevondenStatus;, en zet de begin waarde in de setup(): gevondenStatus = false;)

Dan in de draw(), in de bovengenoemde if

if (gevonden) { if (!gevondenStatus) { // fibonacci begint gevonden te worden // speel geluid af // // update de waarde van gevondenStatus gevondenStatus = true; } // doe dingen elk frame dat fibonacci gevonden is } else { if (gevondenStatus) { // fibonacci was gevonden, maar nu niet meer // stop met afspelen van geluid (als dat nog bezig was) // // update de waarde van gevondenStatus gevondenStatus = false; } }

Succes!

— Reply to this email directly or view it on GitHubhttps://github.com/ArtezGDA/Face-rec-confirm/issues/1#issuecomment-109894297.

irlabs commented 9 years ago

Hallo Josse,

een simpel voorbeeld van het afspelen van geluid, zie ik hier: http://stackoverflow.com/a/16324538/153436

opmerking 1: en de audio input in dit voorbeeld zou je kunnen weglaten denk ik. opmerking 2: ipv player.close() en player = minim.loadFile(…) in de mouseReleased, kan je ook player.pause() + player.rewind() gebruiken: daarmee pauzeer je het geluid en spoel je het terug.

opmerking 3: om hiermee aan de slag te gaan zou ik de volgende stappen hanteren:

Succes! Dirk

On 8 jun. 2015, at 15:21, barrydeslager notifications@github.com<mailto:notifications@github.com> wrote:

Hallo Dirk,

Bedankt voor je reactie. Ik probeer het te begrijpen, maar het lukt me niet om er vat op te krijgen. Hoe schrijf ik dat ik iets wil afspelen? ik kan geen voorbeelden vinden op het internet. De moed zakt me een beetje in de schoenen eerlijk gezegd.

Gr Josse


IR Labs Dirk van Oosterbosch

developer@irlabs.nlmailto:developer@irlabs.nl

http://irlabs.nl/code/


Dirk van Oosterbosch docent Media Design - Graphic Design 06 48401910

d.van.oosterbosch@artez.nlmailto:d.van.oosterbosch@artez.nl

barrydeslager commented 9 years ago

Hallo Dirk,

Heb je voor mij een voorbeeld van een capture cam? dat er een foto gemaakt word wanneer de fibonacci is gevonden. Ik heb een aantal voorbeelden, maar ik weet niet of ik er wat aan heb http://forum.processing.org/two/discussion/8423/make-a-image-trace-on-a-capture-cam en https://processing.org/reference/libraries/video/Capture.html

Gr josse


Van: Dirk van Oosterbosch [notifications@github.com] Verzonden: dinsdag 9 juni 2015 9:57 Aan: ArtezGDA/Face-rec-confirm CC: Josse Hermsen Onderwerp: [Marketing Mail] Re: [Face-rec-confirm] Face Rec with code recognition. Need some help (#1)

Hallo Josse,

een simpel voorbeeld van het afspelen van geluid, zie ik hier: http://stackoverflow.com/a/16324538/153436

opmerking 1: en de audio input in dit voorbeeld zou je kunnen weglaten denk ik. opmerking 2: ipv player.close() en player = minim.loadFile(…) in de mouseReleased, kan je ook player.pause() + player.rewind() gebruiken: daarmee pauzeer je het geluid en spoel je het terug.

opmerking 3: om hiermee aan de slag te gaan zou ik de volgende stappen hanteren:

Succes! Dirk

On 8 jun. 2015, at 15:21, barrydeslager notifications@github.com<mailto:notifications@github.com> wrote:

Hallo Dirk,

Bedankt voor je reactie. Ik probeer het te begrijpen, maar het lukt me niet om er vat op te krijgen. Hoe schrijf ik dat ik iets wil afspelen? ik kan geen voorbeelden vinden op het internet. De moed zakt me een beetje in de schoenen eerlijk gezegd.

Gr Josse


IR Labs Dirk van Oosterbosch

developer@irlabs.nlmailto:developer@irlabs.nl

http://irlabs.nl/code/


Dirk van Oosterbosch docent Media Design - Graphic Design 06 48401910

d.van.oosterbosch@artez.nlmailto:d.van.oosterbosch@artez.nl

— Reply to this email directly or view it on GitHubhttps://github.com/ArtezGDA/Face-rec-confirm/issues/1#issuecomment-110265981.

irlabs commented 9 years ago

Hallo Josse,

http://forum.processing.org/one/topic/how-can-i-save-a-frame-of-video-without-drawing-it-on-the-screen#25080000000756335.html http://forum.processing.org/one/topic/how-can-i-save-a-frame-of-video-without-drawing-it-on-the-screen#25080000000756335.html

Check het antwoord van cedrickie:

Je hebt al een Capture object (die heet ‘video’ bij jou). Dus het enige wat je hoeft te doen is: (op het moment dat je zou willen saven)

video.save(frameCount + “.png”);

Success! Dirk

On 15 Jun 2015, at 14:01, barrydeslager notifications@github.com wrote:

Hallo Dirk,

Heb je voor mij een voorbeeld van een capture cam? dat er een foto gemaakt word wanneer de fibonacci is gevonden. Ik heb een aantal voorbeelden, maar ik weet niet of ik er wat aan heb http://forum.processing.org/two/discussion/8423/make-a-image-trace-on-a-capture-cam en https://processing.org/reference/libraries/video/Capture.html

Gr josse


Van: Dirk van Oosterbosch [notifications@github.com] Verzonden: dinsdag 9 juni 2015 9:57 Aan: ArtezGDA/Face-rec-confirm CC: Josse Hermsen Onderwerp: [Marketing Mail] Re: [Face-rec-confirm] Face Rec with code recognition. Need some help (#1)

Hallo Josse,

een simpel voorbeeld van het afspelen van geluid, zie ik hier: http://stackoverflow.com/a/16324538/153436

opmerking 1: en de audio input in dit voorbeeld zou je kunnen weglaten denk ik. opmerking 2: ipv player.close() en player = minim.loadFile(…) in de mouseReleased, kan je ook player.pause() + player.rewind() gebruiken: daarmee pauzeer je het geluid en spoel je het terug.

opmerking 3: om hiermee aan de slag te gaan zou ik de volgende stappen hanteren:

  • stap 1: gebruik deze code van stackoverflow voor een simpel voorbeeld
  • stap 2: als dat werkt (je zal die minim library eerst moeten installeren), pas de code een beetje aan, volgens mijn tips:
  • verwijder de (audioInput) input variabele
  • vervang de player.close // player = minim.loadFile(..) code door player.pause() / player.rewind() -stap 3: als dat goed werkt en je begrijpt de code en snapt wat alle onderdelen doen, kan je verder: zet alle onderdelen op hun plek in je fibonacci app:
  • Alles boven de setup() wat van belang is
  • Alle relevante code in de setup()
  • de code voor het beginnen van afspelen op de goede plek
  • de code voor het stoppen met afspelen op de goede plek

Succes! Dirk

On 8 jun. 2015, at 15:21, barrydeslager notifications@github.com<mailto:notifications@github.com> wrote:

Hallo Dirk,

Bedankt voor je reactie. Ik probeer het te begrijpen, maar het lukt me niet om er vat op te krijgen. Hoe schrijf ik dat ik iets wil afspelen? ik kan geen voorbeelden vinden op het internet. De moed zakt me een beetje in de schoenen eerlijk gezegd.

Gr Josse


IR Labs Dirk van Oosterbosch

developer@irlabs.nlmailto:developer@irlabs.nl

http://irlabs.nl/code/


Dirk van Oosterbosch docent Media Design - Graphic Design 06 48401910

d.van.oosterbosch@artez.nlmailto:d.van.oosterbosch@artez.nl

— Reply to this email directly or view it on GitHubhttps://github.com/ArtezGDA/Face-rec-confirm/issues/1#issuecomment-110265981. — Reply to this email directly or view it on GitHub https://github.com/ArtezGDA/Face-rec-confirm/issues/1#issuecomment-112036317.