@Override public FeatureVector extract(MBFImage image, FImage mask) { if (mask != null) System.err.println("Warning: COLOR_FACES doesn't support masking"); SandeepFaceDetector fd = new SandeepFaceDetector(); return mode.getFeatureVector(fd.detectFaces(image), image); } }
@Override public List<CCDetectedFace> detectFaces(MBFImage inputRGB) { final FImage skin = generateSkinColorMap(Transforms.RGB_TO_HS(inputRGB)); final FImage edge = generateSobelMagnitudes(inputRGB); final FImage map = generateFaceMap(skin, edge); return extractFaces(map, skin, Transforms.calculateIntensityNTSC(inputRGB)); }
protected List<CCDetectedFace> extractFaces(FImage faceMap, FImage skinMap, FImage image) { final List<ConnectedComponent> blobs = ccl.findComponents(faceMap); final List<CCDetectedFace> faces = new ArrayList<CCDetectedFace>(); for (final ConnectedComponent blob : blobs) { if (blob.calculateArea() > 1000) { final double[] centroid = blob.calculateCentroid(); final double[] hw = blob.calculateAverageHeightWidth(centroid); final double percentageSkin = calculatePercentageSkin(skinMap, (int) Math.round(centroid[0] - (hw[0] / 2)), (int) Math.round(centroid[1] - (hw[1] / 2)), (int) Math.round(centroid[0] + (hw[0] / 2)), (int) Math.round(centroid[1] + (hw[1] / 2))); final double ratio = hw[0] / hw[1]; if (Math.abs(ratio - GOLDEN_RATIO) < goldenRatioThreshold && percentageSkin > percentageThreshold) { final Rectangle r = blob.calculateRegularBoundingBox(); faces.add(new CCDetectedFace( r, image.extractROI(r), blob, (float) ((percentageSkin / percentageThreshold) * (Math.abs(ratio - GOLDEN_RATIO) / goldenRatioThreshold)))); } } } return faces; }
@Override public FeatureVector extract(MBFImage image, FImage mask) { if (mask != null) System.err.println("Warning: COLOR_FACES doesn't support masking"); SandeepFaceDetector fd = new SandeepFaceDetector(); return mode.getFeatureVector(fd.detectFaces(image), image); } }
outputImage = args[1]; final SandeepFaceDetector sfd = new SandeepFaceDetector(); final List<CCDetectedFace> faces = sfd.detectFaces(image);