0

Android で顔認識を使用しようとしています。すべてのロードは問題ありませんが、haarcascade_frontalface_alt2.xmlファイルは、JavaCV を使用してロードする方法がわかりません。これは私が持っているコードです:

public static void detectFacialFeatures()
{
    // The cascade definition to be used for detection.

    // This will redirect the OpenCV errors to the Java console to give you
    // feedback about any problems that may occur.
    new JavaCvErrorCallback();

    // Load the original image.

    // 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.
    IplImage grayImage = IplImage.create(iplImage.width(),iplImage.height(), IPL_DEPTH_8U, 1);

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

    CvMemStorage storage = CvMemStorage.create();

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

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

    Log.d("CARAS","Hay "+faces.total()+" caras ahora mismo");
}

問題はここにあります

CvHaarClassifierCascade(cvLoad("./haarcascade_frontalface_alt2.xml"));

xml ファイルを /assets フォルダーに入れてみましたが、どのようにロードすればよいかわかりません。それは常に私に次のエラーを与えています:

03-26 17:31:25.385: E/cv::error()(14787): OpenCV Error: Null pointer (Invalid classifier cascade) in CvSeq* cvHaarDetectObjectsForROC(const CvArr*, CvHaarClassifierCascade*, CvMemStorage*, std::vector<int>&, std::vector<double>&, double, int, int, CvSize, CvSize, bool), file /home/saudet/projects/cppjars/OpenCV-2.4.4/modules/objdetect/src/haar.cpp, line 1514

...このコード行を指しているエラーをもっとよく見る:

CvSeq 面 = cvHaarDetectObjects(grayImage、カスケード、ストレージ、1.1、1、0);

そのため、問題が haarcascade_frontalface_alt2.xml の読み込みに起因していると確信しています。

ご協力いただきありがとうございます。

PD: カスケードを sdcard ではなく apk に含めたい。

4

2 に答える 2

0

カスケードが SD カードにある場合は、次を使用できます。

CascadeClassifier cascade = new CascadeClassifier(Environment.getExternalStorageDirectory().getAbsolutePath() + "/cascade.xml");

Environment.getExternalStorageDirectory().getAbsolutePath()SDカードへの正しいパスを提供し、次はSD内のファイルへのアドレスです。

于 2013-03-26T22:19:08.480 に答える