第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カード は使うと便利。

android スマホ ※ネットワークは必要ありません

HDMIキャプチャー機器

  動作確認済み エレコムのAD-HDMICAPBK

HDMIケーブル, 3本

Nintendo Switch本体

・ドック

HDMI分配器 (HDMIスプリッターとも言います。)

 注意! 「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カメラ」のPlayストア紹介画面

このとき、スマホとキャプチャー機器の組み合わせによって画像サイズが変わってしまいます。
そこで画像取り込みパラメーターを手動で修正します。
本コードには ダイアログボックスに入力 とか、 自動 とか、 おしゃれな 機能はありません。
コード内の数値を書き換えていきます。
 
まず、キャプチャー機器をUSB端子に接続し、次に「USBカメラ」を起動しましょう。
キャプチャー画像は見られるでしょうか?
なんか、スマホにSwitchの画面が映って、おお~って感じですよね。

スマホに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に私が作成したファイルをアップロードしました。

github.com

このうち、次のファイルを任意の場所 (たとえば作業ディレクトリ ~/workspace ) にコピーしてください。

  • buki-classification.tflite
    学習データです。

  • buki-spe-list.csv
    ブキとスペシャルの対応表です。

  • 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 ) を開きます。
具体的には、 画面左のフォルダのアイコンをクリック、次に、 ファイル名をダブルクリック です。

スマホ上でJupyter labが起動

vi) notebookをクリックします。

notebookをクリック

vii) %run TFlite-predictV0-in-phone.py と入力して、実行します。
なお、この画面のように縦画面で使うときは、viewのShow Left Sidebarをオフにすると開いたファイルが大きく表示にできます。

%run (コード名) と入力、そして実行!!

キャプチャー機器からの画像取り込み

pythonコード単体ではキャプチャー機器から画像を取り込めないので、上述の「USBカメラ」アプリと連携します。
 
・ 「USBカメラ」起動
Termuxやブラウザは終了しないでそのままにして、「USBカメラ」を起動してください。
 
・ 画像取り込み
上記の「コード内の画像取り込みパラメーター修正」と同じ状態で、画像を取り込みます。(私は 全画面表示 にしました。)
画面上に敵・味方のブキ一覧が表示されたら、電源ボタン + 音量ダウンボタン などでスクリーンショットを撮ってください。

5~10秒くらいで「スプラの敵のスペシャルを声でお知らせ」

5~10秒くらいで「スプラの敵のスペシャルを声でお知らせ」してくれるはずです !!
いかがでしょうか?
 
「コード内の画像取り込みパラメーター修正」とか、うっかり全画面表示を解除したり、ミスしなければ、Windows上で実行したときと同じような正確さで、お知らせしてくれたはずです。

感想

おつかれさまでした!!
 
初心者の方は仕組みは分からないにしても、機械学習を使った画像処理のphthonプログラムをスマホで実行できたわけです。

しかも、スマホでのLinux, その下でのubuntu, さらにその下でのpython, またまたその下でのTensorflow, OpenCVを使える環境もゲットできました !!
なお、今回までに紹介した方法ではTensorflowはlite版しか使えなかったので予測だけで、学習はできませんでした。 しかし、無料のTermux (そう、今回までは全て無料でできるんです) ではなく、2000円弱のPydroid3を使えば、スマホでもちゃんと学習も実行できます。 これもいつか紹介しますね。(リクエストがあれば優先度を上げます)

さらにいうと、Windows上で動いていたコードをスマホで動かせたのは大感激です !!
たしかに、前回のような何カ所もの修正が必要でした。
それでも、算数がわりとめんどうで私としては一番いじりたくない、画像のカットや変形のコードについて、修正がゼロだったのは大きかったです。

ほかの活用法もどんどん考えたいと思います。