Ich arbeite an einem Gesichtserkennungsproblem, ich habe Arbeitscode, der Androids FaceDetector verwendet, um die Gesichter zu finden, aber ich muss herausfinden, wie OpenCV/JavaCV Funktionen zur Gesichtserkennung implementieren. Dies ist keine Live-Kamera, es verwendet ein Bild aus der Galerie, ich bin in der Lage, diesen Bilderpfad abrufen, aber ich kann nicht den CvHaarClassifierCascade-Klassifikator und CvMemStorage-Speicher zu initialisieren, wenn jemand mich in die richtige Richtung zeigen kann oder stellen Sie einen Quellcode bereit, der diese Variablen in Java korrekt initialisiert. DankeOpenCV/JavaCV Android Gesichtserkennung Initialisierung
2
A
Antwort
1
Sie könnten es so tun: Stellen Sie einfach ein BufferedImage.
Alternativ laden Sie das Original IplImage direkt mit dem Image-Pfad mit cvLoadImage (..).
// provide an BufferedImage
BufferedImage image;
// Preload the opencv_objdetect module to work around a known bug.
Loader.load(opencv_objdetect.class);
// Path to the cascade file provided by opencv
String cascade = "../haarcascade_frontalface_alt2.xml"
CvHaarClassifierCascade cvCascade = new CvHaarClassifierCascade(cvLoad(cascade));
// create storage for face detection
CvMemStorage tempStorage = CvMemStorage.create();
// create IplImage from BufferedImage
IplImage original = IplImage.createFrom(image);
IplImage grayImage = null;
if (original.nChannels() >= 3) {
// 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.
grayImage = IplImage.create(image.getWidth(), image.getHeight(),
IPL_DEPTH_8U, 1);
// We convert the original image to grayscale.
cvCvtColor(original, grayImage, CV_BGR2GRAY);
} else {
grayImage = original.clone();
}
// We detect the faces with some default params
CvSeq faces = cvHaarDetectObjects(grayImage, cvCascade,
tempStorage, 1.1, 3,
0;
// Get face rectangles
CvRect[] fArray = new CvRect[faces.total()];
for (int i = 0; i < faces.total(); i++) {
fArray[i] = new CvRect(cvGetSeqElem(faces, i));
}
// print them out
for(CvRect f: fArray){
System.out.println("x: " + f.x() + "y: " + f.y() + "width: " + f.width() + "height: " + f.height());
}
tempStorage.release();
1
Die Klassendefinitionen sind im Grunde Ports Java der ursprünglichen Header-Dateien in C, sowie die fehlenden Funktionalität nur durch die C++ API von OpenCV ausgesetzt. Sie auf diesen Link verweisen können, enthält es http://code.google.com/p/javacv/
und http://geekoverdose.wordpress.com/tag/opencv-javacv-android-haarcascade-face-detection/