Annonce

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


#1 2014-03-25 22:57:42 HELP : détourage sans fond vert avec la Kinect

Azeb
nouveau membre
Date d'inscription: 2014-03-25
Messages: 7

HELP : détourage sans fond vert avec la Kinect



Hello tout le monde !

Je me présente rapidement : Je suis étudiant en Information-communication et Hypermédia à Annecy. J'ai un projet de groupe qui consiste à réaliser une installation multimédia !

Je suis de l'ordre du novice total en programmation (le HTML et CSS ça aide pas trop pour la kinect wink ) et j'aimerais réaliser un détourage d'une personne en temps réel sans fond vert via une kinect (ou autre, si c'est possible !) afin d'enlever son background et de lui mettre une vidéo à la place. J'ai pas mal cherché tout ce qui se faisait avec la kinect mais le milieu est assez fermé et très vite compliqué, c'est pourquoi je suis venu chercher de l'aide par ici ! smile

J'ai trouvé pas mal de vidéo sur youtube, c'est quelque chose dans ce genre là qu'il me faudrait :
https://www.youtube.com/watch?v=voShjOoPmpo



Si vous avez des idées, des solutions, des bonbons, ou quoique ce soit, tout aide me sera utile !

(je tiens à préciser que je suis certes totalement débutant dans ce milieu, mais motivé à travailler autant qu'il le faudra ! smile )

Et sur ce, je vous souhaite à tous une bonne soirée / journée / matinée / autre ! (rayez la mention inutile)

Love,
Azeb.

Dernière modification par Azeb (2014-03-25 22:59:04)

Hors ligne

 

#2 2014-03-25 23:10:20 Re : HELP : détourage sans fond vert avec la Kinect

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

Re: HELP : détourage sans fond vert avec la Kinect



Bonsoir,

Processing me paraît tout indiquer pour réaliser ton projet.
Pour cela il faut installer Processing et les autres composants pour la kinect :
http://wiki.labomedia.org/index.php/Kinect#Installation

Ensuite, tu lances un exemple genre DepthImage.
Plus l'image est proche, plus elle est claire.
Il faut que tu apprennes à manipuler les images sous Processing.

La tâche n'est pas du tout impossible.

Hors ligne

 

#3 2014-03-26 10:26:59 Re : HELP : détourage sans fond vert avec la Kinect

Adiou
nouveau membre
Date d'inscription: 2014-03-26
Messages: 2

Re: HELP : détourage sans fond vert avec la Kinect



Salut!
La kinect est parfaitement adaptée pour ton projet. Je te conseille de te procurer le bouquin "Making Things See"de Greg Borenstein, qui t'expliquera comment installer ta Kinect et tous les drivers nécessaire, et surtout qui t'explique de manière détaillé comment réaliser un détourage automatique des personnes sans fond vert avec processing et une kinect (c'est un des projet du bouquin, tout est parfaitement expliqué, le code est fournie et détaillé...).
Bonne chance!
Adrien

Dernière modification par Adiou (2014-03-26 10:27:21)

Hors ligne

 

#4 2014-03-27 11:10:54 Re : HELP : détourage sans fond vert avec la Kinect

Azeb
nouveau membre
Date d'inscription: 2014-03-25
Messages: 7

Re: HELP : détourage sans fond vert avec la Kinect



Salut !

Alors voilà j'ai jeté un oeil au livre "Making Things See", et je me suis attaqué à l'étape du détourage !
Malheureusement j'ai bien mon image en background mais la silhouette n'apparait pas...
J'ai corrigé deux erreurs que Processing me sortait comme un ami me l'a conseillé pour l'exercice d'avant (qui consistait à simplement détouré la silhouette en vert sur fond noir) :
  kinect.enableUser(SimpleOpenNI.SKEL_PROFILE_NONE); ----> kinect.enableUser();      et
  userMap = kinect.getUsersPixels(SimpleOpenNI.USERS_ALL);  -------->  userMap = kinect.userMap();

Le problème vient peut-être de là ?
Voilà le code en entier :

import SimpleOpenNI.*;
SimpleOpenNI kinect;
boolean tracking = false;
int userID;
int[] userMap;
// declare our background
PImage backgroundImage;
void setup() {
size(640, 480);
kinect = new SimpleOpenNI(this);
kinect.enableDepth();
// enable color image from the Kinect
kinect.enableRGB();
kinect.enableUser();
// turn on depth-color alignment
kinect.alternativeViewPointDepthToImage();
// load the background image
backgroundImage = loadImage("empire_state.jpg");
}
void draw() {
// display the background image
image(backgroundImage, 0, 0);
kinect.update();
if (tracking) {
// get the Kinect color image
PImage rgbImage = kinect.rgbImage();
// prepare the color pixels
rgbImage.loadPixels();
loadPixels();
userMap = kinect.userMap();
for (int i =0; i < userMap.length; i++) {
// if the pixel is part of the user
if (userMap[i] != 0) {
// set the sketch pixel to the color pixel
pixels[i] = rgbImage.pixels[i];
}
}
updatePixels();
}
}

Voilà, si quelqu'un a une idée ! smile
Après il me restera encore à trouver comment remplacer l'image par une vidéo ^^

Merci à tous !

Azeb

Hors ligne

 

#5 2014-03-27 17:03:52 Re : HELP : détourage sans fond vert avec la Kinect

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

Re: HELP : détourage sans fond vert avec la Kinect



Bonjour,

voilà une piste de travail pour toi :

import SimpleOpenNI.*;

SimpleOpenNI kinect;
boolean tracking = true;
int userID;
int[] userMap;
// declare our background
PImage backgroundImage;
int seuil;

void setup() {
  size(640, 480);
  kinect = new SimpleOpenNI(this);
  kinect.enableDepth();
  // enable color image from the Kinect
  kinect.enableRGB(); 
  backgroundImage = loadImage("empire_state.jpg");
  seuil = 900;
}

void draw() {
  // display the background image
  image(backgroundImage, 0, 0); 
  kinect.update();
  if (tracking) {
    // get the Kinect color image
    PImage rgbImage = kinect.rgbImage(); 
    // prepare the color pixels
    rgbImage.loadPixels();
    loadPixels();
    userMap = kinect.depthMap();
    for (int i =0; i < userMap.length; i++) {
      // if the pixel is part of the user
      if ((userMap[i] > 0) && ( userMap[i] < seuil)) {
        // set the sketch pixel to the color pixel
        pixels[i] = rgbImage.pixels[i];
      }
    }
    updatePixels();
    text(seuil, 20, 20);
  }
}

void keyPressed() {
  if (keyCode == UP) {
    seuil += 10;
  }
  if (keyCode == DOWN) {
    seuil -= 10;
  }
}

Hors ligne

 

#6 2014-03-31 14:47:29 Re : HELP : détourage sans fond vert avec la Kinect

Azeb
nouveau membre
Date d'inscription: 2014-03-25
Messages: 7

Re: HELP : détourage sans fond vert avec la Kinect



Hello again,

J'ai réussi à avoir un résultat pas mal avec un code qui ressemble à celui que tu m'as mis ici.

J'ai vu avec un prof pour mettre une vidéo en background et j'ai essayé avec du code glané de ci de là, mais au vu de ce que je comprends au code c'est du mission impossible
Voilà ce que j'ai pour le moment :
Si jamais il y a une âme charitable qui aurait une réponse... 

import processing.opengl.*;
import SimpleOpenNI.*;
//install this on your machine and also the library in processing
//http://code.google.com/p/simple-openni/wiki/Installation


SimpleOpenNI kinect;

boolean tracking = false;
int userID; int[] userMap;
// declare our images
PImage backgroundImage;
PImage resultImage;
void setup() {
  size(640*2, 480);
  // load the background image
  backgroundImage = loadImage("http://www.eheart.com/SHASTA/wallpaper/alpenglow-640x480.jpg");
  kinect = new SimpleOpenNI(this);
  if(kinect.isInit() == false)
  {
     println("Can't init SimpleOpenNI, maybe the camera is not connected!");
     exit();
     return;
  }
  
  // enable depthMap generation
 kinect.enableDepth();
   
  // enable skeleton generation for all joints
  kinect.enableUser();
  // enable color image from the Kinect
  kinect.enableRGB();
  //enable the finding of users but dont' worry about skeletons

  // turn on depth/color alignment
  kinect.alternativeViewPointDepthToImage();
  //create a buffer image to work with instead of using sketch pixels
  resultImage = new PImage(640, 480, RGB);
}
void draw() {
  kinect.update();
  // get the Kinect color image
  PImage rgbImage = kinect.rgbImage();

  image(rgbImage, 640, 0);
  if (tracking) {
    //ask kinect for bitmap of user pixels
    loadPixels();
    userMap = kinect.userMap();
    for (int i =0; i < userMap.length; i++) {
      // if the pixel is part of the user
      if (userMap[i] != 0) {
        // set the pixel to the color pixel
        resultImage.pixels[i] = rgbImage.pixels[i];
      }
      else {
        //set it to the background
        resultImage.pixels[i] = backgroundImage.pixels[i];
      }
    }

    //update the pixel from the inner array to image
     resultImage.updatePixels();
    image(resultImage, 0, 0);
  }
}


void onNewUser(SimpleOpenNI curContext, int userId)
{
 userID = userId;
  tracking = true;
  println("tracking");
  //curContext.startTrackingSkeleton(userId);
}

void onLostUser(SimpleOpenNI curContext, int userId)
{
  println("onLostUser - userId: " + userId);
}

void onVisibleUser(SimpleOpenNI curContext, int userId)
{
  //println("onVisibleUser - userId: " + userId);
}

Au plaisir,

Azeb

Hors ligne

 

#7 2014-03-31 19:21:38 Re : HELP : détourage sans fond vert avec la Kinect

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

Re: HELP : détourage sans fond vert avec la Kinect



Voilà, l'idée :

import processing.opengl.*;
import SimpleOpenNI.*;
import processing.video.*;
//install this on your machine and also the library in processing
//http://code.google.com/p/simple-openni/wiki/Installation

Movie film;
SimpleOpenNI kinect;

boolean tracking = false;
int userID; 
int[] userMap;
// declare our images
PImage backgroundImage;
PImage resultImage;
void setup() {
  size(640*2, 480);
  // load the background image
  backgroundImage = loadImage("http://www.eheart.com/SHASTA/wallpaper/alpenglow-640x480.jpg");
  kinect = new SimpleOpenNI(this);
  if (kinect.isInit() == false)
  {
    println("Can't init SimpleOpenNI, maybe the camera is not connected!");
    exit();
    return;
  }

  // enable depthMap generation
  kinect.enableDepth();

  // enable skeleton generation for all joints
  kinect.enableUser();
  // enable color image from the Kinect
  kinect.enableRGB();
  //enable the finding of users but dont' worry about skeletons

  // turn on depth/color alignment
  kinect.alternativeViewPointDepthToImage();
  //create a buffer image to work with instead of using sketch pixels
  resultImage = new PImage(640, 480, RGB);
  film = new Movie(this, "tagazou.mov");
  film.loop();
}

void draw() {
  kinect.update();
  // get the Kinect color image
  PImage rgbImage = kinect.rgbImage();

  image(rgbImage, 640, 0);
  if (tracking) {
    //ask kinect for bitmap of user pixels
    loadPixels();
    userMap = kinect.userMap();
    for (int i =0; i < userMap.length; i++) {
      // if the pixel is part of the user
      if (userMap[i] != 0) {
        // set the pixel to the color pixel
        resultImage.pixels[i] = rgbImage.pixels[i];
      }
      else {
        //set it to the background
        resultImage.pixels[i] = film.pixels[i];
      }
    }

    //update the pixel from the inner array to image
    resultImage.updatePixels();
    image(resultImage, 0, 0);
  }
}


void onNewUser(SimpleOpenNI curContext, int userId)
{
  userID = userId;
  tracking = true;
  println("tracking");
  //curContext.startTrackingSkeleton(userId);
}

void onLostUser(SimpleOpenNI curContext, int userId)
{
  println("onLostUser - userId: " + userId);
}

void onVisibleUser(SimpleOpenNI curContext, int userId)
{
  //println("onVisibleUser - userId: " + userId);
}

void movieEvent(Movie m) {
  m.read();
}

Hors ligne

 

#8 2014-04-01 09:31:57 Re : HELP : détourage sans fond vert avec la Kinect

Azeb
nouveau membre
Date d'inscription: 2014-03-25
Messages: 7

Re: HELP : détourage sans fond vert avec la Kinect



Hello !

Alors j'ai pris ton code, mais au moment de lancer j'ai ce message d'erreur en boucle :

JNA: Callback org.gstreamer.elements.AppSink$2@2695c1ab threw the following exception:
java.lang.NoClassDefFoundError: Could not initialize class org.gstreamer.lowlevel.AppAPI
    at org.gstreamer.elements.AppSink.gst(AppSink.java:38)
    at org.gstreamer.elements.AppSink.pullBuffer(AppSink.java:128)
    at org.gstreamer.elements.RGBDataAppSink$AppSinkNewBufferListener.newBuffer(RGBDataAppSink.java:144)
    at org.gstreamer.elements.AppSink$2.callback(AppSink.java:184)
    at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.jna.CallbackReference$DefaultCallbackProxy.invokeCallback(CallbackReference.java:455)
    at com.sun.jna.CallbackReference$DefaultCallbackProxy.callback(CallbackReference.java:485)

Est-ce qu'il me manque un fichier quelque part ?

Azeb

Hors ligne

 

#9 2014-04-01 10:32:31 Re : HELP : détourage sans fond vert avec la Kinect

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

Re: HELP : détourage sans fond vert avec la Kinect



Arrive-tu à faire tourner le programme vidéo des exemples :
File > Examples > Librairies > Video > Movie > Loop

As-tu bien remplacer tagazou.mov par ton fichier vidéo ?
Quelle est ta configuration matérielle et logicielle ?

Hors ligne

 

#10 2014-04-01 10:50:04 Re : HELP : détourage sans fond vert avec la Kinect

Azeb
nouveau membre
Date d'inscription: 2014-03-25
Messages: 7

Re: HELP : détourage sans fond vert avec la Kinect



Non le programme vidéo en exemple ne se lance pas non plus,

J'ai bien remplacé par une vidéo aux bonnes dimensions dans un dossier data.

Je tourne sur windows 7 SP1, Processing 2.1.1., SimpleOpenNI Version 1.96

quand je lance avec le code, j'ai bien à droite l'image de la kinect, à gauche le carré reste gris, et dans processing le message d'erreur.

Azeb

Hors ligne

 

#11 2014-04-02 20:25:48 Re : HELP : détourage sans fond vert avec la Kinect

Azeb
nouveau membre
Date d'inscription: 2014-03-25
Messages: 7

Re: HELP : détourage sans fond vert avec la Kinect



On a finalement réussit à faire défiler 25 images /s en background au lieu de mettre une vidéo ! smile


Azeb

Dernière modification par Azeb (2014-04-02 20:26:01)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024