33 votes

Détection des visages en java

Quelqu'un peut-il recommander une bibliothèque java décente pour la détection des visages (la reconnaissance n'est pas nécessaire, juste la détection). La bibliothèque serait de préférence purement java (par exemple, pas de dépendances sur d'autres libs natives, DLLs ou autres). Plateformes : Linux est un must ; OS X et Windows sont très agréables à avoir. La performance n'est pas un gros problème, elle peut être lente, c'est pour le traitement hors ligne du serveur. Tout ce que j'ai besoin de savoir est : y a-t-il des visages dans la photo ? Si oui, quelles sont les coordonnées de leurs boîtes englobantes ? Merci

15voto

Vérifiez La bibliothèque d'imagerie Java de Jon qui intègre la détection des visages. Vous aurez peut-être un peu de travail à faire puisqu'il a été écrit à l'origine pour J2ME mais possède une bibliothèque pour J2SE.

14voto

stolsvik Points 2049

Faible (et sourceforge ) enveloppe apparemment OpenCV, mais a également un pur java eigenfaces (détection). Malheureusement, il est sous GPL - j'ai récemment demandé s'ils étaient prêts à considérer la LGPL.

Voici OpenCV au fait. Wiki . " OpenWiki ", puisque le premier est fermé. " Reconnaissance de visage avec OpenCV " - apparemment ce que fait Faint. Un gars qui a utilisé OpenCV et JNI, en faisant détection en temps réel sur une webcam .

Voici le Page d'accueil sur la reconnaissance du visage de la page de algorithmes (papiers académiques, pas java).

Enfin, comme je ne peux pas commenter les "réponses" des autres, j'aimerais savoir si @steven connaît réellement une telle bibliothèque, ou s'il se contente, en fait, de dire "Cherchez sur Google, je n'en ai personnellement aucune idée" ?

7voto

Luke Quinane Points 8257

JavaCV des liaisons avec OpenCV semblent fonctionner assez bien. Voici une version mise à jour de l'article de TK Gospodinov. exemple :

import com.googlecode.javacv.cpp.opencv_core;
import com.googlecode.javacv.cpp.opencv_highgui;
import com.googlecode.javacv.cpp.opencv_objdetect;

import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_highgui.cvSaveImage;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_BGR2GRAY;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvCvtColor;
import static com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects;

public class FaceDetection {     
  // The cascade definition to be used for detection.
  private static final String CASCADE_FILE = 
    "C:\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt.xml";

  public static void main(String[] args) throws Exception {
    // Load the original image.
    opencv_core.IplImage originalImage = opencv_highgui.cvLoadImage(args[0], 1);

    // We need a grayscale image in order to do the recognition, so we
    // create a new image of the same size as the original one.
    opencv_core.IplImage grayImage = opencv_core.IplImage.create(
        originalImage.width(),
        originalImage.height(), 
        opencv_core.IPL_DEPTH_8U, 1);

    // We convert the original image to grayscale.
    cvCvtColor(originalImage, grayImage, CV_BGR2GRAY);

    opencv_core.CvMemStorage storage = opencv_core.CvMemStorage.create();

    // We instantiate a classifier cascade to be used for detection,
    // using the cascade definition.
    opencv_objdetect.CvHaarClassifierCascade cascade = 
        new opencv_objdetect.CvHaarClassifierCascade(
            cvLoad(CASCADE_FILE));

    // We detect the faces.
    opencv_core.CvSeq faces = cvHaarDetectObjects(
        grayImage, cascade, storage, 1.1, 1, 0);

    // We iterate over the discovered faces and draw yellow rectangles
    // around them.
    for (int i = 0; i < faces.total(); i++) {
      opencv_core.CvRect r = new opencv_core.CvRect(cvGetSeqElem(faces, i));
      cvRectangle(originalImage, cvPoint(r.x(), r.y()),
      cvPoint(r.x() + r.width(), r.y() + r.height()), 
          opencv_core.CvScalar.YELLOW, 1, CV_AA, 0);
    }

    // Save the image to a new file.
    cvSaveImage(args[1], originalImage);
  }
}

3voto

Janusz Points 52607

Il existe un Liaison OpenCV pour le traitement qui pourrait être utilisé avec du java pur je pense. Mais il dépend du framework OpenCV, donc ce n'est qu'une solution si vous ne trouvez rien d'autre.

1voto

monksy Points 8788

Recherchez les implémentations Java des Eigenfaces. La liaison OpenCV est une véritable plaie en Java et dans un environnement multiplateforme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X