Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 骨架跟踪与跟踪;在处理过程中播放视频_Video_Processing_Kinect_Simple Openni - Fatal编程技术网

Video 骨架跟踪与跟踪;在处理过程中播放视频

Video 骨架跟踪与跟踪;在处理过程中播放视频,video,processing,kinect,simple-openni,Video,Processing,Kinect,Simple Openni,我们使用以下代码来同时执行骨架跟踪(头部跟踪)和播放视频: 导入处理。视频。*; 导入SimplePenni。*; 导入java.util.*; simplepenni-kinect; PImage运动深度; int[]用户标识; 颜色[]用户颜色=新颜色[]{color(255,0,0),color(0255,0),color(0,0255), 颜色(255255,0)、颜色(255,0255)、颜色(0255255)}; PVector头部位置=新PVector(); 浮顶尺寸=200; 浮

我们使用以下代码来同时执行骨架跟踪(头部跟踪)和播放视频:

导入处理。视频。*;
导入SimplePenni。*;
导入java.util.*;
simplepenni-kinect;
PImage运动深度;
int[]用户标识;
颜色[]用户颜色=新颜色[]{color(255,0,0),color(0255,0),color(0,0255),
颜色(255255,0)、颜色(255,0255)、颜色(0255255)};
PVector头部位置=新PVector();
浮顶尺寸=200;
浮动置信水平=0.5;
浮动信心;
PVector confidenceVector=新PVector();
电影1;
无效设置()
{
尺寸(640480);
movie1=新电影(这是“moon.mP4”);
kinect=新的SimplePenni(本);
kinect.enableDepth();
kinect.enableUser();
电影1.play();
} 
作废提款(){
图像(电影1、0、0、宽度、高度);
kinect.update();
kinectDepth=kinect.depthImage();
图像(kinectDepth,0,0);
userID=kinect.getUsers();
对于(int i=0;i信心级别)
{
//根据手id更改绘制颜色#
笔划(用户颜色[(i)];
//用相同的颜色填充椭圆
填充(用户颜色[(i)]);
//画出身体的其余部分
drawSkeleton(userID[i]);
} 
}
} 
} 
/*---------------------------------------------------------------
绘制跟踪用户的骨架。输入是userID
----------------------------------------------------------------*/
void drawSkeleton(int userId){
kinect.getjointpositionskleton(userId,simplepenni.SKEL_HEAD,headPosition);
kinect.ConvertRealWorldTopProjective(头位,头位);
椭圆(头位.x,头位.y,30,30);
} 
void onNewUser(simplepenni curContext,int userId){
println(“检测到新用户-用户标识:“+userId”);
curContext.startTrackingSkeleton(userId);
} 
void onLostUser(simplepenni curContext,int userId){
println(“用户丢失-用户标识:“+userId”);
} 
void onVisibleUser(SimplePenni curContext,int userId){
}//void onVisibleUser(SimplePenni curContext,int userId)
无效电影事件(电影m){
m、 read();
}
当我们绑定运行上述代码时,日志文件中生成了以下错误:

