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

Image credit: Tomokatsu Yukishita

イントロダクション

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

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

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

市販品もあるが

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

Amazon.co.jp デジタルフォトフレームの売れ筋ランキング
https://www.amazon.co.jp/gp/bestsellers/electronics/675721011/ref=pd_zg_hrsr_electronics

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

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

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

screen reader text
クラウド対応のフォトフレーム

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

無いから作るか

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

用意したもの

Raspberry Pi 4

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

【国内正規代理店品】Raspberry Pi4 ModelB 4GB ラズベリーパイ4 技適対応品【RS・OKdo版】
thumbnail
Raspberry Pi 4 は、エントリレベルの PC と同等の電力を供給するアップグレードされたプロセッサで、パフォーマンスが向上しています。 より複雑なプロセスを効率的に実行可能な様に、1GB、 2GB 、4GB のメモリサイズが選択可能になりました。 デュアルmicro-HDMIポートにより、デュアルスクリーン設定が可能(以前のバージョンでは標準HDMIポート1個を搭載) 最大4Kのビデオデコード USB 3.0 ポート× 2 により、他の周辺機器への Faster 接続が可能(旧モデルは USB 2.0 ポート × 4) 電力は USB-C 経由で供給(以前のRaspberry Pi 3 は、5.1V で Micro-USB 経由で給電 )
https://www.amazon.co.jp/dp/B081YD3VL5?linkCode=sl1&tag=snowunderco07-22&linkId=6d662c3fa29490bb00611c5a8a86b54a&language=ja_JP&ref_=as_li_ss_tl&th=1

モバイルモニター

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

モバイルモニター/モバイルディスプレイ/CHONGYICK 15.6インチ FHD/ゲームモニター /72%NTSC色域 IPSパネル 軽薄型 Type-C/HDMI/全CNC製アルミ スタンドカバー付 PS4/XBOX/switch/PC/Mac/サブモニター/交換用液晶パネル 狭額
thumbnail
【FHD高精細画質・画面に遅延無し】72%NTSC色域とHDR高ダイナミック技術とFHDを採用したこの1920*1080Pモニターは、他の1080Pの45%色域に比べて、画質がより高精細で、しかも色がより鮮やかで、IPSパネル採用で斜めから見てもくっきりキレイに楽しめます、60Hzのリフレッシュ率で映像と音を遅延なく点滅させなく、高音質のスピーカーを内蔵し、迫力のある臨場感をもたらせます、Chongyickの旗艦型番として、ゲーム・ビジネス・テレワーク・在宅勤務用にも最適します、勿論、テレビ会議を行いながら、作業できます。三年間以内に不良を発生したら、修理しないで、新しいモニターを再送致します。
https://www.amazon.co.jp/dp/B088BHMNXW?_encoding=UTF8&psc=1&linkCode=sl1&tag=snowunderco07-22&linkId=c39742142a36af4a5b5fb260a337a386&language=ja_JP&ref_=as_li_ss_tl

その他、電源類

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

【 サンディスク 正規品 】 2年保証 ドライブレコーダー対応 microSDカード 32GB UHS-I Class10 U3 V30対応 SDSQQNR-032G-GHEIA エコパッケージ
thumbnail
ビデオスピードクラス30(V30)、UHSスピードクラス3(U3)とCLASS10に対応し、4K動画やフルHD動画に最適 容量:32GB 最大読取り速度100MB/秒 2年間限定保証
https://www.amazon.co.jp/dp/B07QC5RKRT?linkCode=sl1&tag=snowunderco07-22&linkId=c67660149844677ac694a73bdf01950b&language=ja_JP&ref_=as_li_ss_tl&th=1
Miuzei Raspberry Pi 4 電源、USB-C(Type C)ケーブル 5.1V 3A 充電器コードスイッチ付き ACアダプタ、互換性ありRaspberry RPi 4 Model B 1GB / 2GB / 4GB / 8GB バージョン PSE認証
thumbnail
【商品仕様】入力電圧:AC100V-240V(海外・国内両用)、出力電圧:DC5.1V、出力電流:最大3A、ケーブルの長さ:1.50m/ 59インチ 高品質 【1年保証】
https://www.amazon.co.jp/dp/B087CF6127?&linkCode=sl1&tag=snowunderco07-22&linkId=bfc9b1bdafb22eadfed371ea224bde4d&language=ja_JP&ref_=as_li_ss_tl

システム構成

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

OS

Raspberry Pi OS
thumbnail
Your Raspberry Pi needs an operating system to work. This is it. Raspberry Pi OS (previously called Raspbian) is our official supported operating system.
https://www.raspberrypi.com/software/

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

画像表示プログラム

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

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

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

Rclone syncs your files to cloud storage
thumbnail
Rclone is a command-line program to manage files on cloud storage. It is a feature-rich alternative to cloud vendors' web storage interfaces. Over 70 cloud storage products support rclone including S3 object stores, business & consumer file storage services, as well as standard transfer protocols.
https://rclone.org

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

セットアップ

Raspberry Pi OS のインストール

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

screen reader text
クラウド対応のフォトフレーム

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の酒井潤さんの講座がおすすめです。

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
現役シリコンバレーエンジニアが教えるPython入門!応用では、データ解析、データーベース、ネットワーク、暗号化、並列化、テスト、インフラ自動化、キューイングシステム、非同期処理など盛り沢山の内容です!
https://www.udemy.com/course/python-beginner/
酒井潤公式ブログ
thumbnail
アメリカ シリコンバレーから情報発信
http://sakaijun.blog.jp/

ソースコード

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

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

使い方

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

私は 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 などでも十分実行できると思います。(最初の起動が時間がかかるかもですが)

課題

今のところなし

関連項目