Skip to content
This repository was archived by the owner on Sep 13, 2024. It is now read-only.

Commit db9f1ae

Browse files
Improved face detection
1 parent 5063fae commit db9f1ae

7 files changed

Lines changed: 55 additions & 49 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@
88
/build
99
/captures
1010
.externalNativeBuild
11+
.idea/caches/build_file_checksums.ser

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ dependencies {
2424
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
2525
implementation 'com.android.support:support-v4:27.1.1'
2626
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
27+
implementation 'gun0912.ted:tedpermission:2.2.0'
2728
testImplementation 'junit:junit:4.12'
2829
androidTestImplementation 'com.android.support.test:runner:1.0.2'
2930
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
<uses-permission android:name="android.permission.INTERNET" />
77
<uses-permission android:name="android.permission.REORDER_TASKS" />
88
<uses-permission android:name="android.permission.CAMERA" />
9+
<uses-feature
10+
android:name="android.hardware.camera"
11+
android:required="false" />
12+
<uses-feature android:name="android.hardware.camera.autofocus" />
913

1014
<application
1115
android:allowBackup="false"

app/src/main/java/com/coderbunker/kioskapp/KioskActivity.java

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.coderbunker.kioskapp;
22

3+
import android.Manifest;
34
import android.app.Activity;
45
import android.app.Dialog;
56
import android.content.Context;
@@ -29,6 +30,8 @@
2930
import com.coderbunker.kioskapp.facerecognition.FaceDetectionListener;
3031
import com.coderbunker.kioskapp.lib.HOTP;
3132
import com.coderbunker.kioskapp.lib.TOTP;
33+
import com.gun0912.tedpermission.PermissionListener;
34+
import com.gun0912.tedpermission.TedPermission;
3235

3336
import java.util.ArrayList;
3437
import java.util.Arrays;
@@ -141,10 +144,11 @@ public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError e
141144
handler.proceed(); //Ignore SSL certificate error
142145
}
143146
});
147+
144148
webView.getSettings().setJavaScriptEnabled(true);
145149
webView.getSettings().setAppCacheEnabled(true);
146-
webView.getSettings().setAppCacheMaxSize(5000 * 1000 * 1000);
147-
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
150+
webView.getSettings().setAppCacheMaxSize(200 * 1024 * 1024);
151+
webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
148152
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
149153
webView.loadUrl(URL);
150154

@@ -207,22 +211,42 @@ public void run() {
207211

208212

209213
if (checkCameraHardware(this)) {
210-
mCamera = getCameraInstance();
211-
if (mCamera != null) {
212214

213-
FaceDetectionListener faceDetectionListener = new FaceDetectionListener();
214-
faceDetectionListener.addObserver(this);
215-
mCamera.setFaceDetectionListener(faceDetectionListener);
215+
PermissionListener permissionlistener = new PermissionListener() {
216+
@Override
217+
public void onPermissionGranted() {
218+
try{
219+
mCamera.unlock();
220+
}catch (Exception e){
221+
222+
}
223+
mCamera = getCameraInstance();
224+
if (mCamera != null) {
216225

217-
mCameraPreview = new CameraPreview(this, mCamera);
226+
FaceDetectionListener faceDetectionListener = new FaceDetectionListener();
227+
faceDetectionListener.addObserver(KioskActivity.this);
228+
mCamera.setFaceDetectionListener(faceDetectionListener);
218229

219-
FrameLayout preview = findViewById(R.id.camera_preview);
220-
preview.addView(mCameraPreview);
230+
mCameraPreview = new CameraPreview(context, mCamera);
221231

222-
mCamera.startPreview();
223-
} else {
232+
FrameLayout preview = findViewById(R.id.camera_preview);
233+
preview.addView(mCameraPreview);
224234

225-
}
235+
mCamera.startPreview();
236+
Toast.makeText(context, "Face recognition started", Toast.LENGTH_LONG).show();
237+
} else {
238+
Toast.makeText(context, "Due a camera issue the face recognition can not be started.", Toast.LENGTH_LONG).show();
239+
}
240+
}
241+
242+
@Override
243+
public void onPermissionDenied(ArrayList<String> deniedPermissions) {
244+
Toast.makeText(context, "Face recognition not active due denied permissions.", Toast.LENGTH_SHORT).show();
245+
}
246+
247+
};
248+
249+
TedPermission.with(context).setPermissionListener(permissionlistener).setPermissions(Manifest.permission.CAMERA).check();
226250
}
227251

228252

@@ -465,31 +489,12 @@ protected void onPause() {
465489
super.onPause();
466490
}
467491

468-
private long last_detected = 0;
469-
private long face_current_counter = 0;
470-
private long face_counter = 0;
471-
472492
@Override
473493
public void update(Observable o, Object arg) {
474494
if (o instanceof FaceDetectionListener) {
475-
Camera.Face face = ((Camera.Face) arg);
476-
477-
face_detection_score.setText("Score:" + face.score);
478-
479-
if (face.score >= 85) {
480-
face_current_counter++;
481-
} else {
482-
face_current_counter = 0;
483-
}
484-
485-
if (face_current_counter >= 5 && last_detected < System.currentTimeMillis() + 45000) {
486-
face_counter++;
487-
last_detected = System.currentTimeMillis();
488-
face_current_counter = -5000;
489-
}
490-
491-
face_counter_view.setText("Viewers: " + face_counter);
492-
495+
Camera.Face[] faces = ((Camera.Face[]) arg);
496+
//face_detection_score.setText("Faces:" + faces.length);
497+
face_counter_view.setText("Current faces: " + faces.length);
493498
}
494499
}
495500
}

app/src/main/java/com/coderbunker/kioskapp/facerecognition/CameraPreview.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@ public void startFaceDetection() {
8080
// start face detection only *after* preview has started
8181
if (params.getMaxNumDetectedFaces() > 0) {
8282
// camera supports face detection, so can start it:
83-
mCamera.startFaceDetection();
83+
try {
84+
mCamera.startFaceDetection();
85+
} catch (RuntimeException ex) {
86+
System.out.println("Face recognition not started");
87+
}
8488
}
8589
}
8690
}

app/src/main/java/com/coderbunker/kioskapp/facerecognition/FaceDetectionListener.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,8 @@ public class FaceDetectionListener extends Observable implements Camera.FaceDete
88

99
@Override
1010
public void onFaceDetection(Camera.Face[] faces, Camera camera) {
11-
if (faces.length > 0) {
12-
for (Camera.Face face : faces) {
13-
try {
14-
/*System.out.println("--------------------------");
15-
System.out.println(face.score);*/
16-
setChanged();
17-
notifyObservers(face);
18-
} catch (Exception e) {
19-
e.printStackTrace();
20-
}
21-
}
22-
}
11+
setChanged();
12+
notifyObservers(faces);
2313
}
14+
2415
}

app/src/main/res/layout/activity_kiosk.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
android:layout_alignParentBottom="true"
4242
android:layout_centerHorizontal="true"
4343
android:background="#000"
44-
android:text="0"
44+
android:text="Current faces: 0"
4545
android:textColor="#FFF"
4646
android:textSize="18sp"
4747
android:visibility="visible"

0 commit comments

Comments
 (0)