Java框架:(J=编译的Java代码,J=解释的,Vv=虚拟机代码) J 1472 SimplePenni.SimplePennijni.IntVector_大小(jlSimplePenni/IntVector;)J(0字节)@0x0000000002ebe695[0x0000000002ebe640+0x55] J 1471 C1 SimplePenni.IntVector.size()J(8字节)@0x0000000002ebe314[0x0000000002ebe280+0x94] j simplePenni.simplePenni.getUsers()[I+15 J 1777 C1骨架_轨迹_simpleopen _video.draw()V(159字节)@0x0000000003004ca4[0x0000000003004600+0x6a4] j processing.core.PApplet.handleDraw()V+161 J 1769 C1 processing.awt.PSurfaceAWT$12.callDraw()V(18字节)@0x000000000300009c[0x0000000002fff80+0x11c] j processing.core.PSurfaceNone$AnimationThread.run()V+30 v~StubRoutines::调用_stub

值得注意的是,上述代码在没有播放视频(processing.video library)的情况下运行时没有任何错误


有没有可能帮助我们找到上面代码中的问题?

这确实是一个奇怪的行为,但要弄清问题的真相,可能需要从源代码处编译SimplePenni库,调试它的
getUsers()
方法正在生成无效的内存引用

如果您只是想进行一些测试并开始工作,那么这可能不实用。 我建议不要使用
getUsers()
方法。使用
getNumberOfUsers()
可能可以逃脱:

导入处理。视频。*;
导入SimplePenni。*;
导入java.util.*;
simplepenni-kinect;
PImage运动深度;
int[]用户标识;
颜色[]用户颜色=新颜色[]{color(255,0,0),color(0255,0),color(0,0255),
颜色(255255,0)、颜色(255,0255)、颜色(0255255)};
PVector头部位置=新PVector();
浮顶尺寸=200;
浮动置信水平=0.5;
浮动信心;
PVector confidenceVector=新PVector();
电影1;
无效设置()
{
尺寸(640480);
movie1=新电影(这是“moon.mP4”);
kinect=newsimplepenni(这个“/Users/George/Downloads/gaf/as/CityWall/oni/test2.oni”);
kinect.enableDepth();
kinect.enableUser();
movie1.loop();
} 
作废提款(){
kinect.update();
kinectDepth=kinect.depthImage();
图像(kinectDepth,0,0);
//userID=kinect.getUsers();
对于(int i=0;i信心级别)
{
//根据手id更改绘制颜色#
笔划(用户颜色[(i)];
//用相同的颜色填充椭圆
填充(用户颜色[(i)]);
//画出身体的其余部分
牵引骨架(i+1);
} 
}
} 
图像(电影1,0,0,电影1.width/4,电影1.height/4);
} 
/*---------------------------------------------------------------
绘制跟踪用户的骨架。输入为userID
----------------------------------------------------------------*/
void drawSkeleton(int userId){
kinect.getjointpositionskleton(userId,simplepenni.SKEL_HEAD,headPosition);
kinect.ConvertRealWorldTopProjective(头位,头位);
椭圆(头位.x,头位.y,30,30);
} 
void onNewUser(simplepenni curContext,int userId){
println(“检测到新用户-用户标识:“+userId”);
curContext.startTrackingSkeleton(userId);
} 
void onLostUser(simplepenni curContext,int userId){
println(“用户丢失-用户标识:“+userId”);
} 
void onVisibleUser(SimplePenni curContext,int userId){
}//void onVisibleUser(SimplePenni curContext,int userId)
无效电影事件(电影m){
m、 read();
}


请记住,这将告诉您跟踪了多少用户,而不是他们的ID是什么你甚至可以使用一个int,让我们15个,可以是OpenNI支持的最大用户数。这会起作用,因为你总是在检查kinect.isTrackingSkeleton这确实是一个奇怪的行为,但要弄清这一点
import processing.video.*;
import SimpleOpenNI.*;
import java.util.*;

SimpleOpenNI  kinect;
PImage kinectDepth;
int[] userID;

color[] userColor = new color[]{ color(255,0,0), color(0,255,0), color(0,0,255),
                                 color(255,255,0), color(255,0,255), color(0,255,255)};
 PVector headPosition = new PVector();
float headSize = 200;
float confidenceLevel = 0.5;
float confidence;
PVector confidenceVector = new PVector();
Movie movie1;

void setup()
{
  size(640, 480);
  movie1 = new Movie(this, "moon.mP4");
  kinect = new SimpleOpenNI(this,"/Users/George/Downloads/gaf/as/CityWall/oni/test2.oni");
   kinect.enableDepth();
  kinect.enableUser();
    movie1.loop();
} 

void draw(){
  kinect.update();
  kinectDepth = kinect.depthImage();
  image(kinectDepth,0,0); 
  //userID = kinect.getUsers();

  for(int i=0;i<kinect.getNumberOfUsers();i++)
  {
    if(kinect.isTrackingSkeleton(i+1))
    {
      confidence = kinect.getJointPositionSkeleton(i+1,SimpleOpenNI.SKEL_HEAD,confidenceVector);

      if(confidence > confidenceLevel)
      {
        // change draw color based on hand id#
        stroke(userColor[(i)]);
        // fill the ellipse with the same color
        fill(userColor[(i)]);
        // draw the rest of the body
        drawSkeleton(i+1);

      } 
    }
  } 
  image(movie1, 0, 0, movie1.width/4, movie1.height/4);
} 

/*---------------------------------------------------------------
Draw the skeleton of a tracked user.  Input is userID
----------------------------------------------------------------*/
void drawSkeleton(int userId){
  kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_HEAD,headPosition);
  kinect.convertRealWorldToProjective(headPosition,headPosition);
  ellipse(headPosition.x,headPosition.y,30,30);
} 

void onNewUser(SimpleOpenNI curContext, int userId){
  println("New User Detected - userId: " + userId);
  curContext.startTrackingSkeleton(userId);
} 


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

void onVisibleUser(SimpleOpenNI curContext, int userId){
} //void onVisibleUser(SimpleOpenNI curContext, int userId)


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