我很抱歉初学者的问题,但我没有找到答案。 我正试图实时检测脸部和眼睛。代码(在android openCV上运行)如果我只使用面部检测或仅使用眼睛检测就可以正常工作,但是当我将两者结合起来时,就像在附带的代码中一样,程序在运行时崩溃。我不确定如何组合这两个级联(一个在脸部周围显示一个矩形,另一个在眼睛周围显示)。任何帮助将不胜感激!
InputStream is3 = context.getResources().openRawResource(R.raw.lbpcascade_frontalface);
File cascadeDir = context.getDir("cascade", Context.MODE_PRIVATE);
File cascadeFile = new File(cascadeDir, "lbpcascade_frontalface.xml");
File cascadeFileEye = new File(cascadeDir, "eyes_detect.xml");
FileOutputStream os = new FileOutputStream(cascadeFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = is3.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
is3.close();
os.close();
FileOutputStream os1 = new FileOutputStream(cascadeFileEye);
byte[] bufferEye = new byte[4096];
int bytesReadEye;
while ((bytesReadEye = is3.read(bufferEye)) != -1) {
os1.write(bufferEye, 0, bytesReadEye);
}
is4.close();
os1.close();
mCascade = new CascadeClassifier(cascadeFile.getAbsolutePath());
mCascadeEye = new CascadeClassifier(cascadeFileEye.getAbsolutePath());
if (mCascade.empty()) {
//Log.e(TAG, "Failed to load cascade classifier");
mCascade = null;
}
if (mCascadeEye.empty()) {
//Log.e(TAG, "Failed to load cascade classifier");
mCascadeEye = null;
}
cascadeFile.delete();
cascadeDir.delete();
答案 0 :(得分:0)
以下是opencv主页的相应教程:
答案 1 :(得分:0)
你是不是错过了这一行
InputStream is3 = context.getResources().openRawResource(R.raw.eyes_detect);
你的Raw文件夹中也应该有文件eyes_detect.xml。
我使用了haarcascade_eye_tree_eyeglasses.xml,并且仅传递了检测到的脸部的裁剪区域以获取眼睛位置。