1. 程式人生 > >Java伺服器部署基於OpenCV的C++影象處理專案(一)

Java伺服器部署基於OpenCV的C++影象處理專案(一)

Java伺服器部署基於OpenCV的C++影象處理專案(一)

由於最近專案需要在後臺處理圖片並返回結果給移動端,所以折騰了一週如何將c++程式碼和opencv打包並部署到java伺服器中供後臺呼叫,這裡記錄下詳細過程。

基礎環境

伺服器環境
阿里雲伺服器 Red Hat 4.4.7-16 x86_64
java version “1.8.0_171”

開發環境
(將需要的庫編譯好之後傳到伺服器上,不要在伺服器上編譯,環境太老就換伺服器環境吧)

VM虛擬機器 + CentOS-7-x86_64-Everything-1804 Red Hat 4.8.5-28 (centos下載:

http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1804.iso
java version “1.8.0_191”
IDE:ideaIU-2018.2.5 (破解版安裝及配置:https://www.cnblogs.com/aloenfs/p/9032682.html)
cmake version 2.8.12.2
gcc 版本 4.8.5 20150623

環境配置

在centos中需要配置java開發環境及c++編譯環境。全程使用root使用者

1.jdk安裝 (伺服器和開發環境都需要)

centos安裝後可能會自帶OpenJDK,先刪除再安裝想要的版本。
刪除可參考:

https://www.cnblogs.com/winner-0715/p/5154326.html
安裝可參考:http://www.cnblogs.com/xqzt/p/4934451.html

2.IDEA安裝 (開發需要)

參考:https://www.cnblogs.com/aloenfs/p/9032682.html 按照步驟來,注意其中最後一步在hots中新增key驗證地址。由於不同版本IDEA的key驗證視窗可能彈出時間不同,影響不大,彈出後新增key即可。

開發springboot專案時,springboot自帶tomcat容器,不需要另外安裝tomcat
而其他web專案開發還需要tomcat環境,下載tomcat解壓到自定義目錄即可:
tomcat8下載地址:

https://tomcat.apache.org/download-80.cgi
解壓,無需其他操作:

tar -zxvf apache-tomcat-8.5.29.tar.gz -C /usr/tomcat

IDEA建立非springboot專案並配置tomcat:
參考:https://www.cnblogs.com/soundcode/p/6485686.html
在這裡插入圖片描述

3.cmake安裝 (開發需要)

直接執行命令

yum install cmake

同時可檢視系統gcc版本,如未安裝可直接yum安裝

yum install gcc
gcc -v

3.1 一些編譯依賴

ant yum install ant這個也要裝,不然jar包生成不了
dot yum install graphvizgraphviz中包含dot
zlib 需要自行下載安裝,之後工程執行會依賴這個庫。下載安裝方法:https://yq.aliyun.com/ziliao/454311 ,這個題主使用的是 get http://zlib.net/zlib-1.2.8.tar.gz ,這個版本我沒找到。我在centos下使用 wget http://zlib.net/zlib-1.2.11.tar.gz,後安裝步驟就和這個題主一樣了。
以上依賴安裝參考https://blog.csdn.net/S_gy_Zetrov/article/details/80993533 。連結裡是mac安裝步驟,但是centos安裝同理。
ffmpeg (可選) 支援opencv的一些音視訊處理 (在mac下安裝較方便,但是centos下版本過老,需自己下載安裝,參考: https://www.cnblogs.com/subo_peng/p/6732826.html

4.opencv安裝 (開發需要)

下載地址:https://opencv.org/releases.html ,我這裡下載的版本是 3.4.1。
參考:https://blog.csdn.net/u013685902/article/details/78695094 。其中安裝之前的編譯命令教程中使用:cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/home/software/opencv .. ,其中CMAKE_INSTALL_PREFIX表示安裝目錄,可以安裝在自定義目錄,我這裡在根目錄下建立 /app/opencv 目錄用於安裝,安裝命令:cmake -D CMAKE_INSTALL_PREFIX=/app/opencv .. ,也可直接安裝在系統預設目錄,命令簡化為:cmake .. 然後接下來按照參考網址操作就完事了。
安裝完成後可以在/app/opencv 下看到4個目錄,否則可能安裝的有問題,這裡面的一些檔案在後面編譯會用到:
opencv安裝目錄

編譯opencv使用make時可能出現問題,需升級gcc:
cc1plus: 警告:命令列選項“-Wstrict-prototypes”對 Ada/C/ObjC 是有效的,但對 C++ 無效

升級gcc

虛擬機器直接安裝CentOS7就不需要升級gcc,不然問題太多,麻煩的一批。如果有升級gcc需要,下面步驟仍可參考。

原因是cmake或者gcc版本過低,可檢視cmake版本是否合適。而gcc在centos下版本過老,需自己下載安裝,我這裡下載gcc-4.8.5:

 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.5/gcc-4.8.5.tar.gz

同時升級gdb,gdb安裝和gcc升級可參考:https://www.cnblogs.com/highway-9/p/5628852.html
gcc,make,cmake的關係可參考:https://blog.csdn.net/libaineu2004/article/details/77119908
安裝好之後再make可能會出現:cc1plus: 警告:無法識別的命令列選項“-Wno-tautological-undefined-compare” 之類的錯誤,原因是新版老版同時存在,系統仍然使用的老版gcc。解決方法:https://blog.csdn.net/lhh1113/article/details/64441802?locationNum=8&fps=1 。複製以下命令直接執行即可,其作用是備份老版gcc並激活新版:

mv /usr/bin/gcc /usr/bin/gcc4.4.7
ln -s /usr/local/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++4.4.7
ln -s /usr/local/bin/g++ /usr/bin/g++
mv /usr/bin/cc /usr/bin/cc4.4.7
ln -s /usr/local/bin/cc /usr/bin/cc
mv /usr/bin/c++ /usr/bin/c++4.4.7
ln -s /usr/local/bin/c++ /usr/bin/c++

之後重啟系統,我在重啟系統之後遇到了系統保護問題,由於更改核心庫,硬碟被掛載為只讀。操作檔案會提示 ***只讀的檔案系統 。使用命令 mount -o remount,rw / 重新掛載硬碟。

刪除opencv的build目錄,重新建立build,重新安裝cmake並重覆上方編譯步驟,否則直接繼續make,可能出現很多錯誤:
/usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.21' not found,解決方法參考:https://blog.csdn.net/shine_journey/article/details/62039381
make[1]: *** 正在等待未完成的任務....SyntaxError: invalid syntax make[2]: *** [CMakeFiles/dephelper/gen_opencv_java_source] 錯誤 1
CMake Error: your C compiler: "/usr/bin/cc" was not found. Please set CMAKE_C_COMPILER to a valid compiler path or name. 等莫名其妙的錯誤。

我在阿里雲伺服器上經過上述步驟升級完gcc之後,編譯opencv還是遇到了很多問題,然後我直接在我的開發環境中編譯opencv並安裝,然後將安裝目錄傳到了伺服器上,這樣程式部署之後也是可以執行的。詳細方法如下。
opencv配置到伺服器

在開發環境中編譯安裝好opencv之後(我的安裝目錄是 /app/opencv),直接將安裝目錄壓縮上傳。操作方法如下:
在這裡插入圖片描述
在這裡插入圖片描述

tar zcvf opencv.tar.gz opencv
scp /app/opencv.tar.gz [email protected].**你的域名**.com:/app 

然後在伺服器/app目錄直接解壓即可 tar -zxvf opencv.tar.gz

至此已完成基礎環境配置,編譯和打包在下一篇中詳細講解。