OpenCV Java入门一 在MAC系统上安装OpenCV

在Mac系统上安装OpenCV

Homebrew

确保brew update最新

因此你的brew update一定要为最新。在brew update时,经常我们会碰到卡死、或者报各种奇芭的错,99%的用户碰到的说是xcode不是最新或者说是commandline tool找不到,因此你可以使用以下步骤

sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install

稍等12-15分钟(依赖于网速和你的Mac性能),即完成了xcode的修复。

再运行

brew update

果碰到brew已经坏了(别重装MAC哈),我经常碰到,是因为brew的很多源是在“墙外”,有时装一半掉一半导致了Mac内的brew被搞了“一股臭味”,那么没有关系,我们就可以修复我们的brew。

其他

xcode-select: note: install requested for command line developer tools报错

安装brew软件管理工具的时候遇见了怎么一个错误:xcode-select: note: install requested for command line developer tools

手动下载commandLineTools

点击这里下载https://developer.apple.com/download/all/

OpenCV Java入门一 在MAC系统上安装OpenCV_第1张图片

进入下载页,搜索Command Line Tools,查看系统版本,找到跟系统版本一样或者相近的xcode-select版本。系统版本查看电脑的关于本机就可以。

找到后点击版本,打开后下载程序并执行即可。

再次终端执行 /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)

进行下载安装成功

删除本机已经混乱或者坏了的brew

brew update-reset

rm -rf /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
 
brew tap homebrew/core

设置国内brew镜像源-我们使用了国内中科大源

# Homebrew 源代码仓库
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git


# Homebrew 核心软件仓库
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git


# Homebrew cask 软件仓库,提供 macOS 应用和大型二进制文件
cd "$(brew --repo)"/Library/Taps/homebrew/homebrew-cask
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git


# Homebrew 预编译二进制软件包
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc


# 更新镜像
brew update

其他

这边再次需要各位引起重视,一定要在恒定百兆宽带基础上对xcode、brew进行update或者是运行上述修复命令。本身OpenCV还有Brew以及Mac相关的一些关键资源都是在墙外,虽然国内有一些mirror,但速度不行。

如果你的网速到达不了恒定的一秒至少5兆下载速率,你光以上几步因为失败、反复、失败就要耗费40多个小时。

对于网上说有时brew update时会碰到“git clone”或者是“error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)"。

这些的root cause就是一点:

你的网络速率不行,导致git在clone超过100兆以上的东西时,自己把自己打断了;

此时如果你按照网上做以下的设置,试图先clone下来一个框子或者是把所谓的git下载时的缓存加大都是徒劳。因此,请确保你的网络至少有恒定的5兆每秒。现在100兆,200兆宽带都到家,这个已经不是条件限制了我想。

git config --global http.postBuffer 2024288000
 
git config --list
 
git config --global core.compression 0
 
git clone --depth 1 https://mirrors.ustc.edu.cn/homebrew-core.git
 
git fetch --unshallow 
 
git pull --all

确保必须要装ANT

brew install ant

装完后你一定要确保你的Mac的环境变量path里可以直接访问ant命令。

ant -version

如果不可以在任意地方运行ant -version命令得到ant的正确输出,你还需要手工自己在~/.bash_profile里加入ant的命令于你的path变量中去。

记得一定要是ant 1.9或者以上版本,否则装了也是白装。

安装python3

个梗和上面第3点,必装ANT一样。OpenCV无论是3还是4在安装时要生成Java这两个文件,必装Python3.

brew upgrade python3

mac一般自带python2,而big sur版本中装OpenCV都用的是OpenCV4,它要求必须安装python3.

因此我们可以升级我们的本地python2至3,升级完后你原有的python2还会留着。网上会说把python3和python2互换一下。

但没必要,你可以保证python2和python3都存在。因为python2用的命令叫python,python3的命令叫python3.

这个没事的。因为我本机还有不少python2写的AI,因此我经常在两者间要用哪个时做手工切换。

安装jdk-17

安装过程网上找,选可以调试的版本

MacOS查看和设定JAVA_HOME

查看JAVA_HOME /usr/libexec/java_home -V


在终端中输入

java -version

查看当前的java版本信息

使用下面的命令查看JAVA_HOME

echo $JAVA_HOME

如果没有输出JAVA_HOME的路径,说明还没有设置

可以继续下面的设置操作


JAVA_HOME设置


首先查找java的安装路径

我们首先想到的就是使用

which java
或者
whereis java

我们得到的结果是

/usr/bin/java

我们到finder中打开这个目录看到的并不是真正的java的安装目录

通过查找,在开发者网站找到了一篇文章

