Open nickgaray opened 2 years ago
The versions of JavaCPP and JavaCV need to match. Specifically, 1.5.x isn't compatible with 1.4.x.
Forgive the ignorance, what should the version be for compatibility amongst these three:
embeddedImpl group: 'org.bytedeco', name: 'javacv-platform', version: '1.5.7'
embeddedImpl 'org.bytedeco:javacpp-presets:1.5.7'
embeddedImpl group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '4.0.1-1.4.4'
The process I am writing is attempting to take advantage of CUDA to perform feature detection in a scene
For 1.5.7, a sample list of dependencies is available here: https://github.com/bytedeco/javacpp-presets/tree/1.5.7/opencv#the-pomxml-build-file
I changed my dependencies to:
embeddedImpl group: 'org.bytedeco', name: 'opencv-platform', version: '4.5.5-1.5.7'
embeddedImpl group: 'org.bytedeco', name: 'opencv-platform-gpu', version: '4.5.5-1.5.7'
embeddedImpl group: 'org.bytedeco', name: 'cuda-platform-redist', version: '11.6-8.3-1.5.7'
How do I limit the jars pulled in, classifiers for 'linux-arm64' are not valid? So, my dist.zip is greater than 4GB
Ok, I was able to limit some dependencies, I am adding this information in hopes it may also help others.
Dependencies for project are now:
dependencies {
implementation 'org.sensorhub:sensorhub-core:' + oshCoreVersion
implementation project(':sensorhub-driver-videocam')
embeddedImpl 'org.jcodec:jcodec-javase:0.1.9'
// embeddedImpl group: 'org.bytedeco', name: 'opencv-platform', version: '4.5.5-1.5.7'
// embeddedImpl group: 'org.bytedeco', name: 'cuda-platform-redist', version: '11.6-8.3-1.5.7'
embeddedImpl group: 'org.bytedeco', name: 'opencv-platform-gpu', version: '4.5.5-1.5.7'
embeddedImpl group: 'org.bytedeco', name: 'opencv', classifier:'linux-arm64', version: '4.5.5-1.5.7'
embeddedImpl group: 'org.bytedeco', name: 'cuda', classifier:'linux-arm64', version: '11.6-8.3-1.5.7'
embeddedImpl group: 'org.bytedeco', name: 'javacpp', classifier:'linux-arm64', version: '1.5.7'
testImplementation('junit:junit:4.13')
}
I am now getting a different error at runtime, but oddly not at compile time (oddly because the type is resolving at compile):
java.lang.UnsatisfiedLinkError: 'org.bytedeco.opencv.opencv_cudaobjdetect.CudaCascadeClassifier org.bytedeco.opencv.opencv_cudaobjdetect.CudaCascadeClassifier.create(java.lang.String)'
Full error below:
2022-09-01 18:54:04.759 ERROR ModuleRegistry [ModuleRegistry-6] - Cannot start module 'New SensorML Stream Process' [c03c644a-7bcf-44c1-a8c1-834a9b12908a]
org.sensorhub.api.common.SensorHubException: Module must first be initialized
at NativeClassLoader//org.sensorhub.impl.module.AbstractModule.canStart(AbstractModule.java:473)
at NativeClassLoader//org.sensorhub.impl.module.AbstractModule.start(AbstractModule.java:486)
at NativeClassLoader//org.sensorhub.impl.module.ModuleRegistry.lambda$startModuleAsync$1(ModuleRegistry.java:663)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
2022-09-01 18:54:07.071 ERROR SMLProcessImpl:d3b84935 [ForkJoinPool.commonPool-worker-3] - Error initializing SML process
java.util.concurrent.CompletionException: java.lang.UnsatisfiedLinkError: 'org.bytedeco.opencv.opencv_cudaobjdetect.CudaCascadeClassifier org.bytedeco.opencv.opencv_cudaobjdetect.CudaCascadeClassifier.create(java.lang.String)'
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1739)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1728)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.lang.UnsatisfiedLinkError: 'org.bytedeco.opencv.opencv_cudaobjdetect.CudaCascadeClassifier org.bytedeco.opencv.opencv_cudaobjdetect.CudaCascadeClassifier.create(java.lang.String)'
at NativeClassLoader//org.bytedeco.opencv.opencv_cudaobjdetect.CudaCascadeClassifier.create(Native Method)
at NativeClassLoader//com.botts.process.image.FeatureDetectionProcess.loadClassifiers(FeatureDetectionProcess.java:195)
at NativeClassLoader//com.botts.process.image.FeatureDetectionProcess.init(FeatureDetectionProcess.java:124)
at NativeClassLoader//org.vast.process.ExecutableChainImpl.init(ExecutableChainImpl.java:263)
at NativeClassLoader//org.vast.sensorML.AbstractProcessImpl.init(AbstractProcessImpl.java:223)
at NativeClassLoader//org.sensorhub.impl.processing.SMLProcessImpl.initChain(SMLProcessImpl.java:125)
at NativeClassLoader//org.sensorhub.impl.processing.SMLProcessImpl.lambda$doInit$0(SMLProcessImpl.java:107)
at NativeClassLoader//org.sensorhub.utils.Lambdas.lambda$checked$0(Lambdas.java:66)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
... 6 common frames omitted
2022-09-01 18:54:07.073 ERROR ModuleRegistry [ForkJoinPool.commonPool-worker-3] - Error in module 'New SensorML Stream Process' [c03c644a-7bcf-44c1-a8c1-834a9b12908a]
How do I limit the jars pulled in, classifiers for 'linux-arm64' are not valid? So, my dist.zip is greater than 4GB
Please refer to https://github.com/bytedeco/javacpp-presets/wiki/Reducing-the-Number-of-Dependencies
I am now getting a different error at runtime, but oddly not at compile time (oddly because the type is resolving at compile):
If you're trying to use this on linux-arm64, that's not currently available, but contributions are welcome!
I am trying to build and deploy on an Nvidia Jetson TX2 dev kit. I have used these libraries before on Windows and Linux and was hoping for a quick win on this device. Sadly, it seems that may not be the case. If time permits, I will look at contributing a solution.
Thank you for your help!
It should be possible to build from source easily though: https://github.com/bytedeco/javacpp-presets#build-instructions If you have any problems specific to the Jetson SDK, @kwatters should be able to help.
I am building a process for OpenSensorHub on Jetson TX2 using Gradle and I am getting an error when initializing the process:
UnsatisfiedLinkError: no jniopencv_core
My build.gradle dependencies are setup as follows:
I have also tried, with the same effect, no jniopencv_core
The packaging of dependencies is working correctly, however I cannot seem to get the
jniopencv_core
issue resolved. I read that it was necessary to include the org.bytedeco:javacpp-presets as I did above. As an aside, is there currently no classifier for this package to only select the jars for a particular architecture?The full error log is given:
What am I missing?
Thank you!