def opencv_version = "4.5.3.0" | def opencv_version = "4.5.3.0" | ||||
implementation "com.quickbirdstudios:opencv:${opencv_version}" | implementation "com.quickbirdstudios:opencv:${opencv_version}" | ||||
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0" | |||||
// Required for CameraX | // Required for CameraX | ||||
def camerax_version = "1.2.2" | def camerax_version = "1.2.2" |
<category android:name="android.intent.category.LAUNCHER" /> | <category android:name="android.intent.category.LAUNCHER" /> | ||||
</intent-filter> | </intent-filter> | ||||
</activity> | </activity> | ||||
<service android:name=".Detection.DetectorService"/> | |||||
</application> | </application> | ||||
</manifest> | </manifest> |
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; | |||||
} | |||||
} |
import androidx.camera.core.ExperimentalGetImage; | import androidx.camera.core.ExperimentalGetImage; | ||||
import androidx.camera.view.PreviewView; | 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.Bundle; | ||||
import android.os.IBinder; | |||||
import android.util.Log; | import android.util.Log; | ||||
import android.view.View; | import android.view.View; | ||||
import android.widget.ImageView; | import android.widget.ImageView; | ||||
import android.widget.ToggleButton; | import android.widget.ToggleButton; | ||||
import com.example.ueberwachungssystem.Detection.AudioRecorder; | |||||
import com.example.ueberwachungssystem.Detection.DetectionReport; | 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 | @ExperimentalGetImage | ||||
public class MainActivity extends AppCompatActivity { | public class MainActivity extends AppCompatActivity { | ||||
private DetectorService detectorService = new DetectorService(); | |||||
private ImageView inputImageView; | |||||
private ImageView outputImageView; | |||||
@Override | @Override | ||||
protected void onCreate(Bundle savedInstanceState) { | protected void onCreate(Bundle savedInstanceState) { | ||||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||||
setContentView(R.layout.activity_main); | 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); | 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); | |||||
public void onClick(View v) { | public void onClick(View v) { | ||||
if (toggleButton.isChecked()) | if (toggleButton.isChecked()) | ||||
{ | { | ||||
//vd.startDetection(); | |||||
vd.stopDetection(); | |||||
//vd.startRecording(); | |||||
audioRecorder.startRecording(); | |||||
detectorService.startVideoRecording(); | |||||
//detectorService.startAudioRecording(); | |||||
} | } | ||||
else { | 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) {} | |||||
}; | |||||
} | } |