https://developer.apple.com/library/content/qa/qa1170/_index.html
JavaHomeManyJava applications need to know the location of a $JAVA_HOME directory. The $JAVA_HOME on MacOSX should be found using the /usr/libexec/java_home command line tool on MacOSX10.5 or later.On older MacOSX versions where the tool does not exist, use the fixed path "/Library/Java/Home". The /usr/libexec/java_home tool dynamically finds the top Java version specified inJavaPreferencesfor the current user.This path allows access to the bin subdirectory where command line tools such as java, javac, etc. exist as on other platforms.The tool /usr/libexec/java_home allows you to specify a particular CPU architecture and Java platform version when locating a $JAVA_HOME.Another advantage of dynamically finding this path,as opposed to hardcoding the fixed endpoint,is that it is updated when a new version of Javais downloaded via SoftwareUpdate or installed with a newer version of MacOS X.Forthis reason, it is important that developers do not install files in the JDKs inside of /System, since the changes will be lost with subsequent updates by newer versions of Java.To obtain the path to the currently executing $JAVA_HOME, use the java.home System property.

我们执行以下命令查看

/usr/libexec/java_home -V

执行结果

Matching Java Virtual Machines (1):
    1.8.0_111, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

结果中的

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

就是JAVA_HOME的路径

我们将JAVA_HOME的路径添加到.bash_profile中

cd #切换到当前目录下
ls -a #查看当前路径下的所有文件,主要就是看看我们要编辑的.bash_profile是不是存在

将下面的内容添加到.bash_profile的最后

export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib

保存完成之后使用

source .bash_profile

更新修改的内容

现在我们再使用上面的查看JAVA_HOME的命令查看的话,就会看到以下结果的输出

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

安装OpenCV

Homebrew安装--我安装失败,报错缺ffmpeg的库,安装后也不可以

OpenCV安装核心步骤

  • 下载OpenCV最新master源码;

  • 下载OpenCV 对应版本的contribute源码包(有内置图形、JAVA包、声音等);

  • 使用C编译器,生成C工程;

  • 使用C编译器,编译C工程;

  • 使用python3+ant对java文件进行编译并生成java通过jndi调用OpenCV的C的底层native lib包(在Windows10下是一个.dll文件);

  • 把C编译生成成功的release包进行系统安装;

brew edit opencv

在安装前,你要确认你的opencv内的java编译选项是turn on的。默认opencv是不会安装和编译打包java文件的。

在控制端找到-DBUILD_opencv_java=OFF 修改为-DBUILD_opencv_java=ON ,以确保之后生成需要的jar文件如下图所示

OpenCV Java入门一 在MAC系统上安装OpenCV_第2张图片

然后你就可以:

brew install --build-from-source opencv

接下去按照我这个机型,22分钟后,一切显示failed 0,install successfully。

安装opencv,如果之前有安装过但是没有jar文件的话,需要运行brew reinstall --build-from-source opencv来重装。

你就可以看到OpenCV4正确装在了你的这个路径下了

OpenCV Java入门一 在MAC系统上安装OpenCV_第3张图片

而java用文件是生成在这边的

OpenCV Java入门一 在MAC系统上安装OpenCV_第4张图片

源码编译安装-4.7.0

依赖库安装

brew install gcc git cmake pkg-config ffmpeg libgphoto2 libav libjpeg libpng libtiff libdc1394 ant

JAVA 环境变量配置

我这里用的是~/.zshrc文件,除此之外,~/.bash_profile~/.bashrc/etc/profile 这些文件都可以添加环境变量,不用纠结我为什么在zshrc中添加(启动终端会自动加载的环境变量配置文件)

vi ~/.zshrc
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib
========================分割线-很重要========================
export JAVA_AWT_INCLUDE_PATH=$JAVA_HOME
export JAVA_AWT_LIBRARY=$JAVA_HOME
export JAVA_INCLUDE_PATH=$JAVA_HOME/indclude
export JAVA_INCLUDE_PATH2=$JAVA_HOME/include/darwin
export JAVA_JVM_LIBRARY=$JAVA_HOME
============================================================

注意分割线中间内容,不配置安装OpenCV之后,一直没有找到生成的Jar包和dylib动态库。

保存配置

source .zshrc

配置完了保存,别忘了使用source命令重载配置,并检查是否配置成功

echo $JAVA_INCLUDE_PATH2 // 检查是否配置成功

Cmake

如果红色字体不配置的话,Cmake之后的结果如下:

...
--   Java:                          
--     ant:                         /usr/local/bin/ant (ver 1.10.12)
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
...

