Raspberry Pi でクラウド対応フォトフレーム制作

Raspberry Pi
この記事は約6分で読めます。

イントロダクション

私は写真を撮るのが好きです。
2003年あたりからデジタル一眼を購入して今まで撮影に勤しんできました。

そして気づけば総撮影枚数が 388,524 枚結構な枚数を撮影してきました。

そのため撮影したものを鑑賞する環境が兼ねてから欲しいと思っており、スライドショー形式で表示されるフォトフレームが欲しいと思っていました。

市販品もあるが

市販されているフォトフレームといえば、SDカードやUSBメモリなどにデータを入れてそれを表示するというもの。
画面サイズは7〜10インチ程度のものが多いようです。

Amazon.co.jp 売れ筋ランキング: デジタルフォトフレーム の中で最も人気のある商品です
Amazon.co.jp 売れ筋ランキング: デジタルフォトフレーム の中で最も人気のある商品です

私は撮影頻度は週1程度なのですが、一般的なフォトフレームを使った場合、データを入れるのが面倒臭い。と思ってしまいます。

どうせならクラウド型のフォトフレームが欲しい

頻繁にSDカードに写真を入れるのは億劫で、すぐに使わなくなってしまいそうです。
なので、Google Driveなどのクラウドストレージに写真を格納して、それをフォトフレーム上で表示したいです。


そのような需要は無いのか、市販品でそのようなものは見つからず。

無いから作るか

無いなら作るか、ということでクラウド対応型フォトフレームを作成しました。

用意したもの

Raspberry Pi 4

フォトフレームは常時通電するものなので、消費電力が低いものが良いですね。
今回は Raspberry Pi 4 を使いました。

【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品【RS・OKdo版】
Raspberry Pi 4 4G Model B 技適完全対応品で、基板・パッケージに技適マーク入りです。(工事設計認証番号:007-AH0184) Raspberry Pi 4 は、エントリレベルの PC と同等の電力を供給するアップグレードされたプロセッサで、パフォーマンスが向上しています。 より複雑なプロセスを...

モバイルモニター

写真を表示するためのモニターです。
FullHD&IPSパネルのモバイルモニターです。
モバイルモニターであれば電源も小型で設置自由度も高いと思います。
よくあるフォトフレームはモニター品質をケチっていて、視野角が狭くてがっかりするのですが、この辺のパーツを選べるのが醍醐味ですよね。

モバイルモニター/モバイルディスプレイ/CHONGYICK 15.6インチ FHD/ゲームモニター /72%NTSC色域 IPSパネル 軽薄型 Type-C/HDMI/全CNC製アルミ スタンドカバー付 PS4/XBOX/switch/PC/Mac/サブモニター/交換用液晶パネル 狭額
モバイルモニター/モバイルディスプレイ/CHONGYICK 15.6インチ FHD/ゲームモニター /72%NTSC色域 IPSパネル 軽薄型 Type-C/HDMI/全CNC製アルミ スタンドカバー付 PS4/XBOX/switch/PC/Mac/サブモニター/交換用液晶パネル 狭額

その他、電源類

その他、RaspberryPiの動作に必要なSDカードや電源を揃えます。

【 サンディスク 正規品 】 2年保証 ドライブレコーダー対応 microSDカード 32GB UHS-I Class10 U3 V30対応 SDSQQNR-032G-GHEIA エコパッケージ
ドライブレコーダーや防犯カメラに最適なサンディスク 高耐久MicroSDカード
Miuzei Raspberry Pi 4 電源、USB-C(Type C)ケーブル 5.1V 3A 充電器コードスイッチ付き ACアダプタ、互換性ありRaspberry RPi 4 Model B 1GB / 2GB / 4GB / 8GB バージョン PSE認証
Miuzei Raspberry Pi 4 電源、USB-C(Type C)ケーブル 5.1V 3A 充電器コードスイッチ付き ACアダプタ、互換性ありRaspberry RPi 4 Model B 1GB / 2GB / 4GB / 8GB バージョン PSE認証

