我试图在Android应用程序中加载级联分类器,但以下条件总是返回true,因此代码无法成功执行:
cascadeClassifier.empty()
Run Code Online (Sandbox Code Playgroud)
代码如下:
try
{
InputStream is = getResources().openRawResource(R.raw.cascade);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFile = new File(cascadeDir, "cascade.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 the cascade classifier
cascadeClassifier = new CascadeClassifier(mCascadeFile.getAbsolutePath());
if (cascadeClassifier.empty()) {
Log.e(TAG, "Failed to load cascade classifier");
cascadeClassifier = null;
}
}
catch (Exception e)
{
Log.e("OpenCVActivity", "Error loading cascade", e);
}
Run Code Online (Sandbox Code Playgroud)
cascade.xml文件存储在原始文件夹中,我已经使用python脚本成功测试了它 - 它成功检测到了对象.
如果这个答案成立,那么我不知道上面代码中可能出现什么问题,因为经过测试的训练级联并且输入流似乎指向了正确的位置(自动完成列表R.raw.cascade).
如果有人帮助解决这个问题,我将非常感激.
在实例化CascadeClassifier后添加以下行解决了这个问题:
cascadeClassifier.load(mCascadeFile.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)
工作代码如下:
InputStream is = getResources().openRawResource(R.raw.object_detector);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFile = new File(cascadeDir, "cascade.xml");
FileOutputStream os = new FileOutputStream(mCascadeFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1)
{
os.write(buffer, 0, bytesRead);
Log.d(TAG, "buffer: " + buffer.toString());
}
is.close();
os.close();
// Load the cascade classifier
cascadeClassifier = new CascadeClassifier(mCascadeFile.getAbsolutePath());
cascadeClassifier.load(mCascadeFile.getAbsolutePath());
if (cascadeClassifier.empty()) {
Log.e(TAG, "Failed to load cascade classifier");
cascadeClassifier = null;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1548 次 |
最近记录: |