private List<D> getDetectedFaces(String faceId, I faceImage) { List<D> toRet = null; if(!this.cache){ toRet = this.detector.detectFaces(faceImage); } else{ toRet = this.detectedFaceCache.get(faceId); if(toRet == null){ // System.out.println("Redetected face: " + faceId); toRet = this.detector.detectFaces(faceImage);; this.detectedFaceCache.put(faceId, toRet); } } return toRet; }
/** * Detect and recognise the faces in the given image, returning a list of * potential people for each face. * * @param image * the image * @return a list of faces and recognitions */ public List<IndependentPair<FACE, List<ScoredAnnotation<PERSON>>>> recognise(final FImage image) { final List<FACE> detectedFaces = this.detector.detectFaces(image); final List<IndependentPair<FACE, List<ScoredAnnotation<PERSON>>>> results = new ArrayList<IndependentPair<FACE, List<ScoredAnnotation<PERSON>>>>(); for (final FACE df : detectedFaces) { results.add(new IndependentPair<FACE, List<ScoredAnnotation<PERSON>>>(df, this.recogniser.annotate(df))); } return results; }
/** * Detect and recognise the faces in the given image, returning the most * likely person for each face. * * @param image * the image * @return a list of faces with the most likely person */ public List<IndependentPair<FACE, ScoredAnnotation<PERSON>>> recogniseBest(final FImage image) { final List<FACE> detectedFaces = this.detector.detectFaces(image); final List<IndependentPair<FACE, ScoredAnnotation<PERSON>>> results = new ArrayList<IndependentPair<FACE, ScoredAnnotation<PERSON>>>(); for (final FACE df : detectedFaces) { results.add(new IndependentPair<FACE, ScoredAnnotation<PERSON>>(df, this.recogniser.annotateBest(df))); } return results; }
/** * Detect and recognise the faces in the given image, returning a list of * potential people for each face. The recognised people will be restricted * to the given set. * * @param image * the image * @param restrict * set of people to restrict to * @return a list of faces and recognitions */ public List<IndependentPair<FACE, List<ScoredAnnotation<PERSON>>>> recognise(final FImage image, final Set<PERSON> restrict) { final List<FACE> detectedFaces = this.detector.detectFaces(image); final List<IndependentPair<FACE, List<ScoredAnnotation<PERSON>>>> results = new ArrayList<IndependentPair<FACE, List<ScoredAnnotation<PERSON>>>>(); for (final FACE df : detectedFaces) { results.add(new IndependentPair<FACE, List<ScoredAnnotation<PERSON>>>(df, this.recogniser.annotate(df, restrict))); } return results; }
/** * Detect and recognise the faces in the given image, returning the most * likely person for each face. The recognised people will be restricted to * the given set. * * @param image * the image * @param restrict * set of people to restrict to * @return a list of faces with the most likely person */ public List<IndependentPair<FACE, ScoredAnnotation<PERSON>>> recogniseBest(final FImage image, final Set<PERSON> restrict) { final List<FACE> detectedFaces = this.detector.detectFaces(image); final List<IndependentPair<FACE, ScoredAnnotation<PERSON>>> results = new ArrayList<IndependentPair<FACE, ScoredAnnotation<PERSON>>>(); for (final FACE df : detectedFaces) { results.add(new IndependentPair<FACE, ScoredAnnotation<PERSON>>(df, this.recogniser .annotateBest(df, restrict))); } return results; }
private void useHaarCascadeDetector( MBFImage image, Metadata metadata ) { FImage fim = Transforms.calculateIntensity( image ); // Detect human faces: List<DetectedFace> faces = fd.detectFaces( fim ); for( DetectedFace face : faces ) { this.addFaceRectangle(face.getBounds(), metadata, "human"); } // Detect cat faces: faces = catfd.detectFaces(fim); for (DetectedFace face : faces) { this.addFaceRectangle(face.getBounds(), metadata, "cat"); } }
private void useHaarCascadeDetector( MBFImage image, Metadata metadata ) { FImage fim = Transforms.calculateIntensity( image ); // Detect human faces: List<DetectedFace> faces = fd.detectFaces( fim ); for( DetectedFace face : faces ) { this.addFaceRectangle(face.getBounds(), metadata, "human"); } // Detect cat faces: faces = catfd.detectFaces(fim); for (DetectedFace face : faces) { this.addFaceRectangle(face.getBounds(), metadata, "cat"); } }
final List<FACE> faces = detector.detectFaces(img);
/** * Train the recogniser with a single example, returning the detected face. * If multiple faces are found, the biggest is chosen. * <p> * If you need more control, consider calling {@link #getDetector()} to get * a detector which you can apply to your image and {@link #getRecogniser()} * to get the recogniser which you can train with the detections directly. * * @param person * the person * @param image * the image with the persons face * @return the detected face */ public FACE train(final PERSON person, final FImage image) { final List<FACE> faces = this.detector.detectFaces(image); if (faces == null || faces.size() == 0) { FaceRecognitionEngine.logger.warn("no face detected"); return null; } else if (faces.size() == 1) { this.recogniser.train(AnnotatedObject.create(faces.get(0), person)); return faces.get(0); } else { FaceRecognitionEngine.logger.warn("More than one face found. Choosing biggest."); final FACE face = DatasetFaceDetector.getBiggest(faces); this.recogniser.train(AnnotatedObject.create(face, person)); return face; } }
detectedFaces = this.faceDetector.detectFaces(img);
@Override public void beforeUpdate(MBFImage frame) { final FaceDetector<DetectedFace, FImage> fd = new HaarCascadeDetector(40); final List<DetectedFace> faces = fd.detectFaces(Transforms.calculateIntensity(frame)); for (final DetectedFace face : faces) { frame.drawShape(face.getBounds(), RGBColour.RED); } }
private void useHaarCascadeDetector( MBFImage image, Metadata metadata ) { FaceDetector<DetectedFace,FImage> fd = new HaarCascadeDetector(20); FImage fim = Transforms.calculateIntensity( image ); List<DetectedFace> faces = fd.detectFaces( fim ); for( DetectedFace face : faces ) { this.addFaceRectangle(face.getBounds(), metadata); } }
private void useFKEFaceDetector( MBFImage image, Metadata metadata ) { FaceDetector<KEDetectedFace,FImage> fd = new FKEFaceDetector(20); FImage fim = Transforms.calculateIntensity( image ); List<KEDetectedFace> faces = fd.detectFaces( fim ); for( KEDetectedFace face : faces ) { //for( FacialKeypoint kp : face.getKeypoints() ) { // kp.position.translate(face.getBounds().getTopLeft()); //image.drawPoint(kp.position, RGBColour.GRAY, 3); //} this.addFaceRectangle(face.getBounds(), metadata, "human"); //image.drawShape(b, RGBColour.RED); //image.drawShape(b, ArrayUtils.toObject(dc.getColorComponents(null)) ); // Output in standard form: http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/#naming-space } //DisplayUtilities.display(image); }
private void useFKEFaceDetector( MBFImage image, Metadata metadata ) { FaceDetector<KEDetectedFace,FImage> fd = new FKEFaceDetector(20); FImage fim = Transforms.calculateIntensity( image ); List<KEDetectedFace> faces = fd.detectFaces( fim ); for( KEDetectedFace face : faces ) { //for( FacialKeypoint kp : face.getKeypoints() ) { // kp.position.translate(face.getBounds().getTopLeft()); //image.drawPoint(kp.position, RGBColour.GRAY, 3); //} this.addFaceRectangle(face.getBounds(), metadata); //image.drawShape(b, RGBColour.RED); //image.drawShape(b, ArrayUtils.toObject(dc.getColorComponents(null)) ); // Output in standard form: http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/#naming-space } //DisplayUtilities.display(image); }
private void useFKEFaceDetector( MBFImage image, Metadata metadata ) { FaceDetector<KEDetectedFace,FImage> fd = new FKEFaceDetector(20); FImage fim = Transforms.calculateIntensity( image ); List<KEDetectedFace> faces = fd.detectFaces( fim ); for( KEDetectedFace face : faces ) { //for( FacialKeypoint kp : face.getKeypoints() ) { // kp.position.translate(face.getBounds().getTopLeft()); //image.drawPoint(kp.position, RGBColour.GRAY, 3); //} this.addFaceRectangle(face.getBounds(), metadata, "human"); //image.drawShape(b, RGBColour.RED); //image.drawShape(b, ArrayUtils.toObject(dc.getColorComponents(null)) ); // Output in standard form: http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/#naming-space } //DisplayUtilities.display(image); }
@Override public void doTutorial(MBFImage toDraw) { List<KEDetectedFace> faces = this.detector.detectFaces(toDraw.flatten()); for (KEDetectedFace detectedFace : faces) { Rectangle b = detectedFace.getBounds(); Point2dImpl bp = new Point2dImpl(b.x,b.y); toDraw.drawShape(b, RGBColour.RED); FacialKeypoint[] kpts = detectedFace.getKeypoints(); List<Point2d> fpts = new ArrayList<Point2d>(); for(FacialKeypoint kpt : kpts){ Point2dImpl p = kpt.position; p.translate(bp); fpts.add(p); } toDraw.drawPoints(fpts, RGBColour.GREEN, 3); } } }
final List<FACE> faces = detector.detectFaces(img);
@Override public synchronized void beforeUpdate(MBFImage frame) { List<? extends DetectedFace> faces = null; if (findKeypoints) { faces = engine .detectFaces(Transforms.calculateIntensityNTSC(frame)); } else { faces = innerEngine.detectFaces(Transforms .calculateIntensityNTSC(frame)); } if (faces.size() > 0) { Rectangle r = faces.get(0).getBounds(); ((HaarCascadeDetector) innerEngine) .setMinSize((int) (r.width * 0.9)); } else { ((HaarCascadeDetector) innerEngine).setMinSize(1); } for (DetectedFace face : faces) { final Shape bounds = face.getBounds(); MBFImageRenderer renderer = frame.createRenderer(); renderer.drawPolygon(bounds.asPolygon(), RGBColour.RED); if (findKeypoints) { for (FacialKeypoint kp : ((KEDetectedFace) face).getKeypoints()) { Point2d pt = kp.position.clone(); pt.translate((float) bounds.minX(), (float) bounds.minY()); renderer.drawPoint(pt, RGBColour.GREEN, 3); } } } }
@Override public synchronized void beforeUpdate(MBFImage frame) { List<? extends DetectedFace> faces = null; if (findKeypoints) { faces = engine .detectFaces(Transforms.calculateIntensityNTSC(frame)); } else { faces = innerEngine.detectFaces(Transforms .calculateIntensityNTSC(frame)); } if (faces.size() > 0) { Rectangle r = faces.get(0).getBounds(); ((HaarCascadeDetector) innerEngine) .setMinSize((int) (r.width * 0.9)); } else { ((HaarCascadeDetector) innerEngine).setMinSize(1); } for (DetectedFace face : faces) { final Shape bounds = face.getBounds(); MBFImageRenderer renderer = frame.createRenderer(); renderer.drawPolygon(bounds.asPolygon(), RGBColour.RED); if (findKeypoints) { for (FacialKeypoint kp : ((KEDetectedFace) face).getKeypoints()) { Point2d pt = kp.position.clone(); pt.translate((float) bounds.minX(), (float) bounds.minY()); renderer.drawPoint(pt, RGBColour.GREEN, 3); } } } }
@Override public List<KEDetectedFace> detectFaces(FImage image) { final List<? extends DetectedFace> faces = faceDetector.detectFaces(image);