Recently I'm trying OpenCV out for my graduation project. I've had some success under Windows enviroment. And because with Windows package of OpenCV it comes with pre-built libraries, so I don't have to worry about how to build them. But since the project is suppose to run on a cluster with CentOS as host OS for each node, I have to know how to correctly compile, and run these library under Linux enviroment.
I've set up a VM with VirtualBox and installed Ubuntu 13.04 on it. But so far I still can't find a way to adjust the settings of CMakeList to make Java a build target. (A jar, and a native library so I can import and use them in MapReduce program) Following is the official tutorial of desktop Java for OpenCV
http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html
The part about the compiling is pretty brief. So I still can't quite understand it. Is it because I missed some dependency for Java? I've already got JVM(Jre-7u7) installed. Or is it because I didn't configure CMakeList.txt correctly?
Here is the things I've done so far, other than that it's a complete clean Ubuntu
The target enviroment is Cluster with CentOS as host OS for each node, and the project is a MapReduce program.
Thanks in advance.
4, OpenCV supports desktop Java development using nearly the same interface as for Android development. This guide will help you to create your first Java (or Scala) application using OpenCV.
Set up OpenCV for Java in EclipseFrom the menu navigate under Java > Build Path > User Libraries and choose New... . Enter a name for the library (e.g., opencv) and select the newly created user library. Choose Add External JARs... , browse to select opencv-3xx. jar from your computer.
Probably what you're missing is ant
, which is a java oriented build tool.
When you go:
cmake -D BUILD_SHARED_LIBS=OFF ../opencv-2.4.5/
(i.e. where you're configuring the make for your machine), check for the section that says java. It should say something like this (possibly with different paths/versions):
-- Java:
-- ant: /usr/bin/ant (ver 1.8.2)
-- JNI: /usr/lib/jvm/java-6-openjdk/include /usr/lib/jvm/java-6-openjdk/include /usr/lib/jvm/java-6-openjdk/include
-- Java tests: YES
When I first ran cmake, I had this:
-- Java:
-- ant: NO
-- JNI: NO
-- Java tests: YES
Which indicated it couldn't find ant
, and so it didn't create a .jar file.
I simply use the version that's in the repository:
sudo apt-get install ant
I ran cmake again, with the above options, which got the path to ant (and I got JNI for free!).
Note: You probably want to read the output of cmake fairly carefully as it tells you what it's going to build on your machine, and you may have some missing libraries.
If you find JNI is still missing.
cmake is (mostly? first? conveniently? can be interpreted as?) looking for jni.h, which should be specifically $JAVA_HOME/include/jni.h
So you need to set $JAVA_HOME to the home folder of your jdk.
I used which javac
and then ls -l
to follow a series of symbolic links, to identify where my java 1.7 install was. You could also use locate jni.h
and work up the tree, or simply look around /usr/lib/jvm
or similar.
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
You probably want to check that you've got that right with a couple of
ls $JAVA_HOME/bin/javac
/usr/lib/jvm/java-7-openjdk-amd64/bin/javac
ls $JAVA_HOME/include/jni.h
/usr/lib/jvm/java-7-openjdk-amd64/include/jni.h
Interestingly when I ran the cmake command again, it picked up a different JNI folder:
-- JNI: /usr/lib/jvm/java-7-openjdk-amd64/include /usr/lib/jvm/java-7-openjdk-amd64/include /usr/lib/jvm/java-7-openjdk-amd64/include
Once you've got that, run the make
command. If you watch obsessively, you'll see a bunch of .java files trundle past. Either way you'll end up with a .jar file in the ./bin folder.
(in my case it's called opencv-245.jar
as that's the version of the code I downloaded).
For someone directed here from google :
If your JRE crashes after you run the java tutorials then most probably you have the python Bindings installed as well (cv2.so) . You will have to re-make OpenCV without those bindings
cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO
That solved the problem for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With