配置之后,Cmake之后结果如下:

...
--   Java:                          
--     ant:                         /usr/local/bin/ant (ver 1.10.12)
--     JNI:                         /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/include /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/include/darwin /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/include
--     Java wrappers:               YES
--     Java tests:                  YES
...

就是这个差别,会影响最后到底有没有生成Jar包和动态库

下载编译

下载:https://opencv.org/releases/

我选的4.7.0 选Sources下载解压

cd Downloads/opencv-4.7.0

mkdir build

cd build

cmake -DBUILD_SHARED_LIBS=OFF -DWITH_IPP=OFF -DBUILD_ZLIB=OFF -DCMAKE_INSTALL_PREFIX={你的路径}/opencv-4.5.4 ../


如果遇到了(表示你Cmake太多次了)
1.FATAL:In-source builds are not allowed.
You should create separate directory for build files.
解决方法:1)先删除刚才在当前目录下创建的CMakeCache.txt文件和CMakeFIles目录;2)再新建目录,比如build目录,在build目录执行cmake.

... 开始进行配置/编译

注意检查最后:
--   Java:                          
--     ant:                         
--     JNI:                         
--     Java wrappers:               
--     Java tests:    

这后面的值有没有,如果没有说明环境变量没有配置成功

等待片刻后在当前目录下会出现一堆文件,这时使用命令

make -j 8

等待编译完成,然后进行安装,等待结束

make install

找Jar包和dylib动态库

安装结束后,可以找到安装目录,找到对应的动态链接库以及对应的Jar文件

cd ~/Downloads/opencv-4.7.0/build/bin
能找到 opencv-470.jar 文件

cd ~/Downloads/opencv-4.7.0/build/lib
能找到 libopencv_java470.dylib 文件

至此,OpenCV的安装结束

OpenCV环境变量配置

  1. 如果使用了Homebrew完成了OpenCV安装,则忽略这一步

  1. 如果直接使用的源码安装,则需要配置环境变量

export OPENCV_HOME={你的目录}
export PATH=$OPENCV_HOME/build/bin:$PATH

别忘了source加载

➜ opencv_version
4.7.0

看到这个环境变量就配置成功了

Java使用:

System.load(opencvPath + "libopencv_java470.dylib");

    org.bytedeco.javacpp-presets
    opencv
    4.0.1-1.4.4

其他人:IDEA + Java 使用OpenCV

必备:opencv-454.jarlibopencv_java454.dylib (在windows环境下,应该为dll文件,在Linux环境下,应该为.so文件)

将jar包放入项目根目录./lib目录下

1. maven项目引入jar包

org.opencvopencv4.5.4system${project.basedir}/lib/opencv-454.jar

2. 编写测试类

publicclassOpenCVTest{static{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}publicstaticvoidmain(String[] args){Mat imread =Imgcodecs.imread("WechatIMG26763.jpeg");System.out.println(imread);}}

点击执行,这个时候会报错,不要管

点开IDEA的运行Configurations,找到OpenCVTest选项,添加VM参数

-Djava.library.path={你的libopencv_java454.dylib所在目录}
例如:/Home/Users/my/Download/opencv_4.5.4/build/lib

再次点击运行:

Mat[873*1920*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0x7fb3524176b0, dataAddr=0x7fb356aaa000]

至此,开发环境搭建完成。

3. 关于打包执行问题

主要是需要把我们独立引入的lib下的包打包到jar中

org.springframework.bootspring-boot-maven-plugintruetrue

打包后,所有依赖包都会打包到jar中

4. 建议把Jar包上传至Maven仓库,方便正常打包使用

mvn install:install-file -Dfile={jar地址} -DgroupId=org.opencv -DartifactId=opencv-454-for-mac -Dversion4.5.4 -Dpackaging=jar

so文件支持macos和linux么,osx上的.so和.dylib有什么区别?

在Mac OS X上.dylib和.so之间的区别在于它们的编译方式。对于.so文件,您使用-shared;对于.dylib,您使用-dynamiclib。.so和.dylib都可以作为动态库文件互换,并且都具有DYLIB或BUNDLE的类型。这是显示此内容的不同文件的读数。

两者在Mac OS X上等效的原因是为了与其他编译为.so文件类型的UNIX OS程序向后兼容。

编译说明:无论是编译.so文件还是.dylib文件,都需要在链接步骤中将正确的路径插入动态库中。通过将-install_name和文件路径添加到链接命令来执行此操作。如果不这样做,您将遇到这篇文章中看到的问题:Mac Dynamic Library Craziness(可能仅适用于Fortran)。

你可能感兴趣的:(java,opencv)