【问题标题】:Processing, Simple kinect app don't start a event处理,简单的 kinect 应用程序不启动事件
【发布时间】:2013-06-25 14:09:23
【问题描述】:

我想在处理中做一个简单的kinect应用,我只想在kinect检测到骨架时,显示一个简单的jpeg图像,就这样。我写了一些代码,一切正常,但是当有人出现在 kinect 面前时,什么也没有发生,谁能帮助我? 这是我的代码:

import SimpleOpenNI.*;

SimpleOpenNI  kinect;

void setup()
{
  // Começar o evento
  kinect = new SimpleOpenNI(this);

  // Ativar o RGB 
  kinect.enableRGB();

  background(200,0,0);


  // Criar a janela do tamanho do dephMap
  size(kinect.rgbWidth(), kinect.rgbHeight()); 
}

void draw()
{
  // update da camera
  kinect.update();

  // mostrar o depthMap
  image(kinect.rgbImage(),0,0); 

  // Definir quantidade de pessoas
  int i;
  for (i=1; i<=10; i++)
  {
    // Verificar presença da pessoa
    if(kinect.isTrackingSkeleton(i))
    {
      mostrarImagem();  // draw the skeleton
    }
  }
}

// Mostrar a imagem
void mostrarImagem()
{  
 PImage img;
img = loadImage("proverbio1.jpg");
image(img, 0, 0); 
}

【问题讨论】:

  • 一个快速说明,在 setup() 中加载图像,而不是在被一次又一次调用的函数中 - 这最终会给你一个内存错误。
  • 你能试着在 Kinect 追踪骨骼的地方打印一些东西,看看它是否真的在工作吗?
  • 是的,我尝试了,但我按照您的要求做了,将图像放入设置中,现在一切正常,所以,谢谢。 :)

标签: kinect processing simple-openni


【解决方案1】:

您尚未为 OpenNI 用户事件设置回调。 此外,如果您只是想在检测到某人时显示图像,则实际上不需要跟踪骨架:只需使用场景图像即可。您可以在不跟踪骨架的情况下获取有关用户位置的一些信息,例如用户的重心。 如果您实际上不需要骨架数据,这样您将拥有一个更简单、更快的应用程序。

这里是一个基本的例子:

import SimpleOpenNI.*;

SimpleOpenNI context;//OpenNI context
PVector pos = new PVector();//this will store the position of the user
int user;//this will keep track of the most recent user added
PImage sample; 

void setup(){
  size(640,480);
  context = new SimpleOpenNI(this);//initialize
  context.enableScene();//enable features we want to use
  context.enableUser(SimpleOpenNI.SKEL_PROFILE_NONE);//enable user events, but no skeleton tracking, needed for the CoM functionality
  sample = loadImage("proverbio1.jpg");
}
void draw(){
  context.update();//update openni
  image(context.sceneImage(),0,0);
  if(user > 0){//if we have a user
    context.getCoM(user,pos);//store that user's position
    println("user " + user + " is at: " + pos);//print it in the console
    image(sample,0,0);
  }
}
//OpenNI basic user events
void onNewUser(int userId){
  println("detected" + userId);
  user = userId;
}
void onLostUser(int userId){
  println("lost: " + userId);
  user = 0;
}

您可以在 Kinect article 中看到一些方便的 SimpleOpenNI 示例,这是我去年举办的研讨会的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多