diff --git a/modules/core/misc/java/src/java/core+DMatch.java b/modules/core/misc/java/src/java/core+DMatch.java index 12bd86ec01..db44d9a0a6 100644 --- a/modules/core/misc/java/src/java/core+DMatch.java +++ b/modules/core/misc/java/src/java/core+DMatch.java @@ -45,9 +45,6 @@ public class DMatch { distance = _distance; } - /** - * Less is better. - */ public boolean lessThan(DMatch it) { return distance < it.distance; } diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt index ed92e0511b..7994332930 100644 --- a/modules/java/CMakeLists.txt +++ b/modules/java/CMakeLists.txt @@ -345,7 +345,7 @@ else(ANDROID) list(APPEND step3_depends "${OpenCV_BINARY_DIR}/build.xml") add_custom_command(OUTPUT "${JAR_FILE}" "${JAR_FILE}.dephelper" - COMMAND ${ANT_EXECUTABLE} -q -noinput -k jar + COMMAND ${ANT_EXECUTABLE} -q -noinput -k jar javadoc COMMAND ${CMAKE_COMMAND} -E touch "${JAR_FILE}.dephelper" WORKING_DIRECTORY "${OpenCV_BINARY_DIR}" DEPENDS ${step3_depends} diff --git a/modules/java/build.xml.in b/modules/java/build.xml.in index c1c1854b7d..954ff6273c 100644 --- a/modules/java/build.xml.in +++ b/modules/java/build.xml.in @@ -2,6 +2,7 @@ + @@ -10,7 +11,21 @@ - + + + + + + + + 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()); + } + +}