OpenCV для Android: не удалось загрузить ошибку каскадного классификатора
Это первый раз, когда я использую библиотеку openCV. Я хочу использовать это, чтобы обнаружить глаза. Я использовал FdActivity
код, доступный в этом уроке:
http://romanhosek.cz/android-eye-detection-updated-for-opencv-2-4-6/
В учебнике используется OpenCV 2.4.6, но я скачал версию 3.1 в своем проекте. Из-за различий версий я изменил строки, использующие putText, rectangle и circle, чтобы импортировать их из imgproc вместо Core. Это все, что я изменил. Я добавил haarcascade_lefteye_2splits.xml и lbpcascade_frontalface.xml в необработанную папку в папке res.
При запуске приложения я получаю эту ошибку в logcat:
failed to load cascade classifier
Который генерируется только из этих строк, если mJavaDetector или mJavaDetectorEye пусто:
try {
// load cascade file from application resources
InputStream is = getResources().openRawResource(
R.raw.lbpcascade_frontalface);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFile = new File(cascadeDir,
"lbpcascade_frontalface.xml");
FileOutputStream os = new FileOutputStream(mCascadeFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
is.close();
os.close();
// --------------------------------- load left eye
// classificator -----------------------------------
InputStream iser = getResources().openRawResource(
R.raw.haarcascade_lefteye_2splits);
File cascadeDirER = getDir("cascadeER",
Context.MODE_PRIVATE);
File cascadeFileER = new File(cascadeDirER,
"haarcascade_eye_right.xml");
FileOutputStream oser = new FileOutputStream(cascadeFileER);
byte[] bufferER = new byte[4096];
int bytesReadER;
while ((bytesReadER = iser.read(bufferER)) != -1) {
oser.write(bufferER, 0, bytesReadER);
}
iser.close();
oser.close();
mJavaDetector = new CascadeClassifier(
mCascadeFile.getAbsolutePath());
if (mJavaDetector.empty()) {
Log.e(TAG, "Failed to load cascade classifier");
mJavaDetector = null;
} else
Log.i(TAG, "Loaded cascade classifier from "
+ mCascadeFile.getAbsolutePath());
mJavaDetectorEye = new CascadeClassifier(
cascadeFileER.getAbsolutePath());
if (mJavaDetectorEye.empty()) {
Log.e(TAG, "Failed to load cascade classifier");
mJavaDetectorEye = null;
} else
Log.i(TAG, "Loaded cascade classifier from "
+ mCascadeFile.getAbsolutePath());
cascadeDir.delete();
}
Я думаю, что путь к "haarcascade_eye_right.xml" не правильный, или XML-файл не существует, это то, что вызывает ошибку?
Если да, как я могу получить файл XML и где именно я буду его хранить? Если нет, что является причиной проблемы?
Примечание: я использую Android Studio.
Я был бы признателен за любую помощь в этом отношении, я пытался некоторое время, но я не мог решить ее.
1 ответ
Я понял. Хотя понятия не имею, ПОЧЕМУ....
mJavaDetector = new CascadeClassifier( mCascadeFile.getAbsolutePath() );
//must add this line
mJavaDetector.load( mCascadeFile.getAbsolutePath() );
...
меня устраивает.