Java API: added support for read/write functions in features2d
authorAndrey Kamaev <no@email>
Tue, 2 Aug 2011 10:58:26 +0000 (10:58 +0000)
committerAndrey Kamaev <no@email>
Tue, 2 Aug 2011 10:58:26 +0000 (10:58 +0000)
modules/java/android_test/src/org/opencv/test/OpenCVTestRunner.java
modules/java/android_test/src/org/opencv/test/features2d/features2dTest.java
modules/java/gen_javadoc.py
modules/java/src/cpp/features2d_manual.hpp
modules/java/src/java/Android.java
modules/java/src/java/core+CvException.java

index 9249ac3..16eea3c 100644 (file)
@@ -5,10 +5,7 @@ import android.test.AndroidTestRunner;
 import android.test.InstrumentationTestRunner;
 import android.util.Log;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import org.opencv.Android;
 
 /**
  * This only class is Android specific. The original idea about test order
@@ -22,6 +19,7 @@ public class OpenCVTestRunner extends InstrumentationTestRunner {
     public static String LENA_PATH;
     public static String CHESS_PATH;
     public static String LBPCASCADE_FRONTALFACE_PATH;
+    public static Context context;
 
     private AndroidTestRunner androidTestRunner;
     private static String TAG = "opencv_test_java";
@@ -32,9 +30,10 @@ public class OpenCVTestRunner extends InstrumentationTestRunner {
     
     @Override
     public void onStart() {
-        LENA_PATH = ExportResource(R.drawable.lena);
-        CHESS_PATH = ExportResource(R.drawable.chessboard);
-        LBPCASCADE_FRONTALFACE_PATH = ExportResource(R.raw.lbpcascade_frontalface);
+        context = getContext();
+        LENA_PATH = Android.ExportResource(context, R.drawable.lena);
+        CHESS_PATH = Android.ExportResource(context, R.drawable.chessboard);
+        LBPCASCADE_FRONTALFACE_PATH = Android.ExportResource(context, R.raw.lbpcascade_frontalface);
 
         // List<TestCase> testCases = androidTestRunner.getTestCases();
         // Collections.shuffle(testCases); //shuffle the tests order
@@ -47,32 +46,4 @@ public class OpenCVTestRunner extends InstrumentationTestRunner {
         androidTestRunner = super.getAndroidTestRunner();
         return androidTestRunner;
     }
-
-    private String ExportResource(int resourceId) {
-        String fullname = getContext().getResources().getString(resourceId);
-        String resName = fullname.substring(fullname.lastIndexOf("/") + 1);
-        try {
-            InputStream is = getContext().getResources().openRawResource(
-                    resourceId);
-            File resDir = getContext().getDir("testdata", Context.MODE_PRIVATE);
-            File resFile = new File(resDir, resName);
-
-            FileOutputStream os = new FileOutputStream(resFile);
-
-            byte[] buffer = new byte[4096];
-            int bytesRead;
-            while ((bytesRead = is.read(buffer)) != -1) {
-                os.write(buffer, 0, bytesRead);
-            }
-            is.close();
-            os.close();
-
-            return resFile.getAbsolutePath();
-        } catch (IOException e) {
-            e.printStackTrace();
-            Log("Failed to export resource " + resName + ". Exception thrown: "
-                    + e);
-        }
-        return null;
-    }
 }
index 414be42..96bc14f 100644 (file)
@@ -22,8 +22,14 @@ class JavadocGenerator(object):
         assert args_start * args_end > 0
         if args_start >= 0:
             assert args_start < args_end
-            return (line[:args_start].strip(), offset,  filter(None, list(arg.strip() for arg in line[args_start+1:args_end].split(","))))
-        return (line, offset, [])
+            name = line[:args_start].strip()
+            if name.startswith("java"):
+                name = name[4:]
+            return (name, offset,  filter(None, list(arg.strip() for arg in line[args_start+1:args_end].split(","))))
+        name = line.strip()
+        if name.startswith("java"):
+            name = name[4:]
+        return (name, offset, [])
 
     def document(self, infile, outfile):
         inf = open(infile, "rt")
index 47b7c4d..044a7aa 100644 (file)
@@ -12,19 +12,31 @@ public:
 #if 0\r
     CV_WRAP void detect( const Mat& image, vector<KeyPoint>& keypoints, const Mat& mask=Mat() ) const;\r
     CV_WRAP void detect( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints, const vector<Mat>& masks=vector<Mat>() ) const;\r
-    CV_WRAP virtual void read( const FileNode& );\r
-    CV_WRAP virtual void write( FileStorage& ) const;\r
     CV_WRAP virtual bool empty() const;\r
 #endif\r
 \r
-       //supported: FAST STAR SIFT SURF ORB MSER GFTT HARRIS Grid(XXXX) Pyramid(XXXX) Dynamic(XXXX)\r
-       //not supported: SimpleBlob, Dense\r
-       CV_WRAP_AS(create) static javaFeatureDetector* jcreate( const string& detectorType )\r
-       {\r
-           Ptr<FeatureDetector> detector = FeatureDetector::create(detectorType);\r
-               detector.addref();\r
-               return (javaFeatureDetector*)((FeatureDetector*) detector);\r
-       }\r
+    //supported: FAST STAR SIFT SURF ORB MSER GFTT HARRIS Grid(XXXX) Pyramid(XXXX) Dynamic(XXXX)\r
+    //not supported: SimpleBlob, Dense\r
+    CV_WRAP_AS(create) static javaFeatureDetector* jcreate( const string& detectorType )\r
+    {\r
+        Ptr<FeatureDetector> detector = FeatureDetector::create(detectorType);\r
+        detector.addref();\r
+        return (javaFeatureDetector*)((FeatureDetector*) detector);\r
+    }\r
+\r
+    CV_WRAP void write( const string& fileName ) const\r
+    {\r
+        FileStorage fs(fileName, FileStorage::WRITE);\r
+        ((FeatureDetector*)this)->write(fs);\r
+        fs.release();\r
+    }\r
+\r
+    CV_WRAP void read( const string& fileName )\r
+    {\r
+        FileStorage fs(fileName, FileStorage::READ);\r
+        ((FeatureDetector*)this)->read(fs.root());\r
+        fs.release();\r
+    }\r
 };\r
 \r
 class CV_EXPORTS_AS(DescriptorMatcher) javaDescriptorMatcher : public DescriptorMatcher\r
@@ -32,14 +44,14 @@ class CV_EXPORTS_AS(DescriptorMatcher) javaDescriptorMatcher : public Descriptor
 public:\r
 #if 0\r
     CV_WRAP virtual bool isMaskSupported() const;\r
-       CV_WRAP virtual void add( const vector<Mat>& descriptors );\r
-       CV_WRAP const vector<Mat>& getTrainDescriptors() const;\r
-       CV_WRAP virtual void clear();\r
-       CV_WRAP virtual bool empty() const;\r
-       CV_WRAP virtual void train();\r
-       CV_WRAP void match( const Mat& queryDescriptors, const Mat& trainDescriptors,\r
+    CV_WRAP virtual void add( const vector<Mat>& descriptors );\r
+    CV_WRAP const vector<Mat>& getTrainDescriptors() const;\r
+    CV_WRAP virtual void clear();\r
+    CV_WRAP virtual bool empty() const;\r
+    CV_WRAP virtual void train();\r
+    CV_WRAP void match( const Mat& queryDescriptors, const Mat& trainDescriptors,\r
                 vector<DMatch>& matches, const Mat& mask=Mat() ) const;\r
-       CV_WRAP void knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors,\r
+    CV_WRAP void knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors,\r
                    vector<vector<DMatch> >& matches, int k,\r
                    const Mat& mask=Mat(), bool compactResult=false ) const;\r
     CV_WRAP void radiusMatch( const Mat& queryDescriptors, const Mat& trainDescriptors,\r
@@ -51,25 +63,36 @@ public:
            const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\r
     CV_WRAP void radiusMatch( const Mat& queryDescriptors, vector<vector<DMatch> >& matches, float maxDistance,\r
                    const vector<Mat>& masks=vector<Mat>(), bool compactResult=false );\r
-    CV_WRAP virtual void read( const FileNode& );\r
-    // Writes matcher object to a file storage\r
-    CV_WRAP virtual void write( FileStorage& ) const;\r
 #endif\r
 \r
     CV_WRAP_AS(clone) javaDescriptorMatcher* jclone( bool emptyTrainData=false ) const\r
-       {\r
-           Ptr<DescriptorMatcher> matcher = this->clone(emptyTrainData);\r
-               matcher.addref();\r
-               return (javaDescriptorMatcher*)((DescriptorMatcher*) matcher);\r
-       }\r
-       \r
-       //supported: FlannBased, BruteForce, BruteForce-L1, BruteForce-Hamming, BruteForce-HammingLUT\r
-       CV_WRAP_AS(create) static javaDescriptorMatcher* jcreate( const string& descriptorMatcherType )\r
-       {\r
-           Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(descriptorMatcherType);\r
-               matcher.addref();\r
-               return (javaDescriptorMatcher*)((DescriptorMatcher*) matcher);\r
-       }\r
+    {\r
+        Ptr<DescriptorMatcher> matcher = this->clone(emptyTrainData);\r
+        matcher.addref();\r
+        return (javaDescriptorMatcher*)((DescriptorMatcher*) matcher);\r
+    }\r
+    \r
+    //supported: FlannBased, BruteForce, BruteForce-L1, BruteForce-Hamming, BruteForce-HammingLUT\r
+    CV_WRAP_AS(create) static javaDescriptorMatcher* jcreate( const string& descriptorMatcherType )\r
+    {\r
+        Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(descriptorMatcherType);\r
+        matcher.addref();\r
+        return (javaDescriptorMatcher*)((DescriptorMatcher*) matcher);\r
+    }\r
+\r
+    CV_WRAP void write( const string& fileName ) const\r
+    {\r
+        FileStorage fs(fileName, FileStorage::WRITE);\r
+        ((DescriptorMatcher*)this)->write(fs);\r
+        fs.release();\r
+    }\r
+\r
+    CV_WRAP void read( const string& fileName )\r
+    {\r
+        FileStorage fs(fileName, FileStorage::READ);\r
+        ((DescriptorMatcher*)this)->read(fs.root());\r
+        fs.release();\r
+    }\r
 };\r
 \r
 class CV_EXPORTS_AS(DescriptorExtractor) javaDescriptorExtractor : public DescriptorExtractor\r
@@ -78,8 +101,6 @@ public:
 #if 0\r
     CV_WRAP void compute( const Mat& image, vector<KeyPoint>& keypoints, Mat& descriptors ) const;\r
     CV_WRAP void compute( const vector<Mat>& images, vector<vector<KeyPoint> >& keypoints, vector<Mat>& descriptors ) const;\r
-    CV_WRAP virtual void read( const FileNode& );\r
-    CV_WRAP virtual void write( FileStorage& ) const;\r
     CV_WRAP virtual int descriptorSize() const = 0;\r
     CV_WRAP virtual int descriptorType() const = 0;\r
 \r
@@ -87,13 +108,27 @@ public:
 #endif\r
 \r
     //supported SIFT, SURF, ORB, BRIEF, Opponent(XXXX)\r
-       //not supported: Calonder\r
-       CV_WRAP_AS(create) static javaDescriptorExtractor* jcreate( const string& descriptorExtractorType )\r
-       {\r
-           Ptr<DescriptorExtractor> extractor = DescriptorExtractor::create(descriptorExtractorType);\r
-               extractor.addref();\r
-               return (javaDescriptorExtractor*)((DescriptorExtractor*) extractor);\r
-       }\r
+    //not supported: Calonder\r
+    CV_WRAP_AS(create) static javaDescriptorExtractor* jcreate( const string& descriptorExtractorType )\r
+    {\r
+        Ptr<DescriptorExtractor> extractor = DescriptorExtractor::create(descriptorExtractorType);\r
+        extractor.addref();\r
+        return (javaDescriptorExtractor*)((DescriptorExtractor*) extractor);\r
+    }\r
+\r
+    CV_WRAP void write( const string& fileName ) const\r
+    {\r
+        FileStorage fs(fileName, FileStorage::WRITE);\r
+        ((DescriptorExtractor*)this)->write(fs);\r
+        fs.release();\r
+    }\r
+\r
+    CV_WRAP void read( const string& fileName )\r
+    {\r
+        FileStorage fs(fileName, FileStorage::READ);\r
+        ((DescriptorExtractor*)this)->read(fs.root());\r
+        fs.release();\r
+    }\r
 };\r
 \r
 #if 0\r
@@ -122,9 +157,9 @@ CV_EXPORTS_W void drawMatches( const Mat& img1, const vector<KeyPoint>& keypoint
                              const vector<vector<DMatch> >& matches1to2, Mat& outImg,\r
                              const Scalar& matchColor=Scalar::all(-1), const Scalar& singlePointColor=Scalar::all(-1),\r
                              const vector<vector<char> >& matchesMask=vector<vector<char> >(), int flags=0);\r
-                                                        \r
+                             \r
 #endif\r
 \r
 } //cv\r
 \r
-#endif // __OPENCV_FEATURES_2D_MANUAL_HPP__
\ No newline at end of file
+#endif // __OPENCV_FEATURES_2D_MANUAL_HPP__\r
index 95e1fc6..46ffffc 100644 (file)
@@ -1,20 +1,62 @@
-package org.opencv;\r
-\r
-import org.opencv.core.Mat;\r
-import android.graphics.Bitmap;\r
-\r
-public class Android {\r
-\r
-       public static Mat BitmapToMat(Bitmap b) {\r
-               return new Mat( nBitmapToMat(b) );\r
-       }\r
-       \r
-       public static boolean MatToBitmap(Mat m, Bitmap b) {\r
-               return nMatToBitmap(m.nativeObj, b);    \r
-       }\r
-\r
-       // native stuff\r
-       static { System.loadLibrary("opencv_java"); }\r
-       private static native long nBitmapToMat(Bitmap b);\r
-       private static native boolean nMatToBitmap(long m, Bitmap b);\r
-}\r
+package org.opencv;
+
+import org.opencv.core.CvException;
+import org.opencv.core.Mat;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+
+public class Android {
+
+    public static String ExportResource(Context context, int resourceId) {
+        return ExportResource(context, resourceId, "OpenCV_data");
+    }
+
+    public static String ExportResource(Context context, int resourceId, String dirname) {
+        String fullname = context.getResources().getString(resourceId);
+        String resName = fullname.substring(fullname.lastIndexOf("/") + 1);
+        try {
+            InputStream is = context.getResources().openRawResource(resourceId);
+            File resDir = context.getDir(dirname, Context.MODE_PRIVATE);
+            File resFile = new File(resDir, resName);
+
+            FileOutputStream os = new FileOutputStream(resFile);
+
+            byte[] buffer = new byte[4096];
+            int bytesRead;
+            while ((bytesRead = is.read(buffer)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+            is.close();
+            os.close();
+
+            return resFile.getAbsolutePath();
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new CvException("Failed to export resource " + resName
+                    + ". Exception thrown: " + e);
+        }
+    }
+
+    public static Mat BitmapToMat(Bitmap b) {
+        return new Mat(nBitmapToMat(b));
+    }
+
+    public static boolean MatToBitmap(Mat m, Bitmap b) {
+        return nMatToBitmap(m.nativeObj, b);
+    }
+
+    // native stuff
+    static {
+        System.loadLibrary("opencv_java");
+    }
+
+    private static native long nBitmapToMat(Bitmap b);
+
+    private static native boolean nMatToBitmap(long m, Bitmap b);
+}
index 1ad0e3a..161523f 100644 (file)
@@ -1,6 +1,6 @@
 package org.opencv.core;\r
 \r
-public class CvException extends Exception {\r
+public class CvException extends RuntimeException {
 \r
        private static final long serialVersionUID = 1L;\r
 \r