第6回: androidスマホだけで機械学習の予測モデルを使おう ! (4) 機械学習予測モデルの実行
この記事は移転しました。約2秒後に新記事へ移動します。移動しない場合はココをクリックしてください。
しょくぶつ(^^)です。
では、こんな感じでコードを動かしていきます。
しかし、前回から中断したことがほとんどでしょう。 再開方法を示します。
途中でやめて再開するときは~Python仮想環境まで
パソコンをスリープさせたり、スマホ側を止めてしまうとパソコンとの接続が切れてしまいます。 そんなときは、次のコマンドで。
(1)スマホ側のTermuxを閉じているときは下記を実行。
・Termuxを開く
・Termux上で次のコマンドを打つ。
~$ ip -4 a inet 192.168.11.20/24
・Termux上で次のコマンドを打つ。
~$ sshd
(2) Powershell上からsshでTermuxと接続。
例: PS C:\Users\(ご自身の環境に依存)> ssh u0_a435@192.168.11.20 -p 8022
(3) ubuntu環境に入り、更にpython仮想環境に入る。
~$ proot-distro login ubuntu root@localhost:~# py3102
無事に下記のように再開できたでしょうか?
(py3102) root@localhost:~#
1. 必要な機器
必要な機材は次の通りです。
そのほか、windows PC と SDカード は使うと便利。
・HDMIキャプチャー機器
動作確認済み エレコムのAD-HDMICAPBK
・HDMIケーブル, 3本
・ドック
注意! 「HDMI切替機」ではありません。
私はグリーンハウスのGH-HSPG2-BKを使いました。2024年1月現在だと2,100円くらいでヨドバシで買えます。
図にするとこんな感じです。
コードをスマホにコピーする方法
コードをスマホにコピーする方法はいろいろあるのですが、次の「スマホをストレージとしてwindowsと接続」する方法が一番お手軽です。
(1)あらかじめwindowsにコードをダウンロード
(2)スマホをストレージとして接続
(3)Windows PCから、スマホのSDカード側の、たとえば次の場所へ、コードなどを移動。
SDカード > Pictures > Screenshots
(4) Termux上で作業ディレクトリを作成 ※ 初回だけ
(py3102) root@localhost:~# cd ~ (py3102) root@localhost:~# mkdir workspace
(5)Termux上で、cpコマンドを使って作業ディレクトリにコードをコピー
例: "testcode.py"というファイルの場合
(py3102) root@localhost:~# cp /sdcard/Pictures/Screenshots/testcode.py ~/workspace
コード内の画像取り込みパラメーター修正
画像取り込みはpython側では実現できなかったので「USBカメラ」アプリで行います。(インフィニテグラ(株)という信頼できるカメラ技術の会社の無料アプリです。)
このとき、スマホとキャプチャー機器の組み合わせによって画像サイズが変わってしまいます。
そこで画像取り込みパラメーターを手動で修正します。
本コードには ダイアログボックスに入力 とか、 自動 とか、 おしゃれな 機能はありません。
コード内の数値を書き換えていきます。
まず、キャプチャー機器をUSB端子に接続し、次に「USBカメラ」を起動しましょう。
キャプチャー画像は見られるでしょうか?
なんか、スマホにSwitchの画面が映って、おお~って感じですよね。
次はお好み次第ですが、私は 全画面表示 にしました。
そうしたら、電源ボタン + 音量ダウンボタン などでスクリーンショットを撮ってください。
スクリーンショットは /sdcard/Pictures/Screenshots/ に保存されるので、上記の「コードをスマホにコピーする方法」を参考にして、スクリーンショットをパソコン側にコピーしてください。
そして、スクリーンショット自体の画像サイズと、その画像内のキャプチャー画面のサイズを、パソコンなどで調べて下さい。
たとえば「ペイント」で開いて、左下に表示されるカーソル位置を使います。
そしてコード内の
# # # # # #cap_dev_no = 1 cap_W = 1920 # キャプチャー画像の横幅 cap_H = 1080 # キャプチャー画像の縦幅 cap_Left = 215 # キャプチャー画像の横の原点。 cap_Right = cap_Left + 1920 cap_Top = 0 #キャプチャー画像の縦の原点 cap_Bottom = 1080 # # # # #
6個の変数、cap_W, cap_H, cap_Left, cap_Right, cap_Top,cap_Bottomを修正してください。
コードを動かす方法
いよいよコードを動かしていきます。
コード等のファイルをスマホ上にコピー
次のURLに私が作成したファイルをアップロードしました。
このうち、次のファイルを任意の場所 (たとえば作業ディレクトリ ~/workspace ) にコピーしてください。
buki-classification.tflite
学習データです。TFlite-predictV0-in-phone.py
コードです。
pythonコードの実行 方法(1)
このあと方法(2)も紹介しますが、この方法(1)が一番簡単です。
この方法(1)は、次のコマンドを実行するだけです。
(py3102) root@localhost:~# python TFlite-predictV0-in-phone.py
pythonコードの実行 方法(2)
この方法(2)は、Jupyter labを用意して実行するものです。
※次のURLを参考にしました。
https://www.silhouette-designer.com/the-real-pocket-note-pc-cosmo-communicator-termux-jupyterlab/
i) Jupyterlab のインストール
(py3102) root@localhost:~# python -m pip install jupyterlab
ii) jupyterlabのパスワードを設定
(py3102) root@localhost:~# jupyter lab password
iii) jupyterlabを起動
(py3102) root@localhost:~# cd ~/workspace (py3102) root@localhost:~#jupyter lab --allow-root --ip=* --no-browser
iv) Androidのブラウザを起動
そして、Jupyter lab の起動画面にも表示されている
http://localhost:8888/lab
もしくは
http://127.0.0.1/lab
を入力して開きます。
するとjupyterlabの画面となります。
v) コード( TFlite-predictV0-in-phone.py ) を開きます。
具体的には、 画面左のフォルダのアイコンをクリック、次に、 ファイル名をダブルクリック です。
vi) notebookをクリックします。
vii) %run TFlite-predictV0-in-phone.py と入力して、実行します。
なお、この画面のように縦画面で使うときは、viewのShow Left Sidebarをオフにすると開いたファイルが大きく表示にできます。
キャプチャー機器からの画像取り込み
pythonコード単体ではキャプチャー機器から画像を取り込めないので、上述の「USBカメラ」アプリと連携します。
・ 「USBカメラ」起動
Termuxやブラウザは終了しないでそのままにして、「USBカメラ」を起動してください。
・ 画像取り込み
上記の「コード内の画像取り込みパラメーター修正」と同じ状態で、画像を取り込みます。(私は 全画面表示 にしました。)
画面上に敵・味方のブキ一覧が表示されたら、電源ボタン + 音量ダウンボタン などでスクリーンショットを撮ってください。
5~10秒くらいで「スプラの敵のスペシャルを声でお知らせ」
5~10秒くらいで「スプラの敵のスペシャルを声でお知らせ」してくれるはずです !!
いかがでしょうか?
「コード内の画像取り込みパラメーター修正」とか、うっかり全画面表示を解除したり、ミスしなければ、Windows上で実行したときと同じような正確さで、お知らせしてくれたはずです。
感想
おつかれさまでした!!
初心者の方は仕組みは分からないにしても、機械学習を使った画像処理のphthonプログラムをスマホで実行できたわけです。
しかも、スマホでのLinux, その下でのubuntu, さらにその下でのpython, またまたその下でのTensorflow, OpenCVを使える環境もゲットできました !!
なお、今回までに紹介した方法ではTensorflowはlite版しか使えなかったので予測だけで、学習はできませんでした。 しかし、無料のTermux (そう、今回までは全て無料でできるんです) ではなく、2000円弱のPydroid3を使えば、スマホでもちゃんと学習も実行できます。 これもいつか紹介しますね。(リクエストがあれば優先度を上げます)
さらにいうと、Windows上で動いていたコードをスマホで動かせたのは大感激です !!
たしかに、前回のような何カ所もの修正が必要でした。
それでも、算数がわりとめんどうで私としては一番いじりたくない、画像のカットや変形のコードについて、修正がゼロだったのは大きかったです。
ほかの活用法もどんどん考えたいと思います。