Solution
If your iterm can't show images, to solve it, write os.environ['TMUX'] = 'tmux'
before calling imgcat()
in your python script.
import os os.environ['TMUX'] = 'tmux' # insert this line imgcat(img)
概要
英語で調べても出てこなかったので、海外の方のために一応英語で書いたりしてます(これ以降は読まないと思うので、ここからは日本語で書きます)。
iterm上で画像を表示させるimgcat、便利だと思います。 また、imgcat には、Pythonで叩けるモジュール、『imgcat · PyPI』があります。 便利なため著者はよく、とりあえずDockerに入れています。
しかし、tmux 内だとおかしな挙動をしたり表示されなかったりとTwitterでよく書かれています。 これを解決する方法がどう調べても出てこなかったのですが、imgcat · PyPI の公式実装を読んだところ、解決したので共有します。
imgcat
imgcat (Python)の使い方は簡単です。imgcat を import
して画像を関数 imgcat()
に渡すだけです。
(1) Dockerfileとかに以下を追記します。
imgcat==0.5.0
(2) numpyで白塗りの画像を作成、表示
import numpy as np from imgcat import imgcat img = np.ones(shape=[128, 128, 3], dtype=np.uint8)*255 imgcat(img)
uint8
で処理されるため、画像のレンジに注意しましょう
tmux
tmux は幅広く使われており、とくに深層学習などの計算時間の必要なプログラムとは切り離せない関係だと思っています。
しかし、ペインなどの関係から imgcat との相性が悪く、画像が表示されないことがあります。
そのため、一度画像を plt.imsave()
などで保存してから vscode で確認したり、そもそも jupyter notebook で実験を行ったり…という別の方法で解決しがちです。
公式実装との関係
最初に書いたとおり、imgcat()
を呼ぶ前に os.environ['TMUX'] = 'tmux'
を指定すると解決します。
公式実装のこの辺を読んで解決しました。
デフォルトだと、os.environ
に tmux
が入っていないので、プログラム上で指定する必要があるということですね。(ターミナル上にバイナリとかで書き出したりする詳しい仕様・原理はよくわかってないです)
何か気づいたことがあったらTwitter等で気軽に教えて下さい。
備考・補足
ペインを切ったり、ずらしたりするとまた表示がおかしくなったりするので、それにも対処できるようにしたい。 (現状はペイン切りなしならtmux上で表示される、という応急対処)