前言
java_opencv windows環(huán)境下很好部署使用,官網(wǎng)直接有一鍵安裝版,所以這里就不提了,主要說說這個linux環(huán)境下,哎,一堆坑,踩了好幾天.
1.環(huán)境準備
1.1 cmake
- 安裝編譯環(huán)境
yum -y install gcc gcc-c++ openssl openssl-devel tar
- 下載源碼
版本自己可以去官網(wǎng)選擇,我這里是覺得沒必要整那么高的版本
wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz```
tar -zxf cmake-3.16.2.tar.gz
- 編譯安裝
./bootstrap --prefix=/usr --datadir=share/cmake --docdir=doc/cmake && make -j8
make install
這一步巨慢,不加 -j8巨巨慢,自己的機器有幾核就-j幾核心,量力而為;
- 安裝檢查
cmake --version
1.2 ant
調(diào)jni的SDK的jar包是通過ant編譯,所以,需要裝這個東西yum -y install ant
裝完以后,你會發(fā)現(xiàn)他會給你裝個jdk1.8,建議卸載掉
1.3 JAVA_HOME
這玩意兒一定要配,不然不會生成所需的jar包,而且必須是手動配置,即手寫入profile文件里的,
所以建議,下載壓縮包,手動配置的方式安裝jdk
安裝之前先卸載掉已經(jīng)安裝的jdk版本,如果已經(jīng)有了自己手動配置的java_home,這一步可以跳過;rpm -qa | grep jdk
我這里只裝jdk11,執(zhí)行命令卸載掉rpm -e --nodeps java-11-openjdk-headless-11.0.15.0.9
rpm -e --nodeps java-11-openjdk-devel-11.0.15.0.9
rpm -e --nodeps java-11-openjdk-11.0.15.0.9
剩下的就是標準的linux jdk安裝步驟了,可以去網(wǎng)上找一篇對著安裝.
2.opencv安裝
-
下載基本包與拓展包
wget -O opencv-4.5.5.tar.gz https://github.com/opencv/opencv/archive/refs/tags/4.5.5.tar.gz
wget -O opencv_contrib-4.5.5.tar.gz https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.5.tar.gz
-
解壓
tar -zxvf opencv-4.5.5.tar.gz
tar -zxvf opencv_contrib-4.5.5.tar.gz
-
構(gòu)建
cd ./opencv-4.5.5
mkdir build && cd build
#開始構(gòu)建
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/home/admin/opencv_contrib-4.5.5/modules -D ENABLE_CXX11=ON -D WITH_1394=OFF -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF ..
cmake的參數(shù)說明:-D CMAKE_BUILD_TYPE=RELEASE
編譯發(fā)布版本-D CMAKE_INSTALL_PREFIX=/usr/local
編譯后的安裝主目錄-D OPENCV_GENERATE_PKGCONFIG=ON
這個是為了C++引用的,可以忽略-D OPENCV_EXTRA_MODULES_PATH=/home/admin/opencv_contrib-4.5.5/modules
這個就是附加模塊路徑,這個地址需要自定義-D ENABLE_CXX11=ON
C++版本支持-D WITH_1394=OFF
這個好像要加些依賴,關(guān)掉。不關(guān)也沒關(guān)系-D BUILD_opencv_xfeatures2d=OFF
這里要重點說一下,在附件模塊opencv_contrib-4.5.5/modules里面有很多目錄,如果有些你不想要就關(guān)掉。比如xfeatures2d這個就導(dǎo)致我編譯不過,我又不用,直接關(guān)掉。-D BUILD_SHARED_LIBS=OFF
這個重點說,就是讓依賴庫變成一個SO而不是很多SO。這個SO就是java的jni要用的。-D BUILD_TESTS=OFF
關(guān)掉測試,提高編譯效率,減少時間。編譯太長時間了。。。。。
… 后面兩個點不要忘記了
注意要關(guān)注日志(我沒截圖,拿了網(wǎng)上的圖)
這里是你關(guān)掉的模塊
這里是你排除的模塊
這倆一定要注意,必須要有的,如果沒有,就是ant沒有安裝成功,或者java_home不對,如果沒有就不會生成所需的依賴包
- 編譯
make -j8 #這一步巨慢,不加多核編譯的話,可能需要幾十分鐘
make install
- 完成
在/usr/local/share/java/opencv4目錄下會有我們所需的jar包與so庫文件,如果沒有,那就刪了build文件,重新構(gòu)建編譯吧
3.項目使用
- 為了同時兼容windows與linux,需要引入依賴
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.5.5-1</version>
</dependency>
- 初始化依賴
@PostConstruct
public void init() {
try {
//獲取當前系統(tǒng)
String osName = System.getProperties().getProperty("os.name");
if ("Linux".equalsIgnoreCase(osName)) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
} else {
nu.pattern.OpenCV.loadShared();
System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
}
} catch (Exception e) {
e.printStackTrace();
}
}
也可以在靜態(tài)代碼塊里初始化
啟動下吧,不報錯就是加載成功了!
如果程序說找不到包的話,可以把/usr/local/share/java/opencv4目錄下的文件復(fù)制到/usr/lib/下
最后附上DockerFile文件,因為我是docker部署的文章來源:http://www.zghlxwxcb.cn/news/detail-649062.html
FROM centos
WORKDIR /home/admin
#下載jdk11
RUN wget https://download.oracle.com/otn/java/jdk/11.0.17+10/8bd089539add49a9b99e2f27eb0c4329/jdk-11.0.17_linux-x64_bin.tar.gz?AuthParam=1667384513_084b3d888e18c6459482084546b57037
#重命名jdk名稱
RUN rename jdk-11.0.17_linux-x64_bin.tar.gz?AuthParam=1667384513_084b3d888e18c6459482084546b57037 jdk-11.0.17_linux-x64_bin.tar.gz jdk-11.0.17_linux-x64_bin.tar.gz?AuthParam=1667384513_084b3d888e18c6459482084546b57037
#安裝必要的
RUN yum -y install gcc gcc-c++ openssl openssl-devel tar
RUN wget https://github.com/Kitware/CMake/releases/download/v3.16.2/cmake-3.16.2.tar.gz
RUN tar -zxf cmake-3.16.2.tar.gz
WORKDIR cmake-3.16.2
RUN ./bootstrap --prefix=/usr --datadir=share/cmake --docdir=doc/cmake && make -j8
RUN make install
WORKDIR /home/admin
##安裝ant
RUN yum -y install ant
#
##卸載當前系統(tǒng)的jdk
RUN rpm -e --nodeps java-1.8.0-openjdk-devel-1.8.0.352.b08
RUN rpm -e --nodeps java-11-openjdk-11.0.15.0.9
RUN rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.352.b08
RUN rpm -e --nodeps java-1.8.0-openjdk-1.8.0.352.b08
RUN rpm -e --nodeps java-11-openjdk-headless-11.0.15.0.9
RUN rpm -e --nodeps java-11-openjdk-devel-11.0.15.0.9
##解壓
RUN tar -zxvf jdk-11.0.17_linux-x64_bin.tar.gz
##配置java_home
ENV JAVA_HOME /home/admin/jdk-11.0.17
RUN echo -e "export JAVA_HOME=/home/admin/jdk-11.0.17\n" >> /etc/profile
RUN echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
RUN echo -e "\n" >> /etc/profile
RUN echo "export CLASSPATH=$JAVA_HOME/lib" >> /etc/profile
RUN echo "source /etc/profile" >> ~/.bashrc
#source
RUN source /etc/profile
#設(shè)置javahome,以防萬一
RUN export JAVA_HOME=/home/admin/jdk-11.0.17
#下載openvc包
RUN wget -O opencv-4.5.5.tar.gz https://github.com/opencv/opencv/archive/refs/tags/4.5.5.tar.gz
RUN wget -O opencv_contrib-4.5.5.tar.gz https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.5.tar.gz
#解壓
RUN tar -zxvf opencv-4.5.5.tar.gz
RUN tar -zxvf opencv_contrib-4.5.5.tar.gz
#切到opencv下
WORKDIR ./opencv-4.5.5
#創(chuàng)建build
RUN mkdir build
WORKDIR build
#開始構(gòu)建
RUN cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_EXTRA_MODULES_PATH=/home/admin/opencv_contrib-4.5.5/modules -D ENABLE_CXX11=ON -D WITH_1394=OFF -D BUILD_opencv_xfeatures2d=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF ..
#開始編譯
RUN make -j8
RUN make install
#刪除無用的包
WORKDIR /home/admin
RUN rm -rf cmake-3.16.2.tar.gz
RUN rm -rf jdk-11.0.17_linux-x64_bin.tar.gz
RUN rm -rf opencv-4.5.5.tar.gz
RUN rm -rf opencv_contrib-4.5.5.tar.gz
ENV JAVA_HOME /home/admin/jdk-11.0.17
WORKDIR /home/admin
RUN cp /usr/local/share/java/opencv4/* /usr/lib/
RUN echo "source /etc/profile" >> /etc/bashrc
WORKDIR /home/admin
參考文檔
官方安裝教程
官方j(luò)ava_opencv環(huán)境配置
java在linux下編譯使用opencv
CentOS 7 源碼安裝 CMake 3.16.2 最新穩(wěn)定版文章來源地址http://www.zghlxwxcb.cn/news/detail-649062.html
到了這里,關(guān)于Linux環(huán)境下編譯并使用java_opencv的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!