commit 10/04/2025
This commit is contained in:
@@ -9,14 +9,10 @@ import org.tinylog.Logger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static Config.SomeCodes.IsInsideRect;
|
||||
|
||||
public class Detectors {
|
||||
public static CascadeClassifier frontalfaceDetector;
|
||||
private static CascadeClassifier eyeDetector;
|
||||
private static CascadeClassifier profilefaceDetector;
|
||||
//private static CascadeClassifier palmDetector;
|
||||
//private static CascadeClassifier fistDetector;
|
||||
|
||||
private static double scaleFactor = 1.1;
|
||||
private final static int minNeighbors = 3;
|
||||
@@ -24,10 +20,6 @@ public class Detectors {
|
||||
private static Size FaceminSize;
|
||||
private static Size FacemaxSize;
|
||||
|
||||
private static final int EyetoFaceRatio = 6;
|
||||
private static Size EyeminSize;
|
||||
private static Size EyemaxSize;
|
||||
|
||||
public static void LoadAllDetectors(){
|
||||
|
||||
LoadFrontalFaceDetector();
|
||||
@@ -35,47 +27,10 @@ public class Detectors {
|
||||
|
||||
LoadProfileFaceDetector();
|
||||
|
||||
|
||||
//LoadFistDetector();
|
||||
//LoadRightPalmDetector();
|
||||
}
|
||||
|
||||
// private static void LoadFistDetector(){
|
||||
// String filename = SomeCodes.ExtractResource("/fist.xml");
|
||||
// if (filename!=null) {
|
||||
// Logger.info("Fist Detector file : " + filename);
|
||||
// if (fistDetector ==null) {
|
||||
// try{
|
||||
//
|
||||
// fistDetector = new CascadeClassifier(filename);
|
||||
// Logger.info("FistDetector loaded");
|
||||
// } catch (Exception e){
|
||||
// Logger.error("Exception on loading FistDetector : " + e.getMessage());
|
||||
// }
|
||||
//
|
||||
// } else Logger.info("FistDetector already loaded");
|
||||
// } else Logger.error("Unable to extract fist detector file");
|
||||
// }
|
||||
|
||||
// private static void LoadRightPalmDetector(){
|
||||
// String filename = SomeCodes.ExtractResource("/rpalm.xml");
|
||||
// if (filename!=null) {
|
||||
// Logger.info("Right Palm Detector file : " + filename);
|
||||
// if (palmDetector ==null) {
|
||||
// try{
|
||||
//
|
||||
// palmDetector = new CascadeClassifier(filename);
|
||||
// Logger.info("RightPalmDetector loaded");
|
||||
// } catch (Exception e){
|
||||
// Logger.error("Exception on loading RightPalmDetector : " + e.getMessage());
|
||||
// }
|
||||
//
|
||||
// } else Logger.info("RightPalmDetector already loaded");
|
||||
// } else Logger.error("Unable to extract right palm detector file");
|
||||
// }
|
||||
|
||||
private static void LoadFrontalFaceDetector(){
|
||||
String filename = SomeCodes.ExtractResource("/haarcascade_frontalface_alt.xml");
|
||||
String filename = SomeCodes.ExtractResource("/haarcascade_frontalface_default.xml");
|
||||
if (filename!=null) {
|
||||
Logger.info("Face Detector file : " + filename);
|
||||
if (frontalfaceDetector==null) {
|
||||
@@ -123,22 +78,6 @@ public class Detectors {
|
||||
} else Logger.error("Unable to extract eye detector file");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// public static boolean HavePalm(UMat graymat){
|
||||
// RectVector palms = Detect(graymat, palmDetector);
|
||||
// return palms!=null && palms.size()>0;
|
||||
// }
|
||||
//
|
||||
// public static boolean HaveFist(UMat graymat){
|
||||
// RectVector fists = Detect(graymat, fistDetector);
|
||||
// return fists!=null && fists.size()>0;
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
* Detect if there is a frontal face, containing 2 eyes
|
||||
* @param graymat Mat in Gray Scale
|
||||
@@ -150,12 +89,12 @@ public class Detectors {
|
||||
if (faces!=null && faces.size()>0){
|
||||
|
||||
for(Rect face : faces.get()){
|
||||
RectVector eyes = DetectEye(graymat);
|
||||
RectVector eyes = DetectEye(graymat, face.width());
|
||||
DetectorResult dr = new DetectorResult();
|
||||
dr.setFace(face);
|
||||
if (eyes!=null && eyes.size()>=2){
|
||||
for(Rect eye : eyes.get()){
|
||||
if (IsInsideRect(eye, face)) dr.AddEye(eye);
|
||||
if (SomeCodes.IsInsideRect(eye, face)) dr.AddEye(eye);
|
||||
}
|
||||
}
|
||||
result.add(dr);
|
||||
@@ -170,12 +109,12 @@ public class Detectors {
|
||||
if (faces!=null && faces.size()>0){
|
||||
|
||||
for(Rect face : faces.get()){
|
||||
RectVector eyes = DetectEye(graymat);
|
||||
RectVector eyes = DetectEye(graymat, face.width());
|
||||
DetectorResult dr = new DetectorResult();
|
||||
dr.setFace(face);
|
||||
if (eyes!=null && eyes.size()>0){
|
||||
for(Rect eye : eyes.get()){
|
||||
if (IsInsideRect(eye, face)) dr.AddEye(eye);
|
||||
if (SomeCodes.IsInsideRect(eye, face)) dr.AddEye(eye);
|
||||
}
|
||||
}
|
||||
result.add(dr);
|
||||
@@ -195,34 +134,28 @@ public class Detectors {
|
||||
if (FaceminSize!=null){
|
||||
if (FaceminSize.width()!=value || FaceminSize.height()!=value) {
|
||||
FaceminSize = new Size(value, value);
|
||||
EyeminSize = new Size(value/EyetoFaceRatio, value/EyetoFaceRatio);
|
||||
Logger.info("FaceMinSize changed to : " + FaceminSize.width());
|
||||
Logger.info("EyeMinSize changed to : " + EyeminSize.width());
|
||||
//Logger.info("FaceMinSize changed to : " + FaceminSize.width());
|
||||
}
|
||||
} else {
|
||||
FaceminSize = new Size(value, value);
|
||||
EyeminSize = new Size(value/EyetoFaceRatio, value/EyetoFaceRatio);
|
||||
Logger.info("FaceMinSize created with value : " + FaceminSize.width());
|
||||
Logger.info("EyeMinSize created with value : " + EyeminSize.width());
|
||||
//Logger.info("FaceMinSize created with value : " + FaceminSize.width());
|
||||
}
|
||||
|
||||
System.out.println("Face Min Size : " + FaceminSize.width());
|
||||
}
|
||||
|
||||
public static void setFaceMaxSize(int value){
|
||||
if (FacemaxSize!=null){
|
||||
if (FacemaxSize.width()!=value || FacemaxSize.height()!=value) {
|
||||
FacemaxSize = new Size(value, value);
|
||||
EyemaxSize = new Size(value/EyetoFaceRatio, value/EyetoFaceRatio);
|
||||
Logger.info("FaceMaxSize changed to : " + FacemaxSize.width());
|
||||
Logger.info("EyeMaxSize changed to : " + EyemaxSize.width());
|
||||
//Logger.info("FaceMaxSize changed to : " + FacemaxSize.width());
|
||||
}
|
||||
} else {
|
||||
FacemaxSize = new Size(value, value);
|
||||
EyemaxSize = new Size(value/EyetoFaceRatio, value/EyetoFaceRatio);
|
||||
Logger.info("FaceMaxSize created with value : " + FacemaxSize.width());
|
||||
Logger.info("EyeMaxSize created with value : " + EyemaxSize.width());
|
||||
//Logger.info("FaceMaxSize created with value : " + FacemaxSize.width());
|
||||
}
|
||||
|
||||
System.out.println("Face Max Size : " + FacemaxSize.width());
|
||||
}
|
||||
|
||||
|
||||
@@ -230,23 +163,6 @@ public class Detectors {
|
||||
return Detect(graymat, profilefaceDetector, scaleFactor, minNeighbors, flags, FaceminSize, FacemaxSize);
|
||||
}
|
||||
|
||||
public static RectVector DetectFrontalFace(Mat graymat, int minsize, int maxsize){
|
||||
Size min = new Size(minsize, minsize);
|
||||
Size max = new Size(maxsize, maxsize);
|
||||
RectVector rect = new RectVector();
|
||||
frontalfaceDetector.detectMultiScale(graymat, rect,scaleFactor, minNeighbors, flags, min, max);
|
||||
return rect;
|
||||
}
|
||||
|
||||
public static RectVector DetectProfileFace(Mat graymat, int minsize, int maxsize){
|
||||
Size min = new Size(minsize, minsize);
|
||||
Size max = new Size(maxsize, maxsize);
|
||||
RectVector rect = new RectVector();
|
||||
profilefaceDetector.detectMultiScale(graymat, rect,scaleFactor, minNeighbors, flags, min, max);
|
||||
return rect;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Detect Face from Mat
|
||||
* @param graymat Mat in Gray Scale
|
||||
@@ -256,18 +172,19 @@ public class Detectors {
|
||||
return Detect(graymat, frontalfaceDetector, scaleFactor, minNeighbors, flags, FaceminSize, FacemaxSize);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Detect Eye from Mat
|
||||
* If Eye detected, it will return RectVector with size is number of eyes detected
|
||||
* @param graymat Mat in Gray Scale
|
||||
* @return RectVector if eye detected, otherwise null
|
||||
*/
|
||||
public static RectVector DetectEye(UMat graymat){
|
||||
//return Detect(graymat, eyeDetector, scaleFactor, minNeighbors, flags, EyeminSize, EyemaxSize);
|
||||
return Detect(graymat, eyeDetector);
|
||||
public static RectVector DetectEye(UMat graymat, int facewidth){
|
||||
//return Detect(graymat, eyeDetector);
|
||||
int minwidth = (int)(facewidth*0.2);
|
||||
int maxwidth = (int)(facewidth*0.4);
|
||||
Size minsize = new Size(minwidth, minwidth);
|
||||
Size maxsize = new Size(maxwidth, maxwidth);
|
||||
return Detect(graymat, eyeDetector, scaleFactor, minNeighbors, flags, minsize, maxsize);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user