我想用臉部及眼部分類在我的應用程序。這個概念是複製你有Resources.Raw之下,他們用InputStream
和OutputStream
下應用添加到某個文件夾的分類XML文件的內容,然後嘗試從該文件夾中加載這些分類中的應用程序來使用它們。我使用現有的代碼在這裏爲了這個目的,無法在OpenCV中加載分類爲Android
http://romanhosek.cz/android-eye-detection-updated-for-opencv-2-4-6/
下面是加載分類代碼部分:
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()) {
Toast.makeText(getApplicationContext(), "face classifier error", Toast.LENGTH_LONG).show();
Log.e(TAG, "Failed to load cascade face classifier");
mJavaDetector = null;
} else
Log.i(TAG, "Loaded cascade classifier from "
+ mCascadeFile.getAbsolutePath());
mJavaDetectorEye = new CascadeClassifier(
cascadeFileER.getAbsolutePath());
if (mJavaDetectorEye.empty()) {
Toast.makeText(getApplicationContext(), "eye classifer error", Toast.LENGTH_LONG).show();
Log.e(TAG, "Failed to load cascade eye classifier");
mJavaDetectorEye = null;
} else
Log.i(TAG, "Loaded cascade classifier from "
+ mCascadeFile.getAbsolutePath());
cascadeDir.delete();
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Failed to load cascade. Exception thrown: " + e);
}
當運行應用程序我在得到這兩個錯誤信息logcat:
Failed to load cascade face classifier
Failed to load cascade eye classifier
從代碼中可以看出,只有在加載分類器時出現問題纔會生成這些代碼。
我用Android的工作室,和OpenCV爲Android 3.1 V。我也嘗試下載最新的SDK構建工具,但這並沒有解決問題。項目。
誰能告訴我怎麼解決這個問題呢?
謝謝。
你說得對,我這樣做,效果不錯,謝謝你的回答。 – Dania