2 ポイント 投稿者 GN⁺ 2024-06-09 | 1件のコメント | WhatsAppで共有
  • Sol Mate e-Paper Displayは、指定した場所の現在の天気と光の条件を反映したイラストを生成し、Raspberry Piに接続されたWaveshare e-Paper画面に表示するプロジェクト
  • スクリプトは場所の入力を受け取って天気を取得し、gpt-5-miniが作成したプロンプトとgpt-image-1-miniを使って高品質な画像をレンダリングするため、OpenAI APIトークンが必要
  • 実在する場所だけでなく、友人のいる場所や架空の場所も入力でき、架空の場所ではGPTが地球上で最も近い場所の緯度・経度を天気サービスに渡す
  • ハードウェアはRaspberry Pi 5とWaveshare e-Paper 7.3" displayを前提としており、別サイズのディスプレイを使うにはコードの修正が必要
  • control.pyは画面表示、ローカルプレビュー、画面クリアをサポートしており、同じ画像を長時間表示しないようにというWaveshareの推奨と、APIコストが増える可能性の両方を考慮する必要がある

Sol Mate e-Paper Displayがすること

  • Sol Mate e-Paper Displayは、Raspberry PiとWaveshare e-Paperディスプレイで天気レポート画像を生成・表示するコード集
  • もともとは☀️ Sol Mate GPTとして作られ、その後e-Paperディスプレイでどう見えるかを試したくなってこのプロジェクトが生まれた
  • 入力する場所は実在の場所、友人のいる場所、架空の場所まで対応
    • 雨が降っていれば、絵の中に傘を差した人が登場するように、現在の天気がイラストに反映される
    • 架空の場所を入力すると、GPTが判断した地球上で最も近い場所の緯度・経度を天気サービスに渡す

画像生成の仕組み

  • イラストはgpt-image-1-miniモデルでレンダリングされる
  • 画像プロンプトはgpt-5-miniが生成し、高品質な画像設定を使う
  • この生成フローのため、実行にはOpenAI APIトークンが必要

必要なハードウェア

実行と使い方

  • プロジェクトはRaspberry Pi上での実行を前提としている
  • Python環境の管理にはuvを使用
    • uvが仮想環境を管理するため、手動で有効化する必要はない
uv sync
  • macOSやLinuxではない開発マシンでは、Raspberry Pi用のハードウェアライブラリはデフォルトでスキップされる
  • OPENAI_API_KEY環境変数を設定する必要がある
    • 現在の作業ディレクトリにある.envファイルから環境変数を読み取れる
OPENAI_API_KEY=... uv run python control.py show Barcelona
  • ローカルですばやく確認したい場合は、iTerm2の画像表示を使うpreviewコマンドを実行できる
    • デフォルトではシステムの一時ディレクトリにsol-mate-preview-<timestamp>.pngとして保存される
OPENAI_API_KEY=... uv run python control.py preview "Barcelona"

画面管理と自動更新

  • Waveshareは、同じ画像をディスプレイに長時間表示し続けないよう推奨_Manual#Precautions)している
  • 画面を消去するにはclearコマンドを使う
uv run python control.py clear
  • 設定例では、cronで1日2回画像を更新し、深夜に画面をクリアする
    • パスは各自のインストール環境に合わせて修正する必要がある
    • 定期実行は無視できないコストになる可能性がある
0 8 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 18 * * * cd ~/src/sol-mate-eink && OPENAI_API_KEY=... uv run python control.py show Barcelona
0 2 * * * cd ~/src/sol-mate-eink && uv run python control.py clear

バックエンドと参考資料