システム構成

次に、システム構成を考えます。
RaspberryPi のOSは Raspberry Pi OS を使用します。

OS

Just a moment...

今回はフォトフレームとして使用するので、Desktopは使用せずにCLIでセットアップします。

画像表示プログラム

画像表示にはCLI上で画像を表示できる fbi を使用します。
※以前のバージョンでUbuntu上のGUIで動かすものを作ったのですが、不安定で安定運用は断念しました。

クラウドストレージへのアクセス方法

クラウドストレージへのアクセスは rclone を使用します。

Rclone
Rclone syncs your files to cloud storage: Google Drive, S3, Swift, Dropbox, Google Cloud Storage, Azure, Box and many more.

この rclone で定期的に写真をダウンロードして fbi に表示する、という流れになります。

セットアップ

Raspberry Pi OS のインストール

Raspberry Pi Imager を使ってSDカードにイメージを書き込みます。
今回の用途では32bitでも64bitでもどちらでも良いと思います。

fbi のインストール

書き込んで起動したら Raspberry Pi に下記コマンドでインストールします。

pi@photo:~ $ sudo apt-get -y install fbi

パーミッションの付与

そのままだとスーパーユーザー以外はfbiで画像を表示できないのでパーミッションを付与します。

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

pi を video グループに追加します。

sudo usermod -G video pi

rcloneのインストール

下記でインストールできます。

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

スライドショープログラムの作成

2022/5/22 update : 新バージョンを作りました。立ち上げから表示までの時間を高速化しました。

概要

以下のアルゴリズムとしました。

  1. rclone ls を使ってクラウドストレージ上の指定のフォルダの一覧を取得する
  2. ある程度取得できた時点でランダムで画像取得開始
  3. 取得できた画像から fbi で画像を表示
  4. その間、一定枚数をバックグラウンドで取得
  5. 指定時間が来たらランダムで次の画像を表示
  6. ランダム選択は重みづけを使った。表示したらデクリメントして他の画像を優先的に表示するようにした。
  7. 週1で rclone ls をしてデーターベースをマージするようにした
  8. データベースは以前のバージョンでは外部ファイルに json で記録していたがマージが遅いのでメモリに持つようにした

開発言語

言語は勉強も兼ねて python にしました。

2022/5/22 update : 新バージョンはオブジェクト指向にして、Python のお作法に則って作りました。
Udemyの酒井潤さんの講座がおすすめです。

Just a moment...
酒井潤公式ブログ
アメリカ シリコンバレーから情報発信

ソースコード

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

GitHub - yukishita/photoView4: クラウド対応スライドショープログラム
クラウド対応スライドショープログラム. Contribute to yukishita/photoView4 development by creating an account on GitHub.

使い方

起動時にスクリプトを立ち上げるだけです。

私は crontab に以下を追加しました。
@reboot は起動時に起動してくれるWindowsのスタートアップのような役割があるものです。

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

デモンストレーション

完成したフォトフレームのデモンストレーション動画です。

1700%の高速化を実現!!

以前のバージョン

基本的な動きは変わりませんが、一度ファイルリストをすべて取得してから動作するので起動が遅い・・

Tips

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

24時間表示だと電気代がもったいないので、HDMIで接続している場合は crontab で以下の記述をすれば良いです。

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

上記の例だと 午前0時にディスプレイOFF、午前6時30分にディスプレイONとなります。

人感センサーや照度センサーを使っても良いかもしれません。

まとめ

いかがでしたでしょうか。
今回は Raspberry Pi 4 を使用しましたが、もっと性能が低い Raspberry Pi Zero などでも十分実行できると思います。(最初の起動が時間がかかるかもですが)

課題

  • 今のところなし

コメント

タイトルとURLをコピーしました