Unable to run Motion Sensor example provided by Daniel on Pi, Error when trying to use copy

I am trying to run the example on motion sensor on raspberry p. I am caught with this error. The reason for this error is in prevframe.copy

Code:

import processing.video.*;

// Variable for capture device
Capture video;
// Previous Frame
PImage prevFrame;

// How different must a pixel be to be a “motion” pixel
float threshold = 50;

void setup() {
size(320, 240);
// Using the default capture device
video = new Capture(this, width, height);
video.start();
// Create an empty image the same size as the video
prevFrame = createImage(video.width, video.height, RGB);
}

// New frame available from camera
void captureEvent(Capture video) {
// Save previous frame for motion detection!!
prevFrame.copy(video, 0, 0, video.width, video.height, 0, 0, video.width, video.height);
prevFrame.updatePixels();
video.read();
}

void draw() {
background(0);

// You don’t need to display it to analyze it!
image(video, 0, 0);

video.loadPixels();
prevFrame.loadPixels();

// Begin loop to walk through every pixel
// Start with a total of 0
float totalMotion = 0;

// Sum the brightness of each pixel
for (int i = 0; i < video.pixels.length; i ++ ) {
// Step 2, what is the current color
color current = video.pixels[i];

// Step 3, what is the previous color
color previous = prevFrame.pixels[i];

// Step 4, compare colors (previous vs. current)
float r1 = red(current); 
float g1 = green(current);
float b1 = blue(current);
float r2 = red(previous); 
float g2 = green(previous);
float b2 = blue(previous);

// Motion for an individual pixel is the difference between the previous color and current color.
float diff = dist(r1, g1, b1, r2, g2, b2);
// totalMotion is the sum of all color differences. 
totalMotion += diff;

}

// averageMotion is total motion divided by the number of pixels analyzed.
float avgMotion = totalMotion / video.pixels.length;

// Draw a circle based on average motion
noStroke();
fill(0);
float r = avgMotion * 2;
ellipse(width/2, height/2, r, r);
}

Link for Motion Sensor code

error, disabling captureEvent()
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at processing.video.Capture.fireCaptureEvent(Unknown Source)
at processing.video.Capture.invokeEvent(Unknown Source)
at processing.video.Capture$3.rgbFrame(Unknown Source)
at org.gstreamer.elements.RGBDataAppSink$AppSinkNewBufferListener.newBuffer(RGBDataAppSink.java:162)
at org.gstreamer.elements.AppSink$2.callback(AppSink.java:184)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.jna.CallbackReference$DefaultCallbackProxy.invokeCallback(CallbackReference.java:485)
at com.sun.jna.CallbackReference$DefaultCallbackProxy.callback(CallbackReference.java:515)
Caused by: java.lang.NullPointerException
at sketch_motionsensing_ae.captureEvent(sketch_motionsensing_ae.java:59)
… 15 more

@Phaneeth What is the version of Processing’s video library that you have installed on the Raspberry Pi?

1 Like