AnacondaはPythonのディストリビューションで、大量の既製パッケージを提供しています。さらに仮想環境を作成でき、複数のPythonバージョンを管理して同じシステム上で共存させられます。
AndroidスマホでPythonプログラムを書く際にAnaconda環境が必要なら、Termuxにインストールするのが現実的な選択肢です。下の画像は、AndroidでPythonのOpenCVパッケージを実行した例です。
ただし、Androidスマホの多くはaarch64(arm64)アーキテクチャです。Anaconda公式が対応している「ARM」デバイスはAWS Gravitonとarmv7l(32ビット)のRaspberry Piで、軽量版のminicondaも同様です。そのまま入れるとさまざまなエラーが出ます。
そのため、aarch64アーキテクチャのデバイスでは「miniforge」を使います。miniforgeはminicondaと同じくAnacondaの軽量版で、コマンドの使い方も同じですが、より多くのアーキテクチャのLinuxシステムに対応しています。
1. TermuxとLinux環境をインストールする#
Termuxを初期化します
次に、Termux環境へ直接miniforgeをインストールするか、Proot Linuxを作成するかを選びます。TermuxのPythonバージョンはローリング更新で、ダウングレードできないため、私は独立したProot Debian環境を作るほうを好みます。そのほうが、異なるPythonバージョンをインストールしやすいからです。
2. miniforge3をインストールする#
- RootアカウントでProot Debianにログインします。
proot-distro login debian- 事前に必要な依存パッケージをインストールします。AnacondaはPythonを自動でダウンロードできるので、別バージョンのPythonを手動で入れる必要はありません。
apt update
apt install wget python3 python3-pip vim- 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- miniforgeリポジトリでインストールスクリプトのURLを取得し、ダウンロードして実行します。
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.sh実行後にEnterを押し、矢印キーで上下に移動して、
yesと入力してライセンス条項に同意します。
miniforgeを
~/root/miniforgeにインストールし、完了まで待ちます。インストール完了後、環境を自動で起動するか、つまりProotにログインしたらcondaへ入るようにするかを聞かれます。
yesと入力します。
Prootからログアウトし、もう一度Prootへログインします。
exit
proot-distro login debianプロンプトに
(base)という括弧が表示されていれば、conda環境が自動起動しています。conda deactivateと入力するとconda環境から抜けられます。
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プロジェクトを使います。
たとえばここに少女終末旅行の画像があります。この画像から彼女たちの顔をマークしてみます。
- conda環境を作成します
conda create --name facedetection python=3.10.9
conda activate facedetection- 必要なパッケージをインストールします
conda install -c conda-forge opencv
wget https://raw.githubusercontent.com/nagadomi/lbpcascade_animeface/master/lbpcascade_animeface.xml- VIMでファイルを新規作成します
vim detectface.py- 原作者の書き方を参考にコードを書き、
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')- 画像をProotのディレクトリへどう置けばよいか気になるかもしれません。スマホの内部ストレージはProotの
/sdcardにマウントされているので、画像を移動すればOKです。
mv /sdcard/Downloads/input.jpg ~/- 作成したPythonプログラムを実行します
python detectface.py- 結果を確認するには、画像をスマホの内部ストレージへ移動します
mv output.jpg /sdcard/Downloads/- 完成品


