最近在android下,玩OpenCV,使用起来很简单。
目标:手写数字,使用SVM进行分类
代码主要来自下面这个项目:
github.com/wblgers/OpenCV_Android_Plus/tree/master/
这个代码是在真机上,利用JNI方式,以载入so文件的方式调用Opencv,而我用的是OpenCV Manager的方式,在仿真器调用,并且大家用的OpenCV的版本不同,调用的形式也不太一样,不过代码小改改就能使用
首先, 在著名Mnist数据集上训练,得到mnist.xml模型,保存为 res/raw/mnist.xml。这个文件上述工程已经提供了,直接拿来用
工程主要部分为:主窗体+手写控件+已经训练好的SVM模型
OpenCV的版本有差异,原代码不能直接使用,修改后
声明SVM对象
SVM mClassifier = null;
File mSvmModel;
调用
mClassifier = SVM.create();
.....
InputStream is = getResources().openRawResource(R.raw.mnist);
//写入mSvmModel文件对象中
.....
//加载SVM模型
mClassifier.load(mSvmModel.getAbsolutePath());
用上述的代码,调用的时候有问题,原因在于加载方式的不同
OpenCV3.2 下,load是一个静态函数,返回的是SVM对象,因此需要做以下修改
mClassifier = SVM.load(mSvmModel.getAbsolutePath());
这样就能正常使用了