Raspberry Pi + Google Drive でクラウド対応フォトフレームを自作する【rclone + fbi + Python】

Image credit: Tomokatsu Yukishita

写真が趣味で、2003年からデジタル一眼を使い始めて今に至ります。気づけば総撮影枚数は388,524枚。これだけ撮り溜めた写真を、スライドショー形式でリビングに飾りたいと思っていました。

市販のデジタルフォトフレームでは解決できなかった問題

市販のフォトフレームは、SDカードやUSBメモリにデータを入れて表示する仕組みが主流です。7〜10インチのものが多く、Amazonのランキングでも選択肢は豊富にあります。

ただ、週1ペースで写真を撮り続ける身としては**「毎回SDカードに写真を入れ直す」運用が億劫**で、すぐに使わなくなりそうでした。

Google DriveとRaspberry Piを組み合わせたクラウド対応フォトフレームのシステム構成図。クラウドから写真を自動取得してスライドショー表示する仕組みを示している
クラウドから自動で写真を取得するフォトフレームのイメージ

Google Driveなどのクラウドストレージから自動で写真を取得して表示するフォトフレームが欲しかったのですが、市販品では見つからなかったため、自分で作ることにしました。

用意したもの

Raspberry Pi 4

常時通電するフォトフレーム用途には、消費電力が低く小型なRaspberry Piが適しています。

【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品
【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品
Amazonで見る

モバイルモニター

写真を表示するためのモニターです。FullHD・IPSパネルのモバイルモニターを選びました。市販のフォトフレームは視野角が狭いパネルが多いですが、パーツを自分で選べるのが自作の醍醐味です。モバイルモニターは電源が小型で設置の自由度も高いです。

モバイルモニター 15.6インチ タッチパネル モバイルディスプレイ
モバイルモニター 15.6インチ タッチパネル モバイルディスプレイ
Amazonで見る

microSDカード・電源

SanDisk 高耐久 ドライブレコーダー アクションカメラ対応 microSDHC 32GB
SanDisk 高耐久 ドライブレコーダー アクションカメラ対応 microSDHC 32GB
Amazonで見る
Miuzei Raspberry Pi 4 電源 USB-C 5.1V 3A スイッチ付き PSE認証
Miuzei Raspberry Pi 4 電源 USB-C 5.1V 3A スイッチ付き PSE認証
Amazonで見る

システム構成

OS:Raspberry Pi OS

Raspberry Pi OS をSDカードに書き込んで使います。フォトフレーム用途なのでデスクトップ環境は不要で、CLIのみの Lite 版でセットアップします。

画像表示:fbi

CLIから直接フレームバッファに画像を表示できる fbi を使います。以前はUbuntu上のGUIで動かすバージョンも作りましたが動作が不安定だったため、CLIベースの構成に切り替えました。

クラウドストレージとの連携:rclone

rclone を使ってGoogle Drive上の写真を定期的にダウンロードします。Google Drive以外にもDropbox・S3など70以上のクラウドサービスに対応しています。

rcloneで写真をダウンロード → fbiでスライドショー表示、という流れです。

セットアップ

Raspberry Pi OS のインストール

Raspberry Pi Imager を使ってSDカードにイメージを書き込みます。

Raspberry Pi ImagerでmicroSDカードにRaspberry Pi OSを書き込んでいる画面。OSとストレージを選択してWRITEボタンを押す操作画面
Raspberry Pi Imager でOSを書き込む

32bit・64bitどちらでも問題なく動作します。

fbi のインストール

sudo apt-get -y install fbi

パーミッションの付与

デフォルトではスーパーユーザー以外は fbi で画像を表示できません。pi ユーザーを video グループに追加します。

pi@raspi3-photo:~ $ ls -Fla /dev/fb0
crw-rw---- 1 root video 29, 0 Apr  7 10:33 /dev/fb0
sudo usermod -aG video pi

rclone のインストール

curl https://rclone.org/install.sh | sudo bash

インストール後、rclone config でGoogle Driveとの認証設定を行います。

SSH接続のみのヘッドレス環境では、rclone config 実行中にブラウザ認証用のURLが表示されます。そのURLをPC側のブラウザで開いてGoogleアカウントを認証してください。

スライドショープログラムの実装

アルゴリズム

以下の流れで動作します。

  1. rclone ls でクラウドストレージ上の指定フォルダの画像一覧を取得
  2. 一定数取得できた時点でランダムに画像のダウンロードを開始
  3. ダウンロードできた画像から順に fbi で表示
  4. バックグラウンドで次の画像を取得し続ける
  5. 指定時間が来たらランダムに次の画像へ切り替え
  6. 重み付きランダム選択で、表示済み画像の優先度を下げ偏りを防ぐ
  7. 週1回 rclone ls でデータベースをマージして新着写真を反映
  8. データベースはファイルではなくメモリ上に保持(マージ速度改善)

言語:Python

スライドショー制御スクリプトはPythonで実装しました。オブジェクト指向で設計し直した改良版では、起動から最初の画像表示までの時間を旧バージョン比1700%高速化しています。

Pythonの学習には 現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用(Udemy) が参考になりました。

ソースコード

作成したプログラムはGitHubで公開しています。

GitHub - yukishita/photoView4:クラウド対応スライドショープログラム

使い方

crontab に以下を追加して、起動時に自動実行します。

@reboot /home/pi/photoView4/photoView4.sh

デモンストレーション

改良版(v4)のデモ動画です。旧バージョンと比べて起動から表示までの時間が大幅に短縮されています。

旧バージョン(参考)

ファイルリストをすべて取得してから動作するため起動が遅い版です。

Tips:指定時刻にディスプレイの電源を切る

24時間表示し続けると電気代がかさむため、HDMI接続時は vcgencmd で電源スケジュールを設定できます。

0  0 * * * /usr/bin/vcgencmd display_power 0
30 6 * * * /usr/bin/vcgencmd display_power 1

上記の例では午前0時にOFF・午前6時30分にONとなります。人感センサーや照度センサーと組み合わせてさらに自動化することも可能です。

まとめ

構成要素役割
Raspberry Pi 4メインコンピューター(低消費電力・常時稼働)
モバイルモニターFullHD・IPS・高視野角で写真を高品質表示
fbiCLIからフレームバッファに直接画像を表示
rcloneGoogle Driveから写真を自動ダウンロード
Pythonスライドショー制御・重み付きランダム選択

Raspberry Pi 4を使いましたが、Raspberry Pi Zero 2 Wでも同様の構成で動作可能です。常時通電する用途なので、消費電力の小さい機種を選ぶとランニングコストを抑えられます。

Tomokatsu Yukishita (雪下 智且)
Tomokatsu Yukishita (雪下 智且)
Engineering Manager / 宅地建物取引士

組み込み開発とクラウド/AI技術をつなぐEngineering Manager。ミッションクリティカル領域で培った品質基準を、現代的な開発プロセスに接続しています。

関連項目