No implementation found for native Lcom .n_Mat
Hello,
I'm using OpenCV through Cordova for, given some metrics about exercise, predict wich type of exercise you are doing. I've a XML file with trainning information but I'm having problems importing my exercise params.
This is what I'm doing (I've manually put line numbers in brackets after changing the code with @berak comments)
[33]CvSVM cvsm = new CvSVM(); //Create machine
[34]Scalar scalar = new Scalar(metricas); //metricas is my array with parameters from physical exercise
[35]Mat mat = new Mat(1, 15, 6, scalar); //this is where it crashes, when I try to load my results from physical activity to preassign this values to the matrix "mat"**
[36]cvsm.load("modeloSVMSinHR.xml", "modeloSinHR"); //load XML with "trained params"
[37]float resultado = cvsm.predict(mat, false); //predict wich type of activity you're doing
With these changes in the code I'm getting this error
I changed the order of methods and it certainly changed this behaviour. Now I'm getting this error:
03-23 08:13:55.220: W/dalvikvm(2581): No implementation found for native Lcom/opencv/avr/CvSVM;.CvSVM_0 ()J
03-23 08:13:55.220: W/System.err(2581): java.lang.UnsatisfiedLinkError: CvSVM_0
03-23 08:13:55.220: W/System.err(2581): at com.opencv.avr.CvSVM.CvSVM_0(Native Method)
03-23 08:13:55.220: W/System.err(2581): at com.opencv.avr.CvSVM.<init>(CvSVM.java:63)
03-23 08:13:55.220: W/System.err(2581): at com.opencv.avr.OpenCV.execute(OpenCV.java:33)
03-23 08:13:55.220: W/System.err(2581): at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:65)
03-23 08:13:55.220: W/System.err(2581): at org.apache.cordova.PluginManager.execHelper(PluginManager.java:242)
03-23 08:13:55.220: W/System.err(2581): at org.apache.cordova.PluginManager.exec(PluginManager.java:227)
03-23 08:13:55.220: W/System.err(2581): at org.apache.cordova.ExposedJsApi.exec(ExposedJsApi.java:53)
03-23 08:13:55.220: W/System.err(2581): at org.apache.cordova.CordovaChromeClient.onJsPrompt(CordovaChromeClient.java:227)
03-23 08:13:55.220: W/System.err(2581): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:653)
03-23 08:13:55.220: W/System.err(2581): at android.os.Handler.dispatchMessage(Handler.java:99)
03-23 08:13:55.220: W/System.err(2581): at android.os.Looper.loop(Looper.java:137)
03-23 08:13:55.220: W/System.err(2581): at android.app.ActivityThread.main(ActivityThread.java:4517)
03-23 08:13:55.230: W/System.err(2581): at java.lang.reflect.Method.invokeNative(Native Method)
03-23 08:13:55.230: W/System.err(2581): at java.lang.reflect.Method.invoke(Method.java:511)
03-23 08:13:55.230: W/System.err(2581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:985)
03-23 08:13:55.230: W/System.err(2581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:752)
03-23 08:13:55.230: W/System.err(2581): at dalvik.system.NativeStart.main(Native ...
Sry if my comment is totally off-topic since I don't know what cordova is, but this:
**Mat mat = new Mat(1, 15, 6, scalar)
looks strange to me, if it would be c++ thanMat *mat = new Mat(...)
would be correct or justMat mat(...)
since it doesn't need to be on the heap. In java it would probably beMat mat = new Mat(...)
Also the initialization with scalar, I doubt that this will work this way."java.lang.UnsatisfiedLinkError: n_Mat" - this happens, when you execute opencv code, before the opencv native so's are loaded.
also,
com.opencv.avr.Mat
does not look like opencv's java api. what kind of wrappers are you using there ?@Guanta You are right, the " ** " where only to remark what I was saying. @berak I'll try to put the "CvSVM cvsm = new CvSVM(); //Create machine" before this Mat method... We'll see! the com.opencv.avr.mat is a modification I've made. Because OpenCV brings a lot of methods for image treatment, I don't need them all so I've only brought the ones I need and put them in a package
I've read a little bit more and this kind of error is very common in people who’s trying to import their native “C” code to an Android project. As my code is written in Java, I don’t really know why I’m getting this error..
again, it does not find the native (c++) implementation of anything from opencv. usually, on android you call the opencvmanager class to load the libs on startup, or do a System.loadLibrary(in the static linking case)
now, the fact, that you're trying to use cordova, and even tried to hack opencv's modules/interfaces, does not make it easier ;(