@@ -42,6 +42,8 @@ dependencies { | |||
def opencv_version = "4.5.3.0" | |||
implementation "com.quickbirdstudios:opencv:${opencv_version}" | |||
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0" | |||
// Required for CameraX | |||
def camerax_version = "1.2.2" |
@@ -24,6 +24,7 @@ | |||
<category android:name="android.intent.category.LAUNCHER" /> | |||
</intent-filter> | |||
</activity> | |||
<service android:name=".Detection.DetectorService"/> | |||
</application> | |||
</manifest> |
@@ -0,0 +1,134 @@ | |||
package com.example.ueberwachungssystem.Detection; | |||
import android.content.Intent; | |||
import android.os.Binder; | |||
import android.os.IBinder; | |||
import android.util.Log; | |||
import android.widget.ImageView; | |||
import androidx.annotation.NonNull; | |||
import androidx.annotation.Nullable; | |||
import androidx.camera.core.ExperimentalGetImage; | |||
import androidx.lifecycle.LifecycleService; | |||
@ExperimentalGetImage | |||
public class DetectorService extends LifecycleService { | |||
public TestBinder testBinder = new TestBinder(); | |||
private DetectorService.OnDetectionListener listener; | |||
VideoDetector videoDetector = null; | |||
AudioRecorder audioRecorder = null; | |||
@Override | |||
public int onStartCommand(Intent intent, int flags, int startId) { | |||
videoDetector = new VideoDetector(this); | |||
videoDetector.setOnDetectionListener(new Detector.OnDetectionListener() { | |||
@Override | |||
public void onDetection(@NonNull DetectionReport detectionReport) { | |||
passToServiceListener(detectionReport); | |||
} | |||
}); | |||
audioRecorder = new AudioRecorder(this); | |||
return super.onStartCommand(intent, flags, startId); | |||
} | |||
/** Service methods */ | |||
public class TestBinder extends Binder { | |||
public DetectorService getBoundService() { | |||
// Return an instance of the TestService | |||
return DetectorService.this; | |||
} | |||
} | |||
@Nullable | |||
@Override | |||
public IBinder onBind(Intent intent) { | |||
super.onBind(intent); | |||
return testBinder; | |||
} | |||
/** Video Detection */ | |||
public void startVideoDetection() { | |||
if(videoDetector != null) | |||
videoDetector.startDetection(); | |||
} | |||
public void stopVideoDetection() { | |||
if(videoDetector != null) | |||
videoDetector.stopDetection(); | |||
} | |||
public boolean isVideoDetectionRunning() { | |||
if(videoDetector != null) | |||
return videoDetector.isDetecting(); | |||
return false; | |||
} | |||
public void debugVideoProcessing(ImageView input, ImageView output) { | |||
if(videoDetector != null) | |||
videoDetector.debugProcessing(input, output); | |||
} | |||
/** Audio Detection */ | |||
public void startAudioDetection() { | |||
} | |||
public void stopAudioDetection() { | |||
} | |||
/** Motion Detection */ | |||
public void startMotionDetection() { | |||
} | |||
public void stopMotionDetection() { | |||
} | |||
/** Video Recording */ | |||
public void startVideoRecording() { | |||
if(videoDetector != null) | |||
videoDetector.startRecording(); | |||
} | |||
public void stopVideoRecording() { | |||
if(videoDetector != null) | |||
videoDetector.stopRecording(); | |||
} | |||
public boolean isVideoRecordingRunning() { | |||
if(videoDetector != null) | |||
return videoDetector.isRecording(); | |||
return false; | |||
} | |||
/** Audio Recording */ | |||
public void startAudioRecording() { | |||
if(audioRecorder != null) | |||
audioRecorder.startRecording(); | |||
} | |||
public void stopAudioRecording() { | |||
if(audioRecorder != null) | |||
audioRecorder.stopRecording(); | |||
} | |||
public boolean isAudioRecordingRunning() { | |||
if(videoDetector != null) | |||
return audioRecorder.isRecording(); | |||
return false; | |||
} | |||
/** pass Detection Report to Service Detection Listener and trigger it */ | |||
public void passToServiceListener(DetectionReport detectionReport) { | |||
if (listener != null) { | |||
listener.onDetection(detectionReport); | |||
} | |||
} | |||
/** On Detection Listener - runs when violation is reported */ | |||
public interface OnDetectionListener { | |||
void onDetection(@NonNull DetectionReport detectionReport); | |||
} | |||
public void setOnDetectionListener(@NonNull DetectorService.OnDetectionListener listener) { | |||
this.listener = listener; | |||
} | |||
} |
@@ -5,48 +5,43 @@ import androidx.appcompat.app.AppCompatActivity; | |||
import androidx.camera.core.ExperimentalGetImage; | |||
import androidx.camera.view.PreviewView; | |||
import android.content.ComponentName; | |||
import android.content.Context; | |||
import android.content.Intent; | |||
import android.content.ServiceConnection; | |||
import android.os.Bundle; | |||
import android.os.IBinder; | |||
import android.util.Log; | |||
import android.view.View; | |||
import android.widget.ImageView; | |||
import android.widget.ToggleButton; | |||
import com.example.ueberwachungssystem.Detection.AudioRecorder; | |||
import com.example.ueberwachungssystem.Detection.DetectionReport; | |||
import com.example.ueberwachungssystem.Detection.Detector; | |||
import com.example.ueberwachungssystem.Detection.VideoDetector; | |||
import com.example.ueberwachungssystem.Detection.DetectorService; | |||
@ExperimentalGetImage | |||
public class MainActivity extends AppCompatActivity { | |||
private DetectorService detectorService = new DetectorService(); | |||
private ImageView inputImageView; | |||
private ImageView outputImageView; | |||
@Override | |||
protected void onCreate(Bundle savedInstanceState) { | |||
super.onCreate(savedInstanceState); | |||
setContentView(R.layout.activity_main); | |||
ImageView inputImageView = findViewById(R.id.inputImageView); | |||
ImageView outputImageView = findViewById(R.id.outputImageView); | |||
inputImageView = findViewById(R.id.inputImageView); | |||
outputImageView = findViewById(R.id.outputImageView); | |||
PreviewView previewView = findViewById(R.id.previewView); | |||
VideoDetector vd = new VideoDetector(this); | |||
//vd.setPreviewView(previewView); | |||
vd.debugProcessing(inputImageView, outputImageView); | |||
vd.setOnDetectionListener(new Detector.OnDetectionListener() { | |||
@Override | |||
public void onDetection(@NonNull DetectionReport detectionReport) { | |||
Log.d("onDetection", detectionReport.toString()); | |||
if (detectionReport.detectionState) | |||
vd.startRecording(); | |||
else | |||
vd.stopRecording(); | |||
} | |||
}); | |||
vd.startDetection(); | |||
Intent serviceIntent = new Intent(this, DetectorService.class); | |||
bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE); | |||
startService(serviceIntent); | |||
AudioRecorder audioRecorder = new AudioRecorder(this); | |||
@@ -56,17 +51,33 @@ public class MainActivity extends AppCompatActivity { | |||
public void onClick(View v) { | |||
if (toggleButton.isChecked()) | |||
{ | |||
//vd.startDetection(); | |||
vd.stopDetection(); | |||
//vd.startRecording(); | |||
audioRecorder.startRecording(); | |||
detectorService.startVideoRecording(); | |||
//detectorService.startAudioRecording(); | |||
} | |||
else { | |||
//vd.stopDetection(); | |||
vd.stopRecording(); | |||
audioRecorder.stopRecording(); | |||
//detectorService.stopAudioRecording(); | |||
detectorService.stopVideoRecording(); | |||
} | |||
} | |||
}); | |||
} | |||
private ServiceConnection serviceConnection = new ServiceConnection() { | |||
@Override | |||
public void onServiceConnected(ComponentName name, IBinder service) { | |||
DetectorService.TestBinder binder = (DetectorService.TestBinder) service; | |||
detectorService = binder.getBoundService(); | |||
detectorService.startVideoDetection(); | |||
detectorService.debugVideoProcessing(inputImageView, outputImageView); | |||
detectorService.setOnDetectionListener(new DetectorService.OnDetectionListener() { | |||
@Override | |||
public void onDetection(@NonNull DetectionReport detectionReport) { | |||
Log.d("onDetection", detectionReport.toString()); | |||
} | |||
}); | |||
} | |||
@Override | |||
public void onServiceDisconnected(ComponentName name) {} | |||
}; | |||
} |