快轉到主要內容

Android手機寫Python:Termux安裝Anaconda環境 (miniforge)

智慧型手機 Termux教學 Anaconda Python Android
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

🇺🇸 English version

Anaconda是一個Python發行版,提供大量現成套件。並能建立虛擬環境,管理多個Python版本使其共存於同一個系統上。

Android手機寫Python程式需要Anaconda環境的話,在Termux裡安裝是個可行的選項。例如下圖是Android跑Python OpenCV套件的示例。

OpenCV on Termux on Android

不過Android手機大部份是aarch64 (arm64)架構,Anaconda官方支援的"ARM"架構裝置為AWS Graviton,以及armv7l (32位元) 的Raspberry Pi,精簡版的miniconda也是如此,裝了會出現各種錯誤。

所以aarch64架構的裝置要改裝"miniforge", 它跟miniconda一樣是精簡版的Anaconda,指令用法一樣,支援更多架構的Linux系統。

1. 安裝Termux與Linux環境
#

  1. 初始化 Termux

  2. 接著選擇要直接在Termux環境安裝miniforge,或是建立Proot Linux?由於Termux的Python版本是滾動更新的(無法降級),我個人偏好建一個獨立的 Proot Debian環境,這樣才比較方便安裝不同版本的Python。

2. 安裝miniforge3
#

  1. 登入Proot Debian,使用Root帳號。
proot-distro login debian
  1. 安裝前置依賴套件。由於Anaconda能自動下載Python,我們不需要再手動安裝其他版本的Python。
apt update
apt install wget python3 python3-pip vim
  1. Proot預設會使用Termux的Python,因此需要用以下指令指定系統暫時使用Proot內部的Python:
alias python=/usr/bin/python3
alias python3=/usr/bin/python3
alias pip=/usr/bin/pip
alias pip3=/usr/bin/pip
  1. miniforge儲存庫,取得安裝指令稿網址,下載執行
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.sh
  1. 執行後Enter,使用箭頭上下移動,輸入yes同意授權條款。

  2. 並將miniforge安裝至~/root/miniforge,待其安裝完成。

  3. 安裝完成後會問要不要自動啟動環境,也就是登入Proot便進入conda。輸入yes

  4. 登出Proot,再重新登入Proot

exit
proot-distro login debian
  1. 會發現提示符出現括號(base),代表conda環境已自動啟動。輸入conda deactivate退出conda環境。

  2. 若想改成手動進入conda環境,輸入conda config --set auto_activate_base false停用自動進入conda環境。

3. 使用conda指令
#

進入conda環境後,可直接用conda installpip安裝Python套件。在conda環境裡會自動使用conda所安裝的Python版本。

conda好用的功能便是建立多重虛擬環境了。假設現在要建立舊版Python 3.6的環境,輸入以下指令:

conda create --name test1 python=3.6

進入/離開虛擬環境

conda activate test1
conda deactivate

這樣便可以安裝限定Python 3.6才能裝的套件了。

4. 寫個簡單的OpenCV程式
#

這是個偵測人臉的程式,不過,我想來點好玩的:偵測動畫人物的人臉,採用 lbpcascade_animeface的專案。

例如這裡有一張少女終末旅行的圖片,我們要將她們的臉孔標記出來。

  1. 建立conda環境
conda create --name facedetection python=3.10.9
conda activate facedetection
  1. 安裝需要的套件
conda install -c conda-forge opencv
wget https://raw.githubusercontent.com/nagadomi/lbpcascade_animeface/master/lbpcascade_animeface.xml
  1. 用VIM新增檔案
vim detectface.py
  1. 參考原作者的寫法撰寫程式碼,讀取input.jpg,標記臉孔後輸出為output.jpg
import cv2
def detectFace(filename):
    cascade = cv2.CascadeClassifier("./lbpcascade_animeface.xml")
    image = cv2.imread(filename, cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = cv2.equalizeHist(gray)
    color = (0, 0, 255)
    faces = cascade.detectMultiScale(gray,
                                     scaleFactor = 1.1,
                                     minNeighbors = 5,
                                     minSize = (24, 24))
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 20)
    cv2.waitKey(0)
    cv2.imwrite("output.jpg", image)

detectFace('input.jpg')
  1. 如果問說要怎麼把圖片放到Proot的目錄,別忘了手機內部儲存空間是掛載在Proot的/sdcard,將圖片移動過來即可:
mv /sdcard/Downloads/input.jpg ~/
  1. 執行寫好的Python程式
python detectface.py
  1. 欲查看結果,將圖片移動到手機內部儲存空間
mv output.jpg /sdcard/Downloads/
  1. 成品

參考資料
#

相關文章

實驗:Android免刷機跑postmarketOS(Termux proot)
智慧型手機 Termux教學 postmarketOS Termux
Termux終端機使用教學:Android手機跑Linux指令
智慧型手機 Termux教學 Linux Termux
用Termux Proot在Android手機玩Minecraft Java版
智慧型手機 Termux教學 Raspberry Pi Minecraft

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。