commit 18/08/2025
This commit is contained in:
@@ -10,15 +10,15 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Detectors {
|
||||
public static CascadeClassifier frontalfaceDetector;
|
||||
private static CascadeClassifier eyeDetector;
|
||||
private static CascadeClassifier profilefaceDetector;
|
||||
public CascadeClassifier frontalfaceDetector;
|
||||
private CascadeClassifier eyeDetector;
|
||||
private CascadeClassifier profilefaceDetector;
|
||||
|
||||
private static double scaleFactor = 1.2; // revisi 09/05/2025, dari nilai 1.05
|
||||
private final static int minNeighbors = 5; // revisi 09/05/2025, dari nilai 3
|
||||
private final static int flags = 0;
|
||||
private static Size FaceminSize;
|
||||
private static Size FacemaxSize;
|
||||
private double scaleFactor = 1.05; // revisi 09/05/2025, dari nilai 1.05
|
||||
private final int minNeighbors = 3; // revisi 09/05/2025, dari nilai 3
|
||||
private final int flags = 0;
|
||||
private Size FaceminSize;
|
||||
private Size FacemaxSize;
|
||||
|
||||
public Detectors(){
|
||||
LoadFrontalFaceDetector();
|
||||
@@ -27,62 +27,38 @@ public class Detectors {
|
||||
LoadProfileFaceDetector();
|
||||
}
|
||||
|
||||
// public static void LoadAllDetectors(){
|
||||
//
|
||||
// LoadFrontalFaceDetector();
|
||||
// LoadEyeDetector();
|
||||
//
|
||||
// LoadProfileFaceDetector();
|
||||
//
|
||||
// }
|
||||
|
||||
private void LoadFrontalFaceDetector(){
|
||||
// revisi 09/05/2025, dari filename = SomeCodes.ExtractResource("/haarcascade_frontalface_default.xml");
|
||||
String filename = SomeCodes.ExtractResource("/haarcascade_frontalface_alt.xml");
|
||||
if (filename!=null) {
|
||||
Logger.info("Face Detector file : " + filename);
|
||||
if (frontalfaceDetector==null) {
|
||||
try{
|
||||
frontalfaceDetector = new CascadeClassifier(filename);
|
||||
Logger.info("FaceDetector loaded");
|
||||
} catch (Exception e){
|
||||
Logger.error("Exception on loading FaceDetector : " + e.getMessage());
|
||||
}
|
||||
|
||||
} else Logger.info("FaceDetector already loaded");
|
||||
try{
|
||||
frontalfaceDetector = new CascadeClassifier(filename);
|
||||
} catch (Exception e){
|
||||
Logger.error("Exception on loading FaceDetector : " + e.getMessage());
|
||||
}
|
||||
} else Logger.error("Unable to extract face detector file");
|
||||
}
|
||||
|
||||
private void LoadProfileFaceDetector(){
|
||||
String filename = SomeCodes.ExtractResource("/haarcascade_profileface.xml");
|
||||
if (filename!=null) {
|
||||
Logger.info("Profile Face Detector file : " + filename);
|
||||
if (profilefaceDetector==null) {
|
||||
try{
|
||||
profilefaceDetector = new CascadeClassifier(filename);
|
||||
Logger.info("ProfileFaceDetector loaded");
|
||||
} catch (Exception e){
|
||||
Logger.error("Exception on loading ProfileFaceDetector : " + e.getMessage());
|
||||
}
|
||||
|
||||
} else Logger.info("ProfileFaceDetector already loaded");
|
||||
try{
|
||||
profilefaceDetector = new CascadeClassifier(filename);
|
||||
} catch (Exception e){
|
||||
Logger.error("Exception on loading ProfileFaceDetector : " + e.getMessage());
|
||||
}
|
||||
} else Logger.error("Unable to extract profile face detector file");
|
||||
}
|
||||
|
||||
private void LoadEyeDetector(){
|
||||
String filename = SomeCodes.ExtractResource("/haarcascade_eye.xml");
|
||||
if (filename!=null) {
|
||||
Logger.info("Eye Detector file : " + filename);
|
||||
if (eyeDetector==null) {
|
||||
try{
|
||||
try{
|
||||
|
||||
eyeDetector = new CascadeClassifier(filename);
|
||||
Logger.info("EyeDetector loaded");
|
||||
} catch (Exception e){
|
||||
Logger.error("Exception on loading EyeDetector : " + e.getMessage());
|
||||
}
|
||||
|
||||
} else Logger.info("EyeDetector already loaded");
|
||||
eyeDetector = new CascadeClassifier(filename);
|
||||
} catch (Exception e){
|
||||
Logger.error("Exception on loading EyeDetector : " + e.getMessage());
|
||||
}
|
||||
} else Logger.error("Unable to extract eye detector file");
|
||||
}
|
||||
|
||||
@@ -93,14 +69,16 @@ public class Detectors {
|
||||
*/
|
||||
public @NonNull List<DetectorResult> HaveFrontalFace(Mat graymat){
|
||||
List<DetectorResult> result = new ArrayList<>();
|
||||
//System.out.println("Detecting frontal from "+ graymat.size().width() + "x" + graymat.size().height());
|
||||
RectVector faces = DetectFrontalFace(graymat);
|
||||
if (faces!=null && faces.size()>0){
|
||||
|
||||
//System.out.println("faces size = " + faces.size());
|
||||
for(Rect face : faces.get()){
|
||||
RectVector eyes = DetectEye(graymat, face.width());
|
||||
DetectorResult dr = new DetectorResult();
|
||||
dr.setFace(face);
|
||||
if (eyes!=null && eyes.size()>=2){
|
||||
//System.out.println("eyes size = " + eyes.size());
|
||||
if (eyes.size()>=2){
|
||||
for(Rect eye : eyes.get()){
|
||||
if (SomeCodes.IsInsideRect(eye, face)) {
|
||||
dr.AddEye(eye);
|
||||
@@ -109,7 +87,7 @@ public class Detectors {
|
||||
}
|
||||
result.add(dr);
|
||||
}
|
||||
}
|
||||
} //else System.out.println("faces size = 0");
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -122,7 +100,7 @@ public class Detectors {
|
||||
RectVector eyes = DetectEye(graymat, face.width());
|
||||
DetectorResult dr = new DetectorResult();
|
||||
dr.setFace(face);
|
||||
if (eyes!=null && eyes.size()>0){
|
||||
if (eyes.size()>0){
|
||||
for(Rect eye : eyes.get()){
|
||||
if (SomeCodes.IsInsideRect(eye, face)) dr.AddEye(eye);
|
||||
}
|
||||
@@ -144,11 +122,11 @@ public class Detectors {
|
||||
if (FaceminSize!=null){
|
||||
if (FaceminSize.width()!=value || FaceminSize.height()!=value) {
|
||||
FaceminSize = new Size(value, value);
|
||||
//Logger.info("FaceMinSize changed to : " + FaceminSize.width());
|
||||
Logger.info("FaceMinSize changed to : " + FaceminSize.width());
|
||||
}
|
||||
} else {
|
||||
FaceminSize = new Size(value, value);
|
||||
//Logger.info("FaceMinSize created with value : " + FaceminSize.width());
|
||||
Logger.info("FaceMinSize created with value : " + FaceminSize.width());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -157,11 +135,11 @@ public class Detectors {
|
||||
if (FacemaxSize!=null){
|
||||
if (FacemaxSize.width()!=value || FacemaxSize.height()!=value) {
|
||||
FacemaxSize = new Size(value, value);
|
||||
//Logger.info("FaceMaxSize changed to : " + FacemaxSize.width());
|
||||
Logger.info("FaceMaxSize changed to : " + FacemaxSize.width());
|
||||
}
|
||||
} else {
|
||||
FacemaxSize = new Size(value, value);
|
||||
//Logger.info("FaceMaxSize created with value : " + FacemaxSize.width());
|
||||
Logger.info("FaceMaxSize created with value : " + FacemaxSize.width());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -192,6 +170,7 @@ public class Detectors {
|
||||
int maxwidth = (int)(facewidth*0.4);
|
||||
Size minsize = new Size(minwidth, minwidth);
|
||||
Size maxsize = new Size(maxwidth, maxwidth);
|
||||
//System.out.println("Detecting Eye with minsize = " + minsize.width() + "x" + minsize.height() + ", maxsize = " + maxsize.width() + "x" + maxsize.height());
|
||||
return Detect(graymat, eyeDetector, scaleFactor, minNeighbors, flags, minsize, maxsize);
|
||||
}
|
||||
|
||||
@@ -211,13 +190,13 @@ public class Detectors {
|
||||
} catch (Exception e) {
|
||||
System.out.println("Detectors Detect Error, Message : " + e.getMessage());
|
||||
}
|
||||
}
|
||||
} else System.out.println("graymat is smaller than minSize");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
} else System.out.println("minSize is larger than maxSize");
|
||||
} else System.out.println("minSize or maxSize is null");
|
||||
} else System.out.println("graymat is null, not 1 channel, or empty");
|
||||
|
||||
}
|
||||
} else System.out.println("detector empty");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user