javakinectprocessingsimple-openni

Processing! Kinect send is position x in x seconds


I need a litle help here. I have a kinect working with processing using SimpleOpenNi library, and i just want the kinect send the position of a skeleton only 2 in 2 seconds for example. And if the position is the same as sent before don't do the action, is that possible? Thank You


Solution

  • Yes, you have to set a delay between a "send" and another.

    In thread where you're reading values:

    while(..) {
      Thread.sleep(2000); /* delay 2000ms => 2s */
      /* read value */
      /* if not the first iteration, save value in temp array */
      /* else check for each bone:  oldPos - epsilon < newPos < oldPos + epsilon */
    }
    

    To check if the previous positions is the same, you have to save skeleton positions in a temp var and check if new values is the same, maybe with a certaing neighborhood.

    Unfortunately there is no other solution because on configuration file you can set only two kind of FPS (here there's a discussion about):

    In tag MapOutputMode of your configuration file:

    <OpenNI>
      <Licenses>
        <License vendor="PrimeSense" key="0KOIk2JeIBYClPWVnMoRKn5cdY4="/>
      </Licenses>
      <Log writeToConsole="false" writeToFile="false">
        <LogLevel value="3"/>
        <Masks>
          <Mask name="ALL" on="true"/>
        </Masks>
        <Dumps></Dumps>
      </Log>
      <ProductionNodes>
        <Node type="Depth" name="Depth1">
          <Configuration>
            <MapOutputMode xRes="640" yRes="480" FPS="30" />
            <Mirror on="false"/>
          </Configuration>
        </Node>
        <Node type="User"/>
        <Node type="Gesture"/>
        <Node type="Hands"/>
      </ProductionNodes>
    </OpenNI>