Trial 05022025
This commit is contained in:
@@ -45,6 +45,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import static Config.SomeCodes.*;
|
||||
import static id.co.gtc.erhacam.Detectors.*;
|
||||
import static org.bytedeco.opencv.global.opencv_core.CV_8UC3;
|
||||
import static org.bytedeco.opencv.global.opencv_core.mean;
|
||||
import static org.bytedeco.opencv.global.opencv_imgcodecs.imwrite;
|
||||
@@ -641,17 +642,32 @@ public class Cameradetail {
|
||||
protected Image call() {
|
||||
// repeat until capturing is false
|
||||
AtomicInteger fps = new AtomicInteger(0);
|
||||
AtomicBoolean eye_was_closed = new AtomicBoolean(false);
|
||||
AtomicInteger blink_counter = new AtomicInteger(0);
|
||||
boolean eye_was_closed = false;
|
||||
boolean waiting_for_second_blink = false;
|
||||
long last_blink = 0;
|
||||
|
||||
TimerTask timerTask = new TimerTask() {
|
||||
TimerTask fpsTask = new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
LiveFPS = fps.getAndSet(0);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Timer timer = new java.util.Timer();
|
||||
timer.scheduleAtFixedRate(timerTask, 1000, 1000);
|
||||
timer.scheduleAtFixedRate(fpsTask, 1000, 1000);
|
||||
|
||||
|
||||
boolean have_frontal_face;
|
||||
boolean have_left_45_face;
|
||||
int _face_width;
|
||||
int _face_height;
|
||||
boolean have_palm = false;
|
||||
boolean have_fist = false;
|
||||
|
||||
while (Capturing.get()) {
|
||||
try {
|
||||
// selama proses pengambilan foto, jangan ambil frame
|
||||
@@ -663,9 +679,7 @@ public class Cameradetail {
|
||||
IsGrabbingLiveView.set(true);
|
||||
Frame frame = mGrabber.grab(); // grab frame
|
||||
Mat mat = matconverter.convert(frame); // convert to Mat
|
||||
int counter = fps.incrementAndGet();
|
||||
if (mat.empty()) continue; // kalau gak ada data, continue
|
||||
if (counter % 5 != 0) continue; // frame skip to 6 fps
|
||||
fps.incrementAndGet();
|
||||
|
||||
mat.copyTo(BestMat); // copy to BestMat for using OpenCL
|
||||
IsGrabbingLiveView.set(false);
|
||||
@@ -685,119 +699,99 @@ public class Cameradetail {
|
||||
}
|
||||
}
|
||||
if (use_face){
|
||||
DetectorResult theface = null;
|
||||
have_frontal_face = false;
|
||||
have_left_45_face = false;
|
||||
_face_width = 0;
|
||||
_face_height = 0;
|
||||
|
||||
List<Rect> frontalfaces = Detectors.HaveFrontalFace(graymat);
|
||||
List<DetectorResult> frontalfaces = HaveFrontalFace(graymat);
|
||||
if (!frontalfaces.isEmpty()){
|
||||
if (event!=null) event.onFrontalFaceDetector(true, BestSize.width(), BestSize.height());
|
||||
for(Rect rect : frontalfaces){
|
||||
rectangle(LiveMat, rect, Scalar.GREEN);
|
||||
|
||||
for(DetectorResult rect : frontalfaces){
|
||||
if (rect.haveFace()){
|
||||
rect.FaceRectangle(LiveMat);
|
||||
rect.EyesRectangle(LiveMat);
|
||||
if (rect.getFaceWidth()>_face_width) _face_width = rect.getFaceWidth();
|
||||
if (rect.getFaceHeight()>_face_height) _face_height = rect.getFaceHeight();
|
||||
theface = rect;
|
||||
have_frontal_face = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (event!=null) event.onFrontalFaceDetector(false, BestSize.width(), BestSize.height());
|
||||
// gak punya frontal face
|
||||
// coba cek punya profile left face 45 gak
|
||||
List<DetectorResult> Left45Faces = HaveLeft45Face(graymat);
|
||||
if (!Left45Faces.isEmpty()){
|
||||
for(DetectorResult rect : Left45Faces){
|
||||
if (rect.haveFace()){
|
||||
rect.FaceRectangle(LiveMat);
|
||||
rect.EyesRectangle(LiveMat);
|
||||
if (rect.getFaceWidth()>_face_width) _face_width = rect.getFaceWidth();
|
||||
if (rect.getFaceHeight()>_face_height) _face_height = rect.getFaceHeight();
|
||||
have_left_45_face = true;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
List<Rect> Left45Faces = Detectors.HaveLeft45Face(graymat);
|
||||
if (!Left45Faces.isEmpty()){
|
||||
if (event!=null){
|
||||
event.onLeftEyeDetector(true, BestSize.width(), BestSize.height());
|
||||
event.onProfileFaceDetector(true, BestSize.width(), BestSize.height());
|
||||
}
|
||||
for(Rect rect : Left45Faces){
|
||||
rectangle(LiveMat, rect, Scalar.BLUE);
|
||||
if (have_frontal_face){
|
||||
if (event!=null) event.onFrontalFaceDetector(true, _face_width, _face_height);
|
||||
if (theface.haveEyes()){
|
||||
// ada mata (buka mata)
|
||||
if (eye_was_closed){
|
||||
eye_was_closed = false;
|
||||
long now = System.currentTimeMillis();
|
||||
if (waiting_for_second_blink){
|
||||
long diff = now - last_blink;
|
||||
// kalau beda waktu antara blink 1 dan blink 2 kurang dari 2 detik
|
||||
if (diff<=2000){
|
||||
waiting_for_second_blink = false;
|
||||
System.out.println("Blink Detected from camera "+cameratitle);
|
||||
if (event!=null) event.onBlink(2);
|
||||
}
|
||||
} else {
|
||||
last_blink = now;
|
||||
waiting_for_second_blink = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// tidak ada mata
|
||||
// transisi dari buka mata ke tutup mata
|
||||
if (!eye_was_closed){
|
||||
eye_was_closed = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else if (have_left_45_face ){
|
||||
if (event!=null) event.onProfileFaceDetector(true, _face_width, _face_height);
|
||||
} else {
|
||||
// no face at all
|
||||
|
||||
if (event!=null) {
|
||||
event.onLeftEyeDetector(false, BestSize.width(), BestSize.height());
|
||||
event.onProfileFaceDetector(false, BestSize.width(), BestSize.height());
|
||||
event.onFrontalFaceDetector(false, _face_width, _face_height);
|
||||
event.onProfileFaceDetector(false, _face_width, _face_height);
|
||||
}
|
||||
}
|
||||
|
||||
List<Rect> Right45Faces = Detectors.HaveRight45Face(graymat);
|
||||
if (!Right45Faces.isEmpty()){
|
||||
if (event!=null){
|
||||
event.onRightEyeDetector(true, BestSize.width(), BestSize.height());
|
||||
event.onProfileFaceDetector(true, BestSize.width(), BestSize.height());
|
||||
}
|
||||
for(Rect rect : Right45Faces){
|
||||
rectangle(LiveMat, rect, Scalar.BLUE);
|
||||
}
|
||||
} else {
|
||||
if (event!=null) {
|
||||
event.onRightEyeDetector(false, BestSize.width(), BestSize.height());
|
||||
event.onProfileFaceDetector(false, BestSize.width(), BestSize.height());
|
||||
}
|
||||
}
|
||||
|
||||
// List<Rect> Left90Faces = Detectors.HaveLeft90Face(graymat);
|
||||
// if (!Left90Faces.isEmpty()){
|
||||
// if (event!=null){
|
||||
// event.onLeftEyeDetector(true, BestSize.width(), BestSize.height());
|
||||
// event.onLeftEarDetector(true, BestSize.width(), BestSize.height());
|
||||
// }
|
||||
// for(Rect rect : Left90Faces){
|
||||
// rectangle(LiveMat, rect, Scalar.YELLOW);
|
||||
// }
|
||||
// } else {
|
||||
// if (event!=null) {
|
||||
// event.onLeftEyeDetector(false, BestSize.width(), BestSize.height());
|
||||
// event.onLeftEarDetector(false, BestSize.width(), BestSize.height());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// List<Rect> Right90Faces = Detectors.HaveRight90Face(graymat);
|
||||
// if (!Right90Faces.isEmpty()){
|
||||
// if (event!=null){
|
||||
// event.onRightEyeDetector(true, BestSize.width(), BestSize.height());
|
||||
// event.onRightEarDetector(true, BestSize.width(), BestSize.height());
|
||||
// }
|
||||
// for(Rect rect : Right90Faces){
|
||||
// rectangle(LiveMat, rect, Scalar.YELLOW);
|
||||
// }
|
||||
// } else {
|
||||
// if (event!=null) {
|
||||
// event.onRightEyeDetector(false, BestSize.width(), BestSize.height());
|
||||
// event.onRightEarDetector(false, BestSize.width(), BestSize.height());
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// if (have_face){
|
||||
// // kalau detect muka, baru coba detect mata
|
||||
// RectVector eye = DetectEye(graymat);
|
||||
// if (eye!=null && eye.size()>=2){
|
||||
// // ada mata
|
||||
// if (eye_was_closed.get()){
|
||||
// eye_was_closed.set(false);
|
||||
// if (blink_counter.get()>=2){
|
||||
// blink_counter.set(0);
|
||||
// if (event!=null) event.onBlink(blink_counter.get());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (event!=null) event.onEyeDetector(true, BestSize.width(), BestSize.height());
|
||||
// for(int i=0; i<eye.size(); i++){
|
||||
// Rect rect = eye.get(i);
|
||||
// rectangle(LiveMat, rect, Scalar.RED);
|
||||
// }
|
||||
// } else {
|
||||
// // mata tidak ada
|
||||
// if (!eye_was_closed.get()){
|
||||
// eye_was_closed.set(true);
|
||||
// blink_counter.incrementAndGet();
|
||||
// }
|
||||
// if (event!=null) event.onEyeDetector(false, BestSize.width(), BestSize.height());
|
||||
// }
|
||||
//
|
||||
// } else {
|
||||
// eye_was_closed.set(false);
|
||||
// blink_counter.set(0);
|
||||
// // tidak ada muka, tidak ada mata
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (HavePalm(graymat)) {
|
||||
if (!have_palm){
|
||||
have_fist = false;
|
||||
have_palm = true;
|
||||
System.out.println("Palm Detected from camera " + cameratitle);
|
||||
}
|
||||
}
|
||||
if (HaveFist(graymat)) {
|
||||
if (!have_fist) {
|
||||
have_palm = false;
|
||||
have_fist = true;
|
||||
System.out.println("Fist Detected from camera "+cameratitle);
|
||||
}
|
||||
}
|
||||
|
||||
UMat rgbmat = new UMat(LiveMat.size(), CV_8UC3);
|
||||
cvtColor(LiveMat, rgbmat, COLOR_BGR2RGB);
|
||||
|
||||
Reference in New Issue
Block a user