You surely know that OpenCV has now first class java support since version 2.4.4. What you may not know is that literally since yesterday it is quite easy to install it on MacOsX, given that you use MacPorts.
box:lad$ sudo port selfupdate
Password:
---> Updating MacPorts base sources using rsync
MacPorts base version 2.1.3 installed,
MacPorts base version 2.1.3 downloaded.
---> Updating the ports tree
---> MacPorts base is already the latest version
The ports tree has been updated. To upgrade your installed ports, you should run
port upgrade outdated
box:lad$ sudo port install opencv +java
---> Computing dependencies for opencv
---> Dependencies to be installed: apache-ant cmake pkgconfig
---> Fetching archive for apache-ant
---> Attempting to fetch apache-ant-1.9.0_0.darwin_12.noarch.tbz2 from http://lil.fr.packages.macports.org/apache-ant
---> Attempting to fetch apache-ant-1.9.0_0.darwin_12.noarch.tbz2.rmd160 from http://lil.fr.packages.macports.org/apache-ant
---> Installing apache-ant @1.9.0_0
---> Activating apache-ant @1.9.0_0
---> Cleaning apache-ant
---> Fetching archive for cmake
---> Attempting to fetch cmake-2.8.10_1.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/cmake
---> Attempting to fetch cmake-2.8.10_1.darwin_12.x86_64.tbz2.rmd160 from http://lil.fr.packages.macports.org/cmake
---> Installing cmake @2.8.10_1
---> Activating cmake @2.8.10_1
---> Cleaning cmake
---> Fetching archive for pkgconfig
---> Attempting to fetch pkgconfig-0.27.1_2.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/pkgconfig
---> Attempting to fetch pkgconfig-0.27.1_2.darwin_12.x86_64.tbz2.rmd160 from http://lil.fr.packages.macports.org/pkgconfig
---> Installing pkgconfig @0.27.1_2
---> Activating pkgconfig @0.27.1_2
---> Cleaning pkgconfig
---> Fetching archive for opencv
---> Attempting to fetch opencv-2.4.4_3+java.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/opencv
---> Attempting to fetch opencv-2.4.4_3+java.darwin_12.x86_64.tbz2 from http://mse.uk.packages.macports.org/sites/packages.macports.org/opencv
---> Attempting to fetch opencv-2.4.4_3+java.darwin_12.x86_64.tbz2 from http://packages.macports.org/opencv
---> Fetching distfiles for opencv
---> Attempting to fetch OpenCV-2.4.4a.tar.bz2 from http://ignum.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.4
---> Verifying checksum(s) for opencv
---> Extracting opencv
---> Applying patches to opencv
---> Configuring opencv
---> Building opencv
---> Staging opencv into destroot
---> Installing opencv @2.4.4_3+java
---> Deactivating opencv @2.4.4_2
---> Cleaning opencv
---> Activating opencv @2.4.4_3+java
---> Cleaning opencv
---> Updating database of binaries: 100.0%
---> Scanning binaries for linking errors: 100.0%
---> No broken files found.
box:lad$ port contents opencv | grep java
/opt/local/share/OpenCV/java/libopencv_java244.dylib
/opt/local/share/OpenCV/java/opencv-244.jar
box:lad$
Some Scala code to use it:
Factory Floor |
box:lad$ sudo port selfupdate
Password:
---> Updating MacPorts base sources using rsync
MacPorts base version 2.1.3 installed,
MacPorts base version 2.1.3 downloaded.
---> Updating the ports tree
---> MacPorts base is already the latest version
The ports tree has been updated. To upgrade your installed ports, you should run
port upgrade outdated
box:lad$ sudo port install opencv +java
---> Computing dependencies for opencv
---> Dependencies to be installed: apache-ant cmake pkgconfig
---> Fetching archive for apache-ant
---> Attempting to fetch apache-ant-1.9.0_0.darwin_12.noarch.tbz2 from http://lil.fr.packages.macports.org/apache-ant
---> Attempting to fetch apache-ant-1.9.0_0.darwin_12.noarch.tbz2.rmd160 from http://lil.fr.packages.macports.org/apache-ant
---> Installing apache-ant @1.9.0_0
---> Activating apache-ant @1.9.0_0
---> Cleaning apache-ant
---> Fetching archive for cmake
---> Attempting to fetch cmake-2.8.10_1.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/cmake
---> Attempting to fetch cmake-2.8.10_1.darwin_12.x86_64.tbz2.rmd160 from http://lil.fr.packages.macports.org/cmake
---> Installing cmake @2.8.10_1
---> Activating cmake @2.8.10_1
---> Cleaning cmake
---> Fetching archive for pkgconfig
---> Attempting to fetch pkgconfig-0.27.1_2.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/pkgconfig
---> Attempting to fetch pkgconfig-0.27.1_2.darwin_12.x86_64.tbz2.rmd160 from http://lil.fr.packages.macports.org/pkgconfig
---> Installing pkgconfig @0.27.1_2
---> Activating pkgconfig @0.27.1_2
---> Cleaning pkgconfig
---> Fetching archive for opencv
---> Attempting to fetch opencv-2.4.4_3+java.darwin_12.x86_64.tbz2 from http://lil.fr.packages.macports.org/opencv
---> Attempting to fetch opencv-2.4.4_3+java.darwin_12.x86_64.tbz2 from http://mse.uk.packages.macports.org/sites/packages.macports.org/opencv
---> Attempting to fetch opencv-2.4.4_3+java.darwin_12.x86_64.tbz2 from http://packages.macports.org/opencv
---> Fetching distfiles for opencv
---> Attempting to fetch OpenCV-2.4.4a.tar.bz2 from http://ignum.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.4
---> Verifying checksum(s) for opencv
---> Extracting opencv
---> Applying patches to opencv
---> Configuring opencv
---> Building opencv
---> Staging opencv into destroot
---> Installing opencv @2.4.4_3+java
---> Deactivating opencv @2.4.4_2
---> Cleaning opencv
---> Activating opencv @2.4.4_3+java
---> Cleaning opencv
---> Updating database of binaries: 100.0%
---> Scanning binaries for linking errors: 100.0%
---> No broken files found.
box:lad$ port contents opencv | grep java
/opt/local/share/OpenCV/java/libopencv_java244.dylib
/opt/local/share/OpenCV/java/opencv-244.jar
box:lad$
Some Scala code to use it:
Many thanks to Andrew Stromnov to make this possible, since compiling yourself OpenCV with Java Support is not something the average Java guy will do. (I did it. It was a pleasure. ;-) )
Keep in mind that the port command compiles the jar file with the currently available JDK. If you run the port command in verbose mode you'll see that the jar file is assembled using ant. In order to force the port command to use a certain JDK you can patch the ant script:
80 # OS specific support. $var _must_ be set to either true or false.
81 cygwin=false;
82 darwin=false;
83 mingw=false;
84 case "`uname`" in
85 CYGWIN*) cygwin=true ;;
86 Darwin*) darwin=true
87 if [ -z "$JAVA_HOME" ] ; then
88 if [ -x '/usr/libexec/java_home' ] ; then
89 JAVA_HOME=`/usr/libexec/java_home -v 1.7`
90 elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then
91 JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
92 fi
93 fi
94 ;;
95 MINGW*) mingw=true ;;
96 esac
Like this, the JDK 1.7 on my machine will be used for generating the jar file.
Update:
Keep in mind that the port command compiles the jar file with the currently available JDK. If you run the port command in verbose mode you'll see that the jar file is assembled using ant. In order to force the port command to use a certain JDK you can patch the ant script:
80 # OS specific support. $var _must_ be set to either true or false.
81 cygwin=false;
82 darwin=false;
83 mingw=false;
84 case "`uname`" in
85 CYGWIN*) cygwin=true ;;
86 Darwin*) darwin=true
87 if [ -z "$JAVA_HOME" ] ; then
88 if [ -x '/usr/libexec/java_home' ] ; then
89 JAVA_HOME=`/usr/libexec/java_home -v 1.7`
90 elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then
91 JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
92 fi
93 fi
94 ;;
95 MINGW*) mingw=true ;;
96 esac
Like this, the JDK 1.7 on my machine will be used for generating the jar file.
JavaOne India returns and is being held again this year at the Hyderabad International Convention Centre. As always, the two days will be packed full with more valuable content from keynotes to technical sessions to hands-on labs and demos. Fingers crossed waiting for JavaOne India 2013 Hyderabad May 8th and 9th. Be part of it, register today: https://www.regpulse.com/javaone2013/register.php?pcode=737266&src=4003&Act=1
ReplyDeleteThanks for these guides and for your other contributions to the community.
ReplyDeleteThanks for your detailed explanation.
ReplyDeleteBut for me, first 2 steps got sucess.
But "port contents opencv | grep java" gives blank results.
Only "port contents opencv" gives a list of xml,h,hpp,etc files but no java.
Any suggestions what I might be doing wrong.
Thanks.
I am having the same problem. I received this piece of output: "db46's +java variant has been replaced with the db46-java port."
DeleteI finally have OpenCV installed (with java and eclipse) on my Mac, all thanks to you and your tutorial. Surprisingly very few tutorials have made use of MacPorts. Other methods may have its advantages, but for beginners I believe this is the easiest way to go about it.
ReplyDelete-- Anuj Potnis
For those trying in Java, don't forget to add "-Djava.library.path=/opt/local/share/OpenCV/java/". I also use "static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }" to simplify new versions of the library.
ReplyDeleteHi,
ReplyDeleteCould you explain more on the "In order to force the port command to use a certain JDK you can patch the ant script" part.
Where is the ant script and when and how to edit it ?
-- Hemika