天天看點

[Termux]使用Termux安裝opencv正确的安裝方法遇到的問題總結

文章目錄

  • 正确的安裝方法
    • 1.安裝必備工具
    • 2.擷取opencv
    • 3.建立build檔案夾
    • 4.管理者身份
      • 沒有root的手機
      • 已root的手機
    • 5.配置
    • 6.編譯&安裝
    • 7.測試
  • 遇到的問題總結

最近在學習開源的opencv視覺庫(基于Python),突發奇想,要是能在手機上也能運作opencv-python庫該多好,就可以随時随地的研究了。

光說不練是不行的,于是在網上索羅一圈後,發現了一個神器──Termux。Termux是一款Android下的模拟器,可以模拟一套Linux環境,Termux的使用這裡不做過多介紹,想了解的同學可以去Termux官網( https://termux.com/)檢視介紹并下載下傳。此外再附一個Termux安裝使用配置教程( https://www.sqlsec.com/2018/05/termux.html),此教程筆者感覺寫的非常好,看完後可以對Termux有比較詳細的了解。

安裝好Termux後,按照上面的教程配置一下,遍可以安裝opencv了。筆者先開始安裝Python環境,安裝後想通過pip install opencv-python安裝opencv,但當執行指令後,卻提示:

[Termux]使用Termux安裝opencv正确的安裝方法遇到的問題總結

找不到滿足的包,于是上網搜了下,發現opencv官網說不支援ARM平台,是以要在Termux上安裝opencv需要自己編譯,于是開始上網搜各種opencv在ARM上編譯的方法,一開始找了幾篇文章出現了各種錯誤,文章最後我會記錄下我遇到的一些錯誤及解決辦法(不知道解決方法對不對,反正是不在報錯了)供大家參考,下面給出正确的安裝方法。

正确的安裝方法

此方法在小米和華為裝置上實驗成功,均在Android P下進行!安裝及配置時請確定聯網,需要下載下傳工具!

此方法參考了以下文章,感謝作者!

  • https://wiki.termux.com/wiki/Instructions_for_installing_python_packages#opencv
  • https://blog.csdn.net/baby_moon/article/details/81070638
  • https://blog.csdn.net/weixin_37619439/article/details/86726586
  • https://docs.opencv.org/master/d0/d76/tutorial_arm_crosscompile_with_cmake.html
  • https://blog.csdn.net/u014734886/article/details/96997097

1.安裝必備工具

pkg install python python-dev 
pkg install libjpeg-turbo-dev libpng-dev cmake pkg-config 
           

很多教程中會要求也安裝clang,但筆者安裝clang後反而編譯時會報錯,具體原因未找到

2.擷取opencv

使用git将opencv clone下來,并進入opencv檔案夾

git clone https://github.com/opencv/opencv && cd opencv 
           

3.建立build檔案夾

mkdir build && cd build 
           

4.管理者身份

在執行配置檔案之前一定要擷取管理者身份,否則可能make後無法正常使用

沒有root的手機

沒有root的手機可以使用Termux提供的工具proot模拟root環境

# 安裝proot
pkg install proot 
# 進入管理者環境,用exit退出
termux-chroot 
           

已root的手機

已經root了的手機,可以使用Termux提供的工具tsu代替su指令

# 安裝tsu
pkg install tsu
# 進入管理者環境,用exit退出
tsu 
           

5.配置

使用以下指令進行配置

LDFLAGS=" -llog -lpython3" cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$PREFIX/local -DBUILD_opencv_python3=on -DBUILD_opencv_python2=off -DOPENCV_EXTRA_MODULES=../modules -DPYTHON3_LIBRARIES=$PREFIX/lib/libpython3.so -DWITH_QT=OFF -DWITH_GTK=OFF .. 
           

-DCMAKE_INSTALL_PREFIX 為opencv最終安裝路徑,一般為/usr/local,這裡我使用$PREFIX/local,$PREFIX是Termux提供的系統變量對應的路徑為/data/data/com.termux/files/usr

-DOPENCV_EXTRA_MODULES 是opencv的modules檔案夾

-DPYTHON3_LIBRARIES 是Python的libpython3.so所在路徑

-DWITH_QT 若需要QT支援,将此項設為ON

注意做後有兩個“…”不要忘了,那個表示在上一級目錄執行

6.編譯&安裝

編譯指令

make -j4 
           

注意這一步編譯時間比較長,請耐心等待。

-j是表示啟用的job數,我是啟動了4個任務編譯,如果你的裝置CPU足夠好可以用8個,若是性能不好建議僅使用make,不加任何參數以保證編譯時不錯出,但會增加時間。我用4job編譯大約用了1小時,僅用make編譯用了近2小時

編譯後進行安裝,然後退出管理者模式

make install 
exit 
           

7.測試

安裝好後,進入Python

python
import cv2
           

如果導入cv2不報錯,則表示安裝成功,如果報錯,可嘗試指定下PYTHONPATH,這裡的路徑是檔案cv2.XXX-XXX.so存在的目錄,第一個XXX是編譯Python連接配接庫類型,第二個XXX是Python版本

export PYTHONPATH=/data/data/com.termux/files/usr/local/lib/python3.7/site-packages/cv2/python-3.7:$PYTHONPATH
           

遇到的問題總結

  1. 無法安裝必備工具

    問題:安好Termux後,我就開始安裝必備工具,但發現python-dev libjpeg-turbo-dev libpng-dev總是安裝不上

    解決方法:更換Termux的軟體下載下傳源為清華的後,便可以成功安裝

# 設定預設文本編輯器,vi的基本操作請自行百度
export EDITOR=vi
# 修改下載下傳源
apt edit-sources
           

将原來的https://termux.net官方源替換為http://mirrors.tuna.tsinghua.edu.cn/termux (其他内容不要删除)

2. 配置指令報錯

問題:在進行配置指令時總是報錯,各種錯誤,常見找不到子產品、未定義xxx的錯誤

解決方法:同樣是應為必備工具沒有安裝好的原因

3. 編譯報undefind “__android_log_print"錯誤

問題:編譯時遇到undefind “__android_log_print"錯誤,然後仍然繼續編譯幾行後,停止編譯

解決方法:配置中需要添加LDFLAGS=” -llog -lpython3”

4. 安裝報很對未知錯誤

問題:在安裝中發現很多未知錯誤後警告

解決方法:沒有安裝Numpy,pip install numpy後重新安裝即可

5. 安裝後import cv2報錯 missing configuration

問題:安裝後進入python,import cv2時報丢失配置

解決方法:查找opencv的安裝目錄下是否有cv2.XXX-XXX.so檔案,第一個XXX是編譯Python連接配接庫類型,第二個XXX是Python版本。若沒有說明編譯權限不夠,或是其他未知原因,使用管理者重新編譯下,然後找到該檔案目錄後添加到PYTHONPATH中,注意隻需要添加檔案所在目錄即可,添加方法上面第7步中有寫

6.關于安卓10的說明

以上指令在Android9系統上實測正常,在Android10系統上,termux-chroot指令會報錯無法使用,這會導緻後面配置生成的cv2.XXX-XXX.so無法生成,暫時沒有找到解決辦法,如需使用可root手機嘗試,筆者沒有root後的手機,是以沒有嘗試。 經測試,在Android10上可使用最新的termux版本(0.98版本)可正常運作termux-chroot指令,若直接更新仍無法使用,可重新安裝proot嘗試。另外,配置指令會報AndroidSDK的錯誤,需增加-DBUILD_JAVA=OFF -DBUILD_ANDROID_EXAMPLES=OFF這兩個指令,最終完整的指令如下(此問題感謝 稚you 的評論才得以解決)

LDFLAGS=" -llog -lpython3" cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$PREFIX/local -DBUILD_opencv_python3=on -DBUILD_opencv_python2=off -DOPENCV_EXTRA_MODULES=../modules -DPYTHON3_LIBRARIES=$PREFIX/lib/libpython3.so -DWITH_QT=OFF -DWITH_GTK=OFF -DBUILD_JAVA=OFF -DBUILD_ANDROID_EXAMPLES=OFF ..