M5Stack UnitV2 にサンプルアプリの認識結果をJSONで返すAPIを追加する

JSONを取得

M5Stack UnitV2のサンプルアプリは画像の認識結果をブラウザ画面上で表示し続けますが、常に値が変わり続けるのでコピーしようとしても、コピーしようとした瞬間に値が変わってしまうので実際に使おうとすると大変です。

ですので今回はUnitV2にサンプルアプリの認識結果をJSONで返すAPIを追加します。

追加するコード

UnitV2内の ~/payload/_server_core.py の下記のコードを追加してください。追加する場所は @app.route('/xxxxxxx') とパスと対応するメソッドが書かれている部分以降にしてください。私は600行目付近に追加しました。

1
2
3
4
5
6
7
8
9
10
11
12
@app.route('/result_json')
def result_json():
j = "None"
for num in range(50):
if pipe_result_rx_queue.qsize() != 0:
j = pipe_result_rx_queue.get()
pipe_result_rx_queue.task_done()
break
else:
time.sleep(0.01)
continue
return Response(j, mimetype='application/json')

なお改造したserver_core.pyはこちらにおいています、これをそのままコピーして使っても大丈夫です。

M5Stack UnitV2への適用方法

  1. PC => UnitV2へserver_core.pyをコピー

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # @PC UnitV2にsshでログイン
    $ ssh m5stack@unitv2.py

    # @UnitV2 /dev/nullのpermissionを変えないとscpできない
    $ sudo chmod 666 /dev/null

    # @PC PCからUnitV2へscpでファイルをもっていく
    # コピー先を/media/sdcardにしたのは~/だとm5stackユーザーが直で置けないため、m5stackユーザ用のディレクトリをどこかに作ってもいい
    $ scp <ファイルを置いたディレクトリ>/server_core.py m5stack@10.254.239.1:/media/sdcard/

    # @UnitV2 一応置き換える予定のserver_core.pyをリネームしておく
    $ sudo mv ~/payload/server_core.py ~/payload/_server_core.py

    # @UnitV2 server_core.pyを~/payload/にコピー
    $ sudo cp /media/sdcard/server_core.py ~/payload/

  2. M5Stack UnitV2を再起動する。USBを再接続でもいいと思いますが、私はsudo haltしてからUSBを抜き差ししています。

  3. M5Stack UnitV2が再起動したら ブラウザでhttp://10.254.239.1/ を表示します。

  4. “Face Recognition”などのモードに変更します。

  5. http://10.254.239.1/result_json を叩くとJSONが取得できます。

コピーするのがめんどくさい場合は、sshでUnitV2にログインしてviを使って当該箇所を書き換えてもOKです。
書き換えたら再起動するのを忘れないでください。

これでJSONが好きなタイミングで取得できます。