From 493fa8ca832f163e841d87e41191c2c362466eb4 Mon Sep 17 00:00:00 2001 From: Bastian Kohler Date: Sun, 18 Jun 2023 18:12:03 +0200 Subject: [PATCH] Fixed Grey Stripes and Rotation Problems --- .../Detection/VideoDetector.java | 31 +++++++++++++++---- .../ueberwachungssystem/MainActivity.java | 1 + app/src/main/res/layout/activity_main.xml | 7 +++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/example/ueberwachungssystem/Detection/VideoDetector.java b/app/src/main/java/com/example/ueberwachungssystem/Detection/VideoDetector.java index 17ed3b0..3925962 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/Detection/VideoDetector.java +++ b/app/src/main/java/com/example/ueberwachungssystem/Detection/VideoDetector.java @@ -6,15 +6,21 @@ import android.app.Activity; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.ImageFormat; +import android.graphics.Rect; +import android.hardware.SensorManager; import android.media.Image; import android.os.CountDownTimer; import android.util.Log; +import android.view.Display; +import android.view.OrientationEventListener; import android.view.Surface; +import android.view.WindowManager; import android.widget.ImageView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.camera.core.AspectRatio; import androidx.camera.core.CameraSelector; import androidx.camera.core.ExperimentalGetImage; import androidx.camera.core.ImageAnalysis; @@ -57,8 +63,8 @@ public class VideoDetector extends Detector { // Camera Provider private ProcessCameraProvider cameraProvider; - private final ImageAnalysis imageAnalysis; - private final VideoCapture videoCapture; + private ImageAnalysis imageAnalysis; + private VideoCapture videoCapture; private final Preview preview; // Logic @@ -73,9 +79,7 @@ public class VideoDetector extends Detector { private ImageView inputImageView = null; private ImageView outputImageView = null; - - // Recording - private final String outputName = "video.mp4"; + private int rotation = 0; // Parameters @@ -120,6 +124,9 @@ public class VideoDetector extends Detector { getPermissions(); return; } + + imageAnalysis = setupImageAnalysis(); + // Open CV startup check if (!OpenCVLoader.initDebug()) { Log.e("OpenCV", "Unable to load OpenCV!"); @@ -191,6 +198,7 @@ public class VideoDetector extends Detector { builder.setTargetResolution(IMAGE_RES); builder.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST); builder.setOutputImageFormat(ImageAnalysis.OUTPUT_IMAGE_FORMAT_YUV_420_888); + builder.setTargetRotation(Surface.ROTATION_90); ImageAnalysis imageAnalysis = builder.build(); // Set Analyzer imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), imageProxy -> { @@ -200,6 +208,7 @@ public class VideoDetector extends Detector { // Violation Handling Mat processed = processImage(imageProxy); + int n = OpenCVHelper.countNonZeroPixels(processed); int pixelCount = image.getWidth() * image.getHeight(); float percentChanged = (float) n / pixelCount; @@ -217,8 +226,9 @@ public class VideoDetector extends Detector { @SuppressLint("RestrictedApi") private VideoCapture setupVideoCapture() { + int rotation = getRotation(); return new VideoCapture.Builder() - .setTargetRotation(Surface.ROTATION_0) + .setTargetRotation(rotation) .build(); } @@ -235,6 +245,8 @@ public class VideoDetector extends Detector { return; } + videoCapture = setupVideoCapture(); + final ListenableFuture cameraProviderFuture = ProcessCameraProvider.getInstance(context); cameraProviderFuture.addListener(() -> { try { @@ -307,6 +319,7 @@ public class VideoDetector extends Detector { // Show Output Image if (outputImageView != null) OpenCVHelper.debugMat(processed, outputImageView); + return processed; } @@ -329,4 +342,10 @@ public class VideoDetector extends Detector { // Return the timestamp as a string return currentTime.format(formatter); } + + private int getRotation() { + WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + Display display = windowManager.getDefaultDisplay(); + return display.getRotation(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java index 503c022..72fbefe 100644 --- a/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java +++ b/app/src/main/java/com/example/ueberwachungssystem/MainActivity.java @@ -53,6 +53,7 @@ public class MainActivity extends AppCompatActivity { if (toggleButton.isChecked()) { //vd.startDetection(); + vd.stopDetection(); vd.startRecording(); audioRecorder.startRecording(); } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 57571c5..c5abe55 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -24,15 +24,18 @@ + \ No newline at end of file