|
|
@@ -32,15 +32,14 @@ public class VideoDetector extends Detector { |
|
|
|
// Preview Camera Image |
|
|
|
private PreviewView previewView = null; |
|
|
|
// Detect Violation |
|
|
|
private static final int PIXEL_THRESHOLD = 60; // Luminosity (brightness channel of YUV_420_888) |
|
|
|
private static final float ALARM_THRESHOLD = 0.5f; // Percent of pixels changed |
|
|
|
private static final float PIXEL_THRESHOLD = 30f; // Luminosity (brightness channel of YUV_420_888) |
|
|
|
private static final float ALARM_THRESHOLD = 1f; // Percent of pixels changed |
|
|
|
private ByteBuffer previousBuffer = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Constructor */ |
|
|
|
public VideoDetector(Context context) { |
|
|
|
|
|
|
|
super(); |
|
|
|
this.context = context; |
|
|
|
} |
|
|
@@ -59,6 +58,7 @@ public class VideoDetector extends Detector { |
|
|
|
cameraProvider = cameraProviderFuture.get(); |
|
|
|
bindLuminosityAnalysis(cameraProvider); |
|
|
|
isDetectionRunning = true; |
|
|
|
previousBuffer = null; |
|
|
|
} catch (ExecutionException | InterruptedException e) { |
|
|
|
// No errors need to be handled for this Future. This should never be reached. |
|
|
|
} |
|
|
@@ -118,23 +118,15 @@ public class VideoDetector extends Detector { |
|
|
|
preview.setSurfaceProvider(previewView.getSurfaceProvider()); |
|
|
|
|
|
|
|
cameraProvider.bindToLifecycle((LifecycleOwner) context, cameraSelector, imageAnalysis, preview); |
|
|
|
stopDetection(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Calculate Amount of Pixels changed */ |
|
|
|
private int getChangedPixelCount(Image image) { |
|
|
|
int width = image.getWidth(); |
|
|
|
int height = image.getHeight(); |
|
|
|
|
|
|
|
Image.Plane[] planes = image.getPlanes(); |
|
|
|
ByteBuffer buffer = planes[0].getBuffer(); |
|
|
|
|
|
|
|
int yRowStride = image.getPlanes()[0].getRowStride(); |
|
|
|
int yPixelStride = image.getPlanes()[0].getPixelStride(); |
|
|
|
|
|
|
|
int changedPixelCount = 0; |
|
|
|
|
|
|
|
if (previousBuffer == null) { |
|
|
|
previousBuffer = ByteBuffer.allocate(buffer.capacity()); |
|
|
|
buffer.rewind(); |
|
|
@@ -143,6 +135,15 @@ public class VideoDetector extends Detector { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int width = image.getWidth(); |
|
|
|
int height = image.getHeight(); |
|
|
|
|
|
|
|
int yRowStride = image.getPlanes()[0].getRowStride(); |
|
|
|
int yPixelStride = image.getPlanes()[0].getPixelStride(); |
|
|
|
|
|
|
|
int changedPixelCount = 0; |
|
|
|
|
|
|
|
// Count changed pixels |
|
|
|
for (int y = 0; y < height; ++y) { |
|
|
|
for (int x = 0; x < width; x++) { |
|
|
|
int index = (y * yRowStride) + (x * yPixelStride); |
|
|
@@ -153,6 +154,7 @@ public class VideoDetector extends Detector { |
|
|
|
changedPixelCount++; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Reset and copy Byte Buffer |
|
|
|
buffer.rewind(); |
|
|
|
previousBuffer.rewind(); |