Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-11-24 01:53:59 Extraire un morceau d'image en vidéo et l'injecter ailleurs

upermuk
nouveau membre
Lieu: Bruxelles
Date d'inscription: 2014-11-23
Messages: 3
Site web

Extraire un morceau d'image en vidéo et l'injecter ailleurs



Bonsoir,

Je viens de passer toute ma soirée sur un problème que je croyais pourtant facile à régler. *suspens* Je suis en train de faire un petit projet de chat vidéo où l'on ne voit que les deux yeux de son interlocuteur au lieu de tout le champ de la caméra. Du coup, j'ai commencé par faire de beaux eye tracking avec la librairie opencv_processing, qui marche assez bien, et j'ai même réussi à construire le rectangle autour des deux yeux, ce qui était et reste d'ailleurs assez chiant. C'est accessoire, donc j'en parlerai après.

Le vrai problème, c'est qu'il faut extraire ce foutu rectangle de l'image et le conserver, tout en vidéo qu'il est... et sans le reste. Ça a l'air simple, mais il n'existe apparemment pas de fonction dans Processing pour réaliser des saveFrame avec des découpes; ni même avec des requêtes de variables.

Bon, trève de tergiversations, voici le code:

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

Capture video;
OpenCV opencvLeft;
OpenCV opencvRight;



void setup() {
  size(640, 480);
  video = new Capture(this, 640/2, 480/2);
  opencvLeft = new OpenCV(this, 640/2, 480/2);
  opencvRight = new OpenCV(this, 640/2, 480/2);
  opencvLeft.loadCascade("/Users/Upermuk/Documents/Processing/libraries/opencv_processing/library/cascade-files/haarcascade_mcs_lefteye.xml", true);
  opencvRight.loadCascade("/Users/Upermuk/Documents/Processing/libraries/opencv_processing/library/cascade-files/haarcascade_mcs_righteye.xml", true);  


  video.start();
}

void draw() {
  scale(2);
  opencvLeft.loadImage(video);
  opencvRight.loadImage(video);

  image(video, 0, 0 );

  noFill();
  stroke(0, 255, 0);
  strokeWeight(1);
  Rectangle[] leftEye = opencvLeft.detect(2.2, 10, -1, 15, 40);
  Rectangle[] rightEye = opencvRight.detect(2.2, 10, -1, 15, 40);
  
  println(leftEye.length);
  println(rightEye.length);
 
 //cadre oeil gauche
 for (int i = 0; i < leftEye.length; i++) {
    //println(leftEye[i].x + "," + leftEye[i].y);
    rect(leftEye[i].x, leftEye[i].y, leftEye[i].width, leftEye[i].height);
    delay(60);

  }
  
  //cadre oeil droit
  for (int j = 0; j < rightEye.length; j++) {
        stroke(255, 0, 0);
        rect(rightEye[j].x, rightEye[j].y, rightEye[j].width, rightEye[j].height);
        delay(60);

  }
  
  //cadre englobant oeil directeur
  for (int k = 0; k < leftEye.length; k++) {
      stroke(0,0,255);
     // if (rightEye[k].y >= leftEye[k].y) {
      
      rect(leftEye[k].x, leftEye[k].y, leftEye[k].width*2+10, leftEye[k].height);
      delay(300);
      
      PImage shot=get(leftEye[k].x, leftEye[k].y, leftEye[k].width*2+10, leftEye[k].height);
      shot.save("foo-#######.jpg"); 
      
      //}
      
     /* else if (rightEye[k].y <= leftEye[k].y) {
      
      rect(leftEye[k].x, leftEye[k].y, leftEye[k].width*2+10, leftEye[k].height);
      delay(300);
      
      }
      
      else {
        println("Error drawing boxing");
        
      }*/
  }
  
}

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

Vous verrez qu'il y a également un problème de conditions du cadre des deux yeux. Je voulais mettre une condition pour qu'il supporte un écart plus ou moins grand entre les deux yeux, de sorte qu'on voie toujours les deux yeux ensemble, et qu'il println une erreur si ce n'est pas le cas. rightEye servirait en quelque sorte uniquement à corriger leftEye, qui est visiblement directeur. La condition sur le for avec tous les rectangles, il a pas aimé: au début ça va, mais si on gigote un peu, Processing plante. Mais bon, ça marche quand même sans.

Du coup en gros maintenant, la stratégie serait plutôt d'éxécuter toutes les fonctions de détection avant de commencer la visualisation du sketch, et de ne récupérer dans la fenêtre que le fameux rectangle des deux yeux. Mais je vois pas trop comment m'y prendre, les inserts dans le setup ont donné des résultats exotiques (un mini-moi sur fond gris resizé à la forme du cadre des deux yeux, qui se baladent en fonction de mes gestes... c'est con que j'aie baqué cette version, c'était assez comique).

Voilà, j'ai la tête comme un seau et je vois des yeux partout.

Bonne nuit, help smile sad


Julie Kern Donck / artiste visuelle / LaCambre Arts Visuels, Bruxelles
www.juliekerndonck.be

Hors ligne

 

#2 2014-11-24 08:57:41 Re : Extraire un morceau d'image en vidéo et l'injecter ailleurs

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Extraire un morceau d'image en vidéo et l'injecter ailleurs



Première réponse vite faite. L'image vidéo que tu obtiens est une PImage, donc tu peux lui appliquer la méthode copy() :
https://www.processing.org/reference/PImage_copy_.html

Tu peux copier juste une portion d'image dans une nouvelle PImage que tu affichera par la suite.

A compléter …

Hors ligne

 

#3 2014-11-25 00:46:33 Re : Extraire un morceau d'image en vidéo et l'injecter ailleurs

pob
Exterminator
Lieu: Rennes
Date d'inscription: 2009-10-13
Messages: 765
Site web

Re: Extraire un morceau d'image en vidéo et l'injecter ailleurs



T'es étudiante en art et tu ne veux pas déclencher un son avec une webcam ???? Mais !! ?
C'est quoi ce bordel...
tongue

Hors ligne

 

#4 2014-11-25 12:49:02 Re : Extraire un morceau d'image en vidéo et l'injecter ailleurs

Carla Hoke
membre
Date d'inscription: 2014-02-26
Messages: 71

Re: Extraire un morceau d'image en vidéo et l'injecter ailleurs



lol

Hors ligne

 

#5 2014-11-25 14:08:31 Re : Extraire un morceau d'image en vidéo et l'injecter ailleurs

sakramh
membre
Lieu: clichy-sous-bois
Date d'inscription: 2008-12-02
Messages: 829
Site web

Re: Extraire un morceau d'image en vidéo et l'injecter ailleurs



Un peu de patience, les exams c'est vers Avril . Çà vous laisse le temps de préparer des codes "tout fait" qui déclenchent différentes webcams selon des sons . wink pi pour une des rares fois où c'est pas : heeeeelp ! un truc clef en main siouplé, rendu pour hier (c'est le prof. qui nous donné cette url) . lol
bon fini mumuse je retourne du côté de frei0r .

Dernière modification par sakramh (2014-11-25 21:53:29)


le code est l'alchimie de l'âge du silicium

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024