風景画像による天気予報の可視化
(github.com/lds133)- Weather as Landscapeは、数字中心の天気ダッシュボードの代わりに、風景画像の中に24時間予報と現在の状態を盛り込み、より自然に確認できるようにしたプロジェクト
- 画像の横軸は現在時点から翌日までの24時間タイムラインで、家が現在位置を示し、未来の天気ほど右側に配置される
- 風景要素は、日の出・日の入り、正午・深夜、風向と風速、気温変化、最高・最低気温、雲、降水、現在の気温・気圧、誕生日・祝日といった天気以外のイベントまでエンコードする
- 実装はPython 3.9、Pillow、OpenWeatherのデータを使用し、画像は296x128のE-Inkディスプレイ向けに設計されている
- ESP32と2.9インチE-Inkモジュールはインターネットから画像を取得して15分ごとに更新する構成で、画像生成コードをESP32のMicroPythonに合わせられるかはまだ不確実
数字ではなく風景で見る天気
- 従来の天気ステーションはセンサー値を数値データとして表示することが多く、ユーザーが特定のパラメータを探し、解釈し、可視化するには手間がかかる
- 風景画像は人の目に自然で、風景要素を見る体験はストレスを減らし、最小限の労力でより快適な視覚体験を提供する
- Weather as Landscapeは、数字に頼らない、または最小限に抑えながら、天気情報を風景画像の中にエンコードする方法を示す
エンコード方式
- 風景は森の中の小さな家を中心に構成される
- 画像の横軸は24時間タイムライン
- 左側の家は現在時点を示す
- 右へ行くほど翌日の条件に近づく
- 現在から遠いイベントほど画像の右側に位置する
- 画像の縦軸に分布するさまざまな風景要素は、天気イベントと条件を表す
風景の中に盛り込める情報
- 時間の把握を助ける時間マーカー
- 日の出と日の入り
- 正午と深夜
- 天気予報情報
- 風向と風速
- 気温変化
- 最高・最低気温
- 雲量
- 降水
- 現在の天気状態
- 気温
- 気圧
- 天気ではないイベント
- 誕生日
- 祝日
視覚要素と意味
- プロジェクトは複数のイベント画像を組み合わせて風景を構成する
- 太陽: 日の出
- 月: 日の入り
- 雲: 雲量
- 家: 現在時刻の位置
- 花: 深夜と正午
- 木のスプライト: 南風、東風、西風、北風
- 雨と雪: 降水の種類
- 気圧アイコン: 高気圧、通常気圧、低気圧
- 祝日アイコン: Non-weather event、たとえば誰かの誕生日
- 木が大きいほど予想される風速が強い
- 森に異なる種類の木が混ざっている場合は、中間方向の風を意味する
例の解釈
- 1つ目の例は正午ごろで、空は晴れており、少し雲が出る見込み
- 夜の間に適度な北風が発生する
- 現在の気温は上昇中だが、日没後には下がり始める
- 最低気温は日の出前に達する
- この期間に風は北東へ変わる見込み
- 2つ目の例は日の出の最中で、暑く晴れた日と弱い南東風を示している
- 気温は日没後も高いまま維持される
- 風は東へ変わり、夕方の間ずっとさらに強くなる
- 3つ目の例は昼夜を通して寒く雨の天気
- 南風は夜の間に北西風へ変わる
- 翌日に誰かの誕生日があることを知らせる
実行と生成画像
- Linux環境の準備
./makevenv.shsource .venv/bin/activate
- Windows環境の準備
makevenv.bat.venv/Scripts/Activate
- 画像生成テスト
secrets.pyのOWM_KEY変数にOpenWeather APIキーを入れる必要がある- 必要であれば、
secrets.pyの座標をユーザーの位置に変更できる python run_test.pyを実行した後、生成画像はtmpフォルダで確認する
- サーバー実行
python run_server.py- ブラウザでサーバーページにアクセスすると、生成された画像数を確認できる
E-Inkとスマートフォンでの利用
- ハードウェア構成にはESP32 development boardと2.9inch E-Ink display moduleが含まれる
- 現在のE-Ink構成はインターネットから取得した画像を表示し、15分ごとに更新する
- 画像生成コードをESP32のMicroPythonで使えるように変更できるかは、現時点では不確実
- 詳細情報は
esp32/README.mdにある - テスト中には複数の画像が生成される
- 白黒画像はE-Inkモジュール用
- カラー画像はスマートフォンのホーム画面に配置できる
- AndroidではWeb Image Widgetを使って、インターネット画像を表示するウィジェットを作成できる
- リポジトリのサーバースクリプトを実行する
- 生成された画像のいずれかを指すウィジェットを追加する
1件のコメント
Hacker News のコメント
数年前、天気に応じて絵を選ぶプロジェクトをいじっていた: https://bazzargh.github.io/weather/
manual filterに切り替えてフィルターをいくつか設定してみると、タグ付けされた画像がどう出てくるか見られる。正確な天気予報というより、フォトフレームやデスクトップ壁紙で雰囲気を出す用途を想定していた画像タグはすべてここにある: https://github.com/bazzargh/bazzargh.github.io/blob/master/w...
ほとんど手作業で付けていて、まず気に入った絵を選んでからタグの穴を見て、それを埋める絵を探すというやり方だった
面白い。古いフォトフレームを OpenAI の DALL-E 画像生成器につないで、現在の天気データをもとに画像を作らせるようにしていて、数時間ごとに更新される
今表示している画像はこれ: https://ibb.co/8K5jZ3B
README の説明に加えて、このプロジェクトの具体的な使い道を共有したい。机の上に画面を置いて使っているが、一日のあいだ画像がずっと変わっていくことを見るのが意外に楽しい
たとえば雨が右側から現れて数時間後に消えたり、木が成長し始めたりする。その間、太陽と月は着実に前へ動き、昼夜の移り変わりを示す
もう一つ面白いのは、この構成が二進時計のように見えること。人々は何か意味があると察するがすぐには解釈できず、シンプルなデザインのおかげで自分で読み解こうとする
本当に面白い。家の近くの緑地を定期的に撮るカメラを設置してみたくなる
画像と一緒に雲量データと日付スタンプを保存し、現在の予報に最も近い画像をノートPCの壁紙として表示できたらよさそう。このプロジェクトほど多くの情報は伝えられなくても、かなり満足できるものになりそう
かわいいし、少し調整すれば実際に使いそう。解釈のしかたをもっと良くできる余地がある: 木が曲がる方向で風向を表し、北風・南風は創造的に処理するとして、下に曲がるのか外側に曲がるのか、曲がり具合や木の大きさ・密度で風の強さを表せばよい
日の出・日の入りは太陽と月ではなく、文字どおり地平線上の太陽で表現し、夜空は昼とは違う陰影にするとよさそう。起点を「現在時刻」ではなく朝や真夜中のような固定時点に置き、家の位置で「今」を示すほうがよく見える
それでも空には、誕生日用のコウノトリやホリデーシーズンのサンタのそりのような楽しい要素を入れる余地が残っている。もっと大きくカラーの E-Ink 画面が安くなるのを待っている
それに、等角投影のような視点を使えば風向を可視化する助けになるかもしれない
しばらく前から Android の壁紙で似たようなコンセプトを使っている[1]
実際に役立つ情報を伝えるアートワークというアイデアが好き
[1]: https://play.google.com/store/apps/details?id=kaka.wallpaper...
Yr.no アプリのメイン画面を思い出す。一日のいくつかの時点で窓の外がどう見えるかを絵のように見せて、天気を可視化している
アニメーションを見るだけでも、降水量と降水形態、風をかなり簡単に感覚で把握できる。ただし一度に見られるのは一瞬だけなので、一日を見るには横にスクロールする必要があり、気温は数字だけで表示される
https://apps.apple.com/no/app/yr/id490989206?l=nb
https://play.google.com/store/apps/details?id=no.nrk.yr&pcam...
素晴らしい仕事。ただ、ユーザー体験に焦点を当てるなら、天気を伝える体験としては windy.com が最も良い
たとえば「午後8時ににわか雨の確率30%」のような予報にはほとんど関心がなく、雲や雨がどのような流れで動くかのほうが重要だ。そうすれば、日差しが最も良い方向へ車を走らせるかどうかなどを判断できる
windy.com と似た方式のところがほかにもあるのか気になる。これまでの体験は素晴らしく、ダークパターンもほとんどないが、この領域にもっと競争があるといい
タイムスタンプは Google ルート案内をもとに作るので、2024年時点で可能な限り正確な予報に近いものとして見られる
「午後8時ににわか雨の確率30%」のような予報がいまひとつだという感覚はわかるが、中期予報は今のところおおむねその程度だ
Android または iOS: https://weatherthetrip.com/download
ユーザー体験の面では windy と同じではないが、モデルの不確実性やモデル間の一致度を伝える点ではかなりうまい
https://zoom.earth/
興味深いアイデアだが、画像の意味が奇妙にずれている部分がある。特に夜空は明るくてはいけないし、日の出のときに太陽が高く昇っていてはいけない
「空のどこかに太陽が見えれば日の出を意味する」とか「夜は暗さではなく何か別のもので示される」といった直感に反するルールを学ばなければならないなら、核心的な目的には失敗しているように思う
多くの天気アプリは左から右へ続くタイムラインを置き、日の出と日の入りを直感的なアイコンで表示する。Windy.com のタイムライン表示は、空の状態、昼/夜、月相、気温、降水、風速と風向を簡潔な左右のタイムラインにうまく収めている
天気予報をシュールな画像に変える LLM+画像生成AI を当然予想していたが、実際には人間がデザイン上の判断を下し、慎重に選んだ視覚要素へデータを決定的にマッピングしたシステムで、むしろうれしい驚きだった。妙に新鮮だ