December 09, 2019

How to compile OpenCV on CentOS with Java support

OpenCV is an open source computer vision and machine learning software library. It is free for commercial and research use under a BSD license. OpenCV was built to provide a common infrastructure for computer vision applications and it focuses mainly on real-time image processing. The library is cross-platform, and runs on Mac OS X, Windows and Linux.  It is written natively in C++ and it has C, Python, Java and MATLAB interfaces. In this post I show how to build OpenCV source for Java support on CentOS 6.5.

APPLICATION STACK

– SO CentOS 6.5 x86_64 Minimal
– OpenCV source 2.4.9
– JDK 1.7.0_60
– ANT 1.7.1
– FFMPEG git-2014-07-09

### Required packages
$ yum install -y gcc gcc-c++ gtk+-devel libjpeg-devel libtiff-devel jasper-devel libpng-devel zlib-devel cmake
$ yum install eigen3-devel
$ yum install git gtk2-devel pkgconfig numpy python python-pip python-devel gstreamer-plugins-base-devel libv4l ffmpeg-devel mplayer mencoder flvtool2
$ yum install cmake28
$ yum install ant
$ pip install numpy
### Setup JDK from Oracle
$ wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/7u60-b19/jdk-7u60-linux-x64.tar.gz

### Untar jdk in root directory
$ tar -zxf jdk*.tar.gz
### Setup FFMPEG from source
$ yum install autoconf automake gcc gcc-c++ git libtool make nasm pkgconfig zlib-devel
mkdir ~/ffmpeg_sources

$ cd ~/ffmpeg_sources
$ curl -O http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz

$ tar xzvf yasm-1.2.0.tar.gz
$ cd yasm-1.2.0
$ ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
$ make
$ make install
$ make distclean
$ export "PATH=$PATH:$HOME/bin"

$ cd ~/ffmpeg_sources
$ git clone --depth 1 git://source.ffmpeg.org/ffmpeg
$ cd ffmpeg
$ PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
$ export PKG_CONFIG_PATH
$ ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs=-ldl
$ make
$ make install
$ make distclean
$ hash -r
$ . ~/.bash_profile

$ ./ffmpeg -version
ffmpeg version git-2014-07-09-d6e7881 Copyright (c) 2000-2014 the FFmpeg developers
built on Jul  9 2014 13:10:23 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
configuration: --prefix=/root/ffmpeg_build --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --extra-libs=-ldl
libavutil      52. 91.100 / 52. 91.100
libavcodec     55. 68.102 / 55. 68.102
libavformat    55. 45.100 / 55. 45.100
libavdevice    55. 13.102 / 55. 13.102
libavfilter     4. 10.100 /  4. 10.100
libswscale      2.  6.100 /  2.  6.100
libswresample   0. 19.100 /  0. 19.100
### Compiling OpenCV
$ wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip?r=http%3A%2F%2Fopencv.org%2Fdownloads.html&ts=1406043986&use_mirror=skylink
$ unzip opencv-2.4.9.zip
$ cd opencv-2.4.9

$ export JAVA_HOME=/root/jdk1.7.0_07

$ mkdir build
$ cd build

### !!! PAY ATTENTION TO THIS: I use cmake28 instead of cmake
$ cmake28 -DBUILD_SHARED_LIBS=OFF ../

giuseppe-urso-how-to-compile-opencv-on-CentOS-for-Java-support

### Here is some other important output messages
Found PythonInterp: /usr/bin/python2 (found suitable version "2.6.6", minimum required is "2.0") 
-- Update variable PYTHON_LIBRARY from environment: /usr/lib64/libpython2.6.so.1.0
-- Found PythonLibs: /usr/lib64/libpython2.6.so.1.0 (found suitable exact version "2.6.6") 
-- Found apache ant 1.7.1: /usr/bin/ant
-- Found JNI: /root/jdk1.7.0_60/jre/lib/amd64/libjawt.so  
-- Performing Test HAVE_CXX_WNO_DEPRECATED_DECLARATIONS
-- Performing Test HAVE_CXX_WNO_DEPRECATED_DECLARATIONS - Success

[...]

-- Java:
--     ant:                         /usr/bin/ant (ver 1.7.1)
--     JNI:                         /root/jdk1.7.0_60/include /root/jdk1.7.0_60/include/linux /root/jdk1.7.0_60/include
--     Java tests:                  NO

 

### Start the OpenCV build
$ make
### When OpenCV is succesfully built you can see
### the jar interface and the native dynamic library
### containing Java bindings and all the OpenCV stuff 
$ ls -l build/lib
cv2.so
libopencv_java249.so

$ ls -l build/bin
opencv-249.jar

 

Related posts

1 Comment

Leave a Reply to Giuseppe Urso Cancel Reply

Your email address will not be published.