LoginSignup
0
2

More than 5 years have passed since last update.

bash (Matplotlib ) + eog > リアルタイム画像表示処理

Last updated at Posted at 2018-02-14
動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)
ADDA v.1.3b6

前置き

  • PyQtを知らない
  • signal/slot/event/etcを学習するコストをかけてまでしたいことは今はない
  • PyQtとPySideはライセンス的にどちらを選択するか
  • UDPでデータを受信して画像表示したいだけ

学習コストが少なく、自分の希望機能を実装する方法はないか。
以下を思いついた。

使用機能

画像生成部

Quaternion(もしくは三次元の加速度(ax,ay,az))をUDPで受信し、グラフ画像として出力する。
ppm形式出力は簡単。他の形式もPythonのライブラリを使って適宜実装する。

画像表示部

Ubuntu(またはCentOS)においてはeogという画像表示プログラムが使用できる。

code

画像生成部

とりあえずImageMagickを使った仮コードは以下の通り。
参考: ImageMagick > 画像をずらす (+ 画像サイズを拡大) > convert green.png -page +0+20 -background none -extent 40x40 -flatten green_shift.png

image.pngというファイルでred, green, blueの色が5秒おきに切替わるというだけの実装。

change_image_180214_exec
#!/usr/bin/env bash

for idx in $(seq 1 100)
do
    for color in red green blue
        do
            echo $color
            convert -size 100x100 xc:$color image.png
            sleep 5
        done
done

画像表示

以下を実行する。

$eog image.png

結果

blue.png

green.png

red.png

使えそう。
100msec程度の画像変更も問題なさそう。

MemoryEnhancer用の入力UIであるESP8266+MPU-9250の調整用のソフトはこれでできるだろうか。

これは「UIとロジックの分離」の1例だろうか。

画像生成 > Matplotlib

bashの代わりにMatplotlibを使ってみる。
参考: Jupyter / matplotlib > 2Dイメージをファイル保存する > plt.savefig("foo.png") / ただし、plt.show()があると保存に失敗する模様

saveToFile_180215.ipynb
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import time

for loop in range(100):
    data_1d = np.random.rand(22500)
    print(data_1d)
    data_2d = np.reshape(data_1d, (150,150))

    plt.imshow(data_2d, extent=(0,150,0,150),cmap=cm.gist_rainbow)
    #plt.show()

    plt.savefig("foo.png")

    time.sleep(1)

以下のような画像が1秒おきに更新されるようになった。

qiita.png

Matplotlibのplt.show()を繰り返し実行すると、画像のリアルタイム表示ではなく、画像が下に延々と追加されるようになる(下図)。
matplotlibでリアルタイム描画に記載のplt.pause(.01)を使っても下に延々と追加される。
このあたりも試したが結果は同じ。

この問題もあって、Matplotlibを使ったリアルタイム描画更新はあきらめていたが、上記の方法でリアルタイムの更新ができることが分かった。

qiita.png

link

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2