Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Using SIFT/SURF for feature extraction using opencv on android in Android Studio

'm working on a feature extraction/matching app using opencv on android using android studio .. I followed these steps for using native code in order to use SIFT or SURF algorithms.. I have copied the folders (armeabi, armeabi-v7a, ...etc) to the jniLibs folder and here is my code for the main methods

public class MainActivity extends Activity implements CvCameraViewListener2{

private Mat                    mRgba;
private Mat                    mGrayMat;
private CameraBridgeViewBase   mOpenCvCameraView;

Mat descriptors ;
List<Mat> descriptorsList;

FeatureDetector featureDetector;
MatOfKeyPoint keyPoints;
DescriptorExtractor descriptorExtractor;
DescriptorMatcher descriptorMatcher;

boolean mIsJavaCamera = true;
static {System.loadLibrary("opencv_java");}

////////////////////////////////////////////////////////////////
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                //Log.i(TAG, "OpenCV loaded successfully");
                mOpenCvCameraView.enableView();
            } break;
            default:
            {
                super.onManagerConnected(status);
            } break;
        }
    }
};

@Override
public void onCameraViewStarted(int width, int height) {

    mRgba = new Mat();
    mGrayMat = new Mat();
    featureDetector=FeatureDetector.create(FeatureDetector.SIFT);
         descriptorExtractor=DescriptorExtractor.create(DescriptorExtractor.SURF);
    descriptorMatcher=DescriptorMatcher.create(6);
    keyPoints = new MatOfKeyPoint();
    descriptors = new Mat();
 }

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    final Mat rgba = inputFrame.rgba();

   Imgproc.cvtColor(rgba, rgba, Imgproc.COLOR_RGBA2GRAY);
   featureDetector.detect(rgba, keyPoints);
   Features2d.drawKeypoints(rgba, keyPoints, rgba);
   return rgba;
}

when I compile and run the app it runs for less than one second then crashes. However, for the exact sam code above when I replace SIFT or SURF with ORB, STAR the app works perfectly. How can I make sure that the SIFT/SURF are compiled correctly? Where can I find the code of them? what are your recommendations ?? (I'm using Android studio 1.1 NOT Eclipse).

thanks in advance.