メインコンテンツへスキップ

TermuxでAnaconda環境(miniforge)をインストールし、Pythonバージョンを手軽に切り替える

·
カテゴリー スマートフォン Termuxチュートリアル
タグ Anaconda Python Android
目次

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」を使います。miniforgeはminicondaと同じくAnacondaの軽量版で、コマンドの使い方も同じですが、より多くのアーキテクチャのLinuxシステムに対応しています。

1. TermuxとLinux環境をインストールする
#

  1. Termuxを初期化します

  2. 次に、Termux環境へ直接miniforgeをインストールするか、Proot Linuxを作成するかを選びます。TermuxのPythonバージョンはローリング更新で、ダウングレードできないため、私は独立したProot Debian環境を作るほうを好みます。そのほうが、異なるPythonバージョンをインストールしやすいからです。

2. miniforge3をインストールする
#

  1. RootアカウントでProot Debianにログインします。
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リポジトリでインストールスクリプトのURLを取得し、ダウンロードして実行します。
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 installまたはpipで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にマウントされているので、画像を移動すればOKです。
mv /sdcard/Downloads/input.jpg ~/
  1. 作成したPythonプログラムを実行します
python detectface.py
  1. 結果を確認するには、画像をスマホの内部ストレージへ移動します
mv output.jpg /sdcard/Downloads/
  1. 完成品

参考資料
#

関連記事


最後までお読みいただきありがとうございます。本サイトでは公開コメント欄を設けていません。私はソーシャルな反応やアクセス数を追い求めるためではなく、自分の考えを誠実に探求するために文章を書いています。記事を丁寧にお読みいただいたうえで、ご感想やご意見をお寄せいただければ幸いです。誤字・誤り・技術的な問題などを見つけた場合、またはフィードバックを共有したい場合は、Aboutページに記載しているメールアドレスまでお気軽にご連絡ください。