1件のコメント

 
GN⁺ 2024-06-09
Hacker Newsのコメント
  • 似たようなプロジェクトで Inkplate 6Color を使っている
    ESP32コントローラーが内蔵されているのでPiは不要で、バッテリーだけでも動かせる
    ディープスリープ/ウェイクアップのスケジュールをうまく組めば、1回の充電で数週間は持つ
    いちばん気に入っているのはオフィスのドアに掛けてある赤い On Airサインで、会議や録画のときにMacからショートカットを実行すると状態が自動更新され、デバイスがミュートされる
    天気表示、ニュース、Google Calendar向けのオープンソース例もある
    https://soldered.com/product/inkplate-6color-color-e-paper-b...
    安価な電子ペーパーのプロジェクトは本当に楽しくて実用的

    • 似たようなプロジェクトを作った
      Pi Zeroにつないだ電子ペーパーディスプレイが、今後3時間以内に雨が降るかどうかを Yes/No だけで表示する
      改めて考えると、7色ディスプレイまでは必要ないかもしれない
      使っているディスプレイは https://shop.pimoroni.com/products/inky-impression-7-3?varia... で、こちらのほうが安そう
    • 使い方が賢くてかっこいい
      こういう画面を家のあちこちに貼りたくなるくらい楽しい
    • 必要な条件を全部満たしているものだったので驚いたし、価格にもまた驚いた
  • 独立に、1週間前に 同じディスプレイ でほとんど同じものを作った
    https://imgz.org/iBLADkCU.jpg
    特定の場所の現在の天気と時刻を取得し、AIがその場所を含む写真を生成して表示する額縁
    どうして自分たちが独立にここまで同じところへたどり着いたのか不思議
    おそらくいちばん分かりやすい用途だったのだと思う

    • アイデアが そこら中にある ケース
      新しい起業家にとって、自分のアイデアが唯一無二ではないことを示す良い例で、実際に唯一のアイデアなどほとんどない
      重要なのは実行力
      電子ペーパー天気ボード界のUberとLyftのような感じで、HNでも似たものをさらにタグ付けしておいたことがある
      時間さえあれば自分も1つ作るつもりで、どれもESP32開発と自由・オープンソースのホームオートメーションに刺激を与えてくれる
  • ハードウェアプロジェクトやアイデアは素晴らしいが、常時オンのデバイス にOpenAI APIを使うのは絶対に手を出したくない
    遊びで作る機会があれば、OpenStreetMapとLAN上でホストするStable Diffusionを使う版を作るかもしれず、その意味でブックマークする価値はある

    • OpenAI API と常時オンのデバイスの組み合わせがなぜ問題なのか気になる
  • 似たようなプロジェクトを見て、同じディスプレイを2つ買った

    • "A WiFi color eInk picture frame" https://news.ycombinator.com/item?id=35689706
    • "Color E-Ink Display Photo Frame Pranks [Mom]" https://news.ycombinator.com/item?id=26977747
      もともとはこの2つの例のようにカラー写真ディスプレイにする予定だったが、この応用もよさそう
    • 2つ目の記事には画面が切り替わる最中の 顕微鏡クローズアップ もあって良い
      ハックがうまくいくことを願っているし、近いうちに作ったプロジェクトをここで見られるとうれしい
  • 画像ではBarcelonaが 26°Cと2°C と表示されている
    Barcelonaには何度か行ったことがあるが、1日のうちにその両方の気温を記録するのは想像しにくい
    天気データが信頼できるのか、それとも全部ハルシネーションでアニメーションだけを楽しめばいいのか気になる
    あるいは自分がBarcelonaの天気を思ったほど分かっておらず、最高26度・最低2度があり得るのかもしれない

    • これは Dall-Eが文字をきれいに書けなかった ケース
      2°Cは26°Cから生まれたハルシネーションにすぎない
      趣味プロジェクトなので、従来の方法でテキストをレンダリングするよりも、毎回テキストが独特に見え、たいていはよりアーティスティックに見えることを優先した
      ただし本格的な製品にするなら、画像生成モデルはこの用途にはまだ十分ではない
  • 「同じ画像をディスプレイに長時間残さないでください」という理由が気になる
    カラー電子ペーパー 特有の問題なのか?

    • Waveshareの推奨は「少なくとも24時間に1回はリフレッシュ」[1]
      実際にはそれほど大きな問題ではなさそうだが、ピクセルが長時間アクティブな状態だと固着するリスクがあるのかもしれない
      [1]: https://www.waveshare.com/wiki/7.3inch_e-Paper_HAT_(F)_Manua...
    • 焼き付きのせいなのか、それとも色あせのせいなのか気になる
  • 一般的な白黒電子ペーパーと違って、同じ画像を長時間置かない という注意が必要になる表示方式の違いがあるのか気になる
    記憶が正しければ、標準的な白黒電子ペーパーディスプレイには焼き付きはなかった

  • こういうプロジェクトで、ディスプレイ駆動用として Raspberry Pi のような小型で低消費電力のコンピューターをいつも指定して使うのはなぜなのか気になる
    Debian GNU/Linux が動く普通のコンピューターはすでにたくさんある
    そうしたコンピューターの一つでこのコードを使って、普通の USB ケーブルで電子ペーパーディスプレイを駆動したいなら、できるのでは?
    Raspberry Pi みたいなものを必ず使わなければならない理由はなさそう

    • Raspberry Pi のような小型コンピューターは、この小さな画面が使う SPI のような低レベル周辺機器や GPIO にアクセスしやすい
      大きなコンピューターでも、OS からそうした周辺機器を使えるなら同じように使える
      こういう小型コンピューターが普及する前は、パラレルポートと小さなプログラムで同じ低レベル信号を使い、周辺機器と直接通信できていた
    • まったくその必要はない
      Raspberry Pi はブートストラップ用のドキュメントやコードが多いので、Linux を少し触ったことがある人が起動してパッケージを入れ、何かをするには便利
      時間と知識があれば、ごく小さなマイクロコントローラーでも可能
      ディスプレイ自体には、たまに変わった電源電圧が必要になること以外、魔法のようなものはない
      よくある問題は、こうしたディスプレイが USB で直接通信しないこと
      ピクセルを設定するには SPI やパラレルのデジタルインターフェースを受けるため、中間インターフェースと画面を描画するソフトウェアが必要になる
      だから人々はたいてい Raspberry Pi をつなぎ、より一般的なプロトコルでそこに話しかける
    • 安くて、バッテリーで長時間動くから
      このディスプレイ一つを動かすために普通のコンピューターをずっと起動しておくのは非効率
  • 優れたプロジェクトはいつもそうだが、誰かがカスタマイズへ進めるようにしてくれる
    ハードウェアの推奨だけでなく、参考として epaper.py[1] を見るだけでもよい
    [1]: https://github.com/blixt/sol-mate-eink/blob/main/epaper.py

  • 天気を取得するのに、なぜ AI を使うのかよく分からない
    直接呼び出せる無料の天気 API は何十個もある

    • 無料 API ではやりにくいことをいくつか AI にやらせている
      地元で使われる口語的な地名を正確な緯度・経度に変換することは、ある程度やってくれる API もあるだろうが、GPT ほど正確な無料 API はよく知らない
      それに「Hogwarts」や「Tatooine」と入力すると、AI のおかげでその場所の天気も律儀に作ってくれる[1]
      最も重要なのは、実際の天候条件や太陽・月などを反映して画像を生成するための Dall-E 用プロンプトを書いてくれること
      [1]: https://x.com/blixt/status/1724099967361462714
    • 履歴書に書くにはとても良い一行になる
    • ただ窓の外を見てもいい