【问题标题】:Can't load CascadeClassifier无法加载 CascadeClassifier
【发布时间】:2016-05-23 22:29:57
【问题描述】:

我尝试在Android应用中加载级联分类器,但以下条件总是返回true,因此代码无法成功执行:

cascadeClassifier.empty()

代码如下:

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);
        }

cascade.xml 文件存储在 raw 文件夹中,我已使用 python 脚本成功对其进行了测试 - 它成功检测到对象。

如果this 的答案成立,那么我不知道上面的代码有什么问题,因为经过训练的级联已经过测试并且输入流似乎指向正确的位置(自动完成列表 R.raw .cascade)。

如果有人帮助解决问题,我将非常感激。

【问题讨论】:

  • 能否输出 mCascadeFile.getAbsolutePath() 来测试它是否是你所期望的?

标签: android opencv


【解决方案1】:

通过在实例化 CascadeClassifier 后添加以下行解决了问题:

cascadeClassifier.load(mCascadeFile.getAbsolutePath());

工作代码如下:

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;
}

【讨论】:

  • 但对我来说仍然是空的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2013-10-31
相关资源
最近更新 更多