public static void extractImage( String rootDir, String scaledDir, long subjectId, long imageId, String fileName, int haarMinSize, int scaledSize) throws IOException { FileInputStream input = new FileInputStream(fileName); MBFImage image = ImageUtilities.readMBF(input); BufferedImage detectedFacesImage = ImageIO.read(new File(fileName)); // ImageUtils.displayImage(detectedFacesImage); FaceDetector<DetectedFace, FImage> fd = new HaarCascadeDetector(haarMinSize); List<DetectedFace> faces = fd.detectFaces(Transforms.calculateIntensity(image)); System.out.println("# Found faces, one per line."); System.out.println("# <x>, <y>, <width>, <height>"); Iterator<DetectedFace> iterator = faces.iterator(); BufferedImage extractFaceImage = null; if (iterator.hasNext()) { DetectedFace face = iterator.next(); Rectangle bounds = face.getBounds(); // extractFaceImage = detectedFacesImage.getSubimage((int)bounds.x, (int)bounds.y, // (int)bounds.width, (int)bounds.height); // writeImage(extractFaceImage, rootDir, "extracted", subjectId, imageId); // BufferedImage scaledBufferedImage = scale(extractFaceImage, scaledSize); // String scaledFileName = scaledDir + subjectId + "-" + imageId + ".jpg"; // System.out.println("scaledFileName = " + scaledFileName); // ImageIO.write(scaledBufferedImage, "jpg", new File(scaledFileName)); Graphics g = detectedFacesImage.createGraphics(); g.setColor(Color.GREEN); g.drawRect((int) bounds.x, (int) bounds.y, (int) bounds.width, (int) bounds.height); System.out.println(bounds.x + ";" + bounds.y + ";" + bounds.width + ";" + bounds.height); } else { Graphics g = detectedFacesImage.createGraphics(); g.setColor(Color.GREEN); g.drawString("No Image Detected", 20, 20); } writeImage(detectedFacesImage, rootDir, "detected", subjectId, imageId); // // FaceDetector < KEDetectedFace , FImage > fdK = new FKEFaceDetector () ; // List < KEDetectedFace > facesK = fdK.detectFaces ( Transforms.calculateIntensity ( // image ) ) ; // if (!facesK.isEmpty()) { // System.out.println("Found face"); // KEDetectedFace detectedKeyFace = facesK.get(0); // FacialKeypoint[] keypoints = detectedKeyFace.getKeypoints(); // for (FacialKeypoint keypoint: keypoints) { // System.out.println("keypoint:" + keypoint); // } // } }
/** * {@inheritDoc} * * @see org.openimaj.video.VideoDisplayListener#beforeUpdate(org.openimaj.image.Image) */ @Override public void beforeUpdate(MBFImage frame) { if (edgeDetect) frame.processInplace(new CannyEdgeDetector2()); if (faceDetect) { HaarCascadeDetector d = new HaarCascadeDetector(100); List<DetectedFace> faces = d.detectFaces(Transforms.calculateIntensityNTSC(frame)); for (DetectedFace face : faces) { Shape transBounds = face.getBounds(); MBFImageRenderer renderer = frame.createRenderer(); renderer.drawPolygon(transBounds.asPolygon(), RGBColour.RED); } } if (faceKPDetect) { System.out.println("HERE"); FKEFaceDetector fkp = new FKEFaceDetector(HaarCascadeDetector.BuiltInCascade.frontalface_alt.load()); List<KEDetectedFace> faces = fkp.detectFaces(Transforms.calculateIntensityNTSC(frame)); for (KEDetectedFace face : faces) { Shape transBounds = face.getBounds(); MBFImageRenderer renderer = frame.createRenderer(); renderer.drawPolygon(transBounds.asPolygon(), RGBColour.RED); for (FacialKeypoint kp : face.getKeypoints()) { Point2d pt = kp.position.clone(); pt.translate((float) transBounds.minX(), (float) transBounds.minY()); renderer.drawPoint(pt, RGBColour.GREEN, 3); } } } if (moustache) try { frame.internalAssign(new Mustache().addMustaches(frame)); } catch (IOException e) { e.printStackTrace(); } }