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
Réponses
Trop de publicités?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.
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" ?
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);
}
}
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.