第4回: androidスマホだけで機械学習の予測モデルを使おう ! (2) pythonとそのライブラリのインストールまで(更新'23/12/16)

しょくぶつ(^^)です。
前回は、androidスマホにTermuxをインストールして、Windowsからスマホssh接続したところまででした。

plant-smile.hatenadiary.jp

今回は、Ubuntu環境とpython環境を構築しますね。 特に、python環境は次のライブラリも使えるようにしちゃいます。

  • numpy
  • pandas
  • matplotlib
  • scipy
  • scikit-learn
  • Pillow
  • 機械学習ソフトウェアライブラリ Tensorflow
  • 画像処理ライブラリ opencv

Termuxでライブラリをインストールできずに困っている方も是非ご覧ください。

途中でやめたり再開するときは

前回の作業の後で作業をいったん終えた方も多いはずです。
ところがスマホとパソコンとの接続は、パソコンをスリープさせたりすると接続が切れてしまいます。

そんなときは、次のコマンドを実行してください。
(1)スマホ側のTermuxを閉じているときは下記を実行。
・Termuxを開く
・Termux上で次のコマンドを打つ。なお、"↑"を押すと1回前に実行したコマンドが表示されます。もう何回か"↑"を押すと、下記のコマンドが出てくるはずです。

~$ ip -4 a
・・・
inet (スマホのipアドレス)/24
・・・

ただし、前回と変わっていないことがほとんどです。
・Termux上で次のコマンドでipアドレスを確認。

~$ sshd

(2) Powershell上から

例: PS C:\Users\(ご自身の環境に依存)> ssh u0_a435@(スマホのipアドレス) -p 8022

そしてパスワードを打ち込んでください。 無事に、前回と同じ画面は出たでしょうか?

(base) PS C:\Users\QYA04> ssh.exe u0_a52@(スマホのipアドレス) -p 8022
u0_a52@(スマホのipアドレス)'s password:

Welcome to Termux!

Community forum: https://termux.com/community
Gitter chat:     https://gitter.im/termux/termux
IRC channel:     #termux on libera.chat

Working with packages:

 * Search packages:   pkg search <query>
 * Install a package: pkg install <package>
 * Upgrade packages:  pkg upgrade

Subscribing to additional repositories:

 * Root:     pkg install root-repo
 * X11:      pkg install x11-repo

Report issues at https://termux.com/issues

~ $

スマホ画面だけでも不可能ではありませんが、パソコンと接続して作業した方が何かと楽です。
上記ように再開したりして、パソコンとは接続できましたね?
では、どんどんいきます。

Ubuntuという超有名なLinux環境も整えます。

※ 次の記事を大変参考にさせていただきました。私だけではとても無理でした。

【簡易版:Androidのブラウザで実現するpython環境について】Androidで実現する機械学習(pytorch, scikit-learn)や実用的なプログラミング(jupyterlab, pandas, matplotlib, strearmlit)の環境構築について

Ubuntuという超有名なLinux環境も整えます。
こうしないとLinuxの標準的なフォルダー構造にならないため、膨大なLinuxの知見を生かせなくなります。

Ubuntuをインストール

どんどん入力します。

~$ pkg install proot
~$ pkg install proot-distro
~$ proot-distro install ubuntu
~$ proot-distro login ubuntu

ここで、コマンドプロンプト

素のTermux 
~$
ubuntu環境
root@localhost:~# 

に変わります。

ubuntu環境:設定(時刻など)

どんどん入力します。

root@localhost:~# apt update
root@localhost:~# apt upgrade -y
root@localhost:~# apt install locales -y
root@localhost:~# apt install vim -y

どこかのタイミングで

Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by
presenting a list of cities, representing the time zones in which they are located.

  1. Africa   3. Antarctica  5. Asia      7. Australia  9. Indian    11. Etc
  2. America  4. Arctic      6. Atlantic  8. Europe     10. Pacific

と聞かれますが、例えば私だと首都を東京にもつアジアの島国にいますので

  1. Asia

を選択し、その後は 78. Tokyo を選択します。 次に、

root@localhost:~# nano /etc/locale.gen

としてnanoというテキストエディタを起動し、(もちろん慣れている人はvimでもok) ja_JP.UTF-8コメントアウト(#)を外します。(下記画面) そしてctrl+Xして、保存してから終了してください。

さらに続きます。

root@localhost:~# locale-gen
root@localhost:~# update-locale LANG=ja_JP.UTF-8
root@localhost:~# apt install tzdata

これでubuntu環境を調えることができました。

●内部ストレージにアクセスできるようにします。

※ 次の記事を参考にさせていただきました。

AndroidにF-Droid版TermuxとPython3.10を再インストールした(2021年12月 - よちよちpython

root@localhost:~# termux-setup-storage

もしくはいったんexitして素のtermuxに戻って

~$ termux-setup-storage

と入力してください。
20~30秒くらい待たされます。
このコマンド実行時、スマホの画面の方に「ストレージ権限」を求められるのでアクセス許可を有効にします。

※要注意 Windows側の画面には表示されません。

特に表示はされないのですが、これで内部ストレージにアクセスできようになりました。
たとえばAndroidのファイル管理アプリで見えるフォルダは次の場所にあります。

/sdcard
(ubuntuにログインしていなときは ~/storage/でも可能)
試しに ls コマンドでこのフォルダの中を確認してみましょう。

root@localhost:~# ls /sdcard

表示されたはずです。
たとえば、スクリーンショット(電源ボタン+音量ダウンボタン)は /sdcard/Pictures/Screenshots/ にあります。

※ もしうまくいかないときは

ls: cannot open directory '/sdcard': Permission denied

としか表示されない(!!)ときは、exitして、再度loginしてみてください。
私も何度かやらないとダメでした。

●ちょっとひといき。(でも飛ばさないでください)

作業ばかりではつまらないですね。
termuxを使ってコマンド入力で写真を撮ってみましょう。
いったん、環境をubuntuから素のterxumに戻すために、exitします。

root@localhost:~/# exit

そして、スマホの各種デバイスを使えるよう、 termux-api をインストールします。

~$ pkg install termux-api

では写真をとってみましょう。
次のコマンドです。

~$ termux-camera-photo -c 0 /sdcard/DCIM/a.jpg

初めてだとスマホの画面の方に「カメラの使用権限」を求められるのでアクセス許可を有効にします。
スマホのフォトアプリか、下記コマンドでt確認して、写真が撮れていれば成功です。

~$ ls -la  /sdcard/DCIM/
total (あなたの環境に依存した数字)
-rw-rw---- 1 root everybody 1745485 Dec  3 15:47 a.jpg

スマホの機種によっては音声合成もいけるはずです。

~$  termux-tts-speak hello

私は次の機種で音声合成できました。 なお、マナーモードを解除しないと声はでませんよ。

AQUOS SH-M08
AQUOS SH-M15

Python環境のインストール

残念ながらpython使用環境として、前の記事などで紹介した便利なminicondaやspyderは、このTermuxでは使えません。

そこでJupyter lab という開発環境を整えます。(この紹介は次回となります。)

また、必要なライブラリをインストールするのですが、windows上よりかなり大変です。

がんばってください。

python仮想環境の作成

※ 次の記事を大変参考にさせていただきました。私だけではとても無理でした。

【簡易版:Androidのブラウザで実現するpython環境について】Androidで実現する機械学習(pytorch, scikit-learn)や実用的なプログラミング(jupyterlab, pandas, matplotlib, strearmlit)の環境構築について

まずは proot-distro login ubuntu と入力してubuntu環境に戻りましょう。

~$ proot-distro login ubuntu
root@localhost:~#

次のコマンドを次々と実行してください。

root@localhost:~# apt -y update
root@localhost:~# apt -y install --no-install-recommends make build-essential libssl-dev zlib1g-dev  libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
root@localhost:~# cd /tmp
root@localhost:~# curl https://pyenv.run | bash

※ もしここでcurlを進められないときは、次のコマンド実行

root@localhost:~# sudo apt-get remove ca-certificates
root@localhost:~# sudo apt-get install ca-certificates

さらにつぎを実行します。(下記を複数行コピペして実行できよう、"root@localhost:~# "を省略しますね)

echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bashrc
echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.bashrc
echo '    export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.bashrc
echo '    eval "$(pyenv init -)"' >> ~/.bashrc
echo '    eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'fi' >> ~/.bashrc
exec $SHELL -l

いよいよpython v.3.10.2をインストールします。

ubuntu上のrootでやるとすごく時間がかかる。30分くらい??

root@localhost:~# pyenv install 3.10.2

python仮想環境のインストール

root@localhost:~# pyenv shell 3.10.2
root@localhost:~# python -m venv ~/py3102

python仮想環境を起動します

root@localhost:~# source ~/py3102/bin/activate

すると、プロンプトが

(py3102) root@localhost:~#

に変わります。

起動を簡単にするために、エイリアスを作成します。 次のコマンドで nanoを使って .bashrc を開きます
(.bashrc: Linuxシステムにてbashシェルが起動する際に読み込まれるスクリプトです)

(py3102) root@localhost:~# nano ~/.bashrc

最終行に次のコマンドを追記します。

alias py3102='source ~/py3102/bin/activate'

次のコマンドで .bashrc をシステムに再読込します。

$ source ~/.bashrc

いったん、仮想環境py3102 から抜けてしまったので、次のコマンド

root@localhost:~# py3102

で仮想環境に入りましょう。今後はこのコマンドだけで仮想環境に入れます。

pipパッケージのインストール (その1)

pip をアップデートし、
setuptools
numpy
pandas
matplotlib scipy
scikit-learn
をインストールします。

(py3102) root@localhost:~# python -m pip install -U pip
(py3102) root@localhost:~# python -m pip install setuptools numpy pandas matplotlib scipy scikit-learn

pipパッケージのインストール (その2)

Pillowのインストールです。

(次のURLを参考にしました。
Install Python Imaging Library (PIL) on Termux · GitHub )

次はもしかすると不要かも。エラーが出ても無視してください。

(py3102) root@localhost:~# apt install python-is-python3
(py3102) root@localhost:~# apt install python make wget termux-exec clang libjpeg-turbo freetype -y

そして

(py3102) root@localhost:~# env INCLUDE="$PREFIX/include" LDFLAGS=" -lm" pip install Pillow

pipパッケージのインストール (その3)

機械学習ソフトウェアライブラリ、Tensorflow、その軽量版のTensorflow liteのインストールです。

(py3102) root@localhost:~# python3 -m pip install tflite-runtime

pipパッケージのインストール (その4)

画像処理ライブラリ、opencvのインストールです。

(py3102) root@localhost:~# python -m pip install opencv-python

※もしうまく行かない場合は、次のも必要

apt-get install -y libgl1-mesa-dev

もしくは

apt -y install libopencv-dev

次回でなんとか、機械学習予測モデルを実行して、「スプラの敵のスペシャルを声でお知らせ」までたどり着きたいと思います。
もう少しお付き合いください。