From 8b455e8bb3453e62517ee2d9fb49cb41de66e92b Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Wed, 5 Apr 2017 14:10:03 +0300 Subject: [PATCH] Fixed Algorithm.save and other methods work in Java --- modules/java/generator/gen_java.py | 4 +-- modules/ml/misc/java/test/MLTest.java | 42 +++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 modules/ml/misc/java/test/MLTest.java diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index e63df430bd..c18b9d5f18 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -1005,7 +1005,7 @@ class JavaWrapperGenerator(object): type_dict["Ptr_"+name] = \ { "j_type" : classinfo.jname, "jn_type" : "long", "jn_args" : (("__int64", ".nativeObj"),), - "jni_name" : "Ptr<"+classinfo.fullName(isCPP=True)+">(("+classinfo.fullName(isCPP=True)+"*)%(n)s_nativeObj)", "jni_type" : "jlong", + "jni_name" : "*((Ptr<"+classinfo.fullName(isCPP=True)+">*)%(n)s_nativeObj)", "jni_type" : "jlong", "suffix" : "J" } logging.info('ok: class %s, name: %s, base: %s', classinfo, name, classinfo.base) @@ -1575,7 +1575,7 @@ JNIEXPORT void JNICALL Java_org_opencv_%(module)s_%(j_cls)s_delete # if parents are smart (we hope) then children are! # if not we believe the class is smart if it has "create" method ci.smart = False - if ci.base: + if ci.base or ci.name == 'Algorithm': ci.smart = True else: for fi in ci.methods: diff --git a/modules/ml/misc/java/test/MLTest.java b/modules/ml/misc/java/test/MLTest.java new file mode 100644 index 0000000000..2b08543a84 --- /dev/null +++ b/modules/ml/misc/java/test/MLTest.java @@ -0,0 +1,42 @@ +package org.opencv.test.ml; + +import org.opencv.ml.Ml; +import org.opencv.ml.SVM; +import org.opencv.core.Mat; +import org.opencv.core.MatOfFloat; +import org.opencv.core.MatOfInt; +import org.opencv.core.CvType; +import org.opencv.test.OpenCVTestCase; +import org.opencv.test.OpenCVTestRunner; + +public class MLTest extends OpenCVTestCase { + + public void testSaveLoad() { + Mat samples = new MatOfFloat(new float[] { + 5.1f, 3.5f, 1.4f, 0.2f, + 4.9f, 3.0f, 1.4f, 0.2f, + 4.7f, 3.2f, 1.3f, 0.2f, + 4.6f, 3.1f, 1.5f, 0.2f, + 5.0f, 3.6f, 1.4f, 0.2f, + 7.0f, 3.2f, 4.7f, 1.4f, + 6.4f, 3.2f, 4.5f, 1.5f, + 6.9f, 3.1f, 4.9f, 1.5f, + 5.5f, 2.3f, 4.0f, 1.3f, + 6.5f, 2.8f, 4.6f, 1.5f + }).reshape(1, 10); + Mat responses = new MatOfInt(new int[] { + 0, 0, 0, 0, 0, 1, 1, 1, 1, 1 + }).reshape(1, 10); + SVM saved = SVM.create(); + assertFalse(saved.isTrained()); + + saved.train(samples, Ml.ROW_SAMPLE, responses); + assertTrue(saved.isTrained()); + + String filename = OpenCVTestRunner.getTempFileName("yml"); + saved.save(filename); + SVM loaded = SVM.load(filename); + assertTrue(saved.isTrained()); + } + +}