【问题解决】Android使用Javacv加载分类器

在Android中使用Javacv做人脸检测时,在Javacv(我用的是1.2版本)的samples里有这么一段加载分类器的代码:

public FaceView(FacePreview context) throws IOException {
        super(context);

        // Load the classifier file from Java resources.
        File classifierFile = Loader.extractResource(getClass(),
            "/org/bytedeco/javacv/facepreview/haarcascade_frontalface_alt.xml",
            context.getCacheDir(), "classifier", ".xml");
        if (classifierFile == null || classifierFile.length() <= 0) {
            throw new IOException("Could not extract the classifier file from Java resource.");
        }

        // Preload the opencv_objdetect module to work around a known bug.
        Loader.load(opencv_objdetect.class);
        classifier = new CvHaarClassifierCascade(cvLoad(classifierFile.getAbsolutePath()));
        classifierFile.delete();
        if (classifier.isNull()) {
            throw new IOException("Could not load the classifier file.");
        }
        storage = CvMemStorage.create();
    }

在自己的项目中使用时遇到了几个需要注意的问题:

1. 分类器文件的存放位置

在assets目录下新创建classifier文件夹,将haarcascade_frontalface_alt.xml放到此目录下,那么获取分类器文件路径的代码如下:

File classifierFile = Loader.extractResource(context.getClass(), "/assets/classifier/haarcascade_frontalface_alt.xml",
                context.getCacheDir(), "classifier", ".xml");
if (classifierFile == null || classifierFile.length() <= 0) {
    throw new IOException("Could not extract the classifier file from Java resource.");
}

注:File extractResource(Class cls, String name, File directory, String prefix, String suffix)函数参数的意义:
- cls:加载分类器的类
- name:分类器文件的路径
- directory:用于临时存放读取的分类器,如果为null,该函数使用默认的路径
- prefix:生成临时文件时所需的前缀
- suffix:生成临时文件时所需的后缀

2. 加载分类器文件出错

运行的时候程序挂在了这一行:

classifier = new CvHaarClassifierCascade(cvLoad(classifierFile.getAbsolutePath()));

也就是加载分类器文件时出错了,报错的信息为:

Unspecified error (The node does not represent a user object (unknown type?)) in function cvRead…

原因是分类器文件对应的opencv版本不一致导致的。
我是按照Javacv在github的changelog.md中所说的Opencv3.0.0来下对应的haarcascade_frontalface_alt.xml的,结果报了上面的错误,无奈试一下Opencv3.1.0的,也是如此,只好查它的issue,结果发现:
https://github.com/bytedeco/javacv/issues/102
按照所说的到
https://raw.githubusercontent.com/Itseez/opencv/2.4.10/data/haarcascades/haarcascade_frontalface_alt.xml
下了一份,就OK了(MD)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值