Part 1: Installing OpenCV 3.1.0 on Raspberry Pi Debian Jessy with Java Library

  • Posted on: 26 April 2016
  • By: robin
terminal  Installing OpenCV

The Raspberry Pi has become a Icon. I have nearly 10 Raspberry Pis and i love every single one of them. ;-) In December 2015 I started my Smart Mirror (Magic Mirror) Project and now its finally ready. Or better said the Hardware or the Smart Mirror is finally ready. What is now missing is a mind blowing Software. While searching for features a friend of my, Hendrik,  came up with a mind blowing idea. A absolute key feature for a Smart Mirror - Face recognition. (At this points dear Magic-Mirrors-Startups: In case you want to copy this idea now, act fairly enough and publish were you got this idea from). 

However, since it is not so easy, here it comes: How to install OpenCV 3.1.0 on a Raspberry Pi with Java Support.

If you have a fresh Debian Jessy Image on the PI (I use the March 2016 image) it should work perfectly when you follow the steps.

 

Step 1 - Required Packages:

 

So the first thing you want to do is installing all the necessary packages.

Most important:
sudo apt-get update && sudo apt-get install oracle-java7-jdk cmake ant
 
But also:
sudo apt-get install build-essential cmake pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools  libtiff4 libtiffxx0c2 libtiff-tools libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs libavcodec-dev   libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev  libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev
 
Eazy !
 

Step 2 - Set Environment Variables:

 
It's such an annoying topic: Setting the JAVA_HOME Variable ! In our case we also need the ANT_HOME.
Here I want to teach you how you can find out by yourself - If you not interested jump to the .bashrc editing.
 
Quick Lesson:
So we have java and ant installed but the have no PATH set and we don't know which path we need to take.
The command "which" tells you the total path of a application. If we enter "which ant" we get "/usr/bin/ant". BUT this is not where ant is actually located. To find out we need "ls". "ls -l /usr/bin/ant" tells us more: "/usr/bin/ant -> ../share/ant/bin/ant". Jackpot - That the path we where locking for. The same for Java. "which java" leads us to "/usr/bin/java". And "ls -l /usr/bin/java" is pointing to "/etc/alternatives/java". Which is not what we are looking for because it is another link. So "ls -l /etc/alternatives/java" returns: "/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/bin/java". BINGO.
 
Now we need to edit the .bashrc file, set JAVA_HOME and ANT_HOME and also add it to the PATH variable. For this i use the nano editor.
"nano ~/.bashrc" (CTRL + V till you reach the very bottom of the file)
and than simply add this four lines:
export ANT_HOME=/usr/share/ant/
export PATH=${PATH}:${ANT_HOME}/bin
export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/
export PATH=$PATH:$JAVA_HOME/bin
 
Notice that the path is pointing to the JDK folder and not to the java application.
 
50% done. But first do a reboot. I mean you should really do it !
"sudo reboot
 

Step 3 - Downloading OpenCV 3.1.0:

I hope (for you) that this link is still alive when you do this tutorial:
 
wget https://codeload.github.com/Itseez/opencv/zip/3.1.0
mv 3.1.0 opencv.zip
unzip opencv.zip 
cd opencv-3.1.0/
 
You are now in extracted folder of opencv-3.1.0.
 

Step 4 - Compiling:

 
We want to use cmake to create a nice Makefile and build OpenCV from source code WITH the Java Library.
First create a build folder "mkdir build" and navigate into it "cd build"
 
Now simply take my cmake call and adjust Pathes if necessary.
 
cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_OPENCL=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_SHARED_LIBS=OFF -D JAVA_INCLUDE_PATH=$JAVA_HOME/include -D JAVA_AWT_LIBRARY=$JAVA_HOME/jre/lib/amd64/libawt.so -D JAVA_JVM_LIBRARY=$JAVA_HOME/jre/lib/arm/server/libjvm.so -D CMAKE_INSTALL_PREFIX=/usr/local ..
 
Important are the flags "-D BUILD_SHARED_LIBS=OFF " and "-D BUILD_PERF_TESTS=OFF".
Hope this works.
 
Now - YES you could run the compilation process in paralled with this -j # flag. - However I had problems with this when compiling opencv and I would recommend to not use it. Even it will take like 2-3 h. :-/
 
"make"
If this HOPEFULLY ends successful you can install it with "make install".
 
To verify if the Java Library was generated check the folder "build/libs". There should be a file called "libopencv_java310.so" and a "opencv-310.jar" in the folder "build/bin".
 
 
Congratulations! You did it. 
If you have problems: register - wait 24h till I accept your request and write a comment.
 
 
 
 
 
 
 
topic: 
raspberry pi, opencv, open cv, magic mirror, smart mirror, pi, raspberry, face recognition, java, how to, tutorial
Field: 

Comments

Thanks for this awesome tutorial. I believe I now have OpenCV installed. I've never gotten closer to using it. Thanks very much for this. However when I try to run a simple opencv program I run into trouble with the statement:    System.loadLibrary(Core.NATIVE_LIBRARY_NAME);I get a message that says:     no opencv java 310 in java.library.pathThe import statements seem to run fine. Is there anything else I need to do still before I can use opencv? Thanks, Mat  

Try to set the path to the library by using System.setProperty(“java.library.path”, “/path/to/opencv”);

Unfortunately no luck. Thanks for the suggestion. After trying this, I've run into an issue that requires me to re-install rapbian. Will try again after!

I had the same issue, and this fixed it.However on running the program, it gives me an "UnsatisfiedLinkError" on the line where I declare a Mat    Mat frame = new Mat();Error thrown is "java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_mat()J"Thank you so much for your help. This tutorial has been instrumental for me in getting openCV running on the Raspberry Pi

Thank you very much for this awesome tutorial. But I'm a newbie for RaspberryPI and Linux. Therefore I'm not really sure, how I have to start a java program with OpenCV included. I tried svereal different commandlines, but always get this error: https://www.dropbox.com/s/hxogbm1etxvh00z/2017-06-02-190019_800x480_scro... Do you have an idea, how i should start the project? Best wishes