見出し画像

ラズパイで構築!Googleフォト風、超軽量写真管理サーバー【PhotoPrism】

こんにちは。子育てミニマリストのメメです。
普段は、節約・投資に関することや、ミニマリストに関する話題をnoteに投稿していますが、今回は自宅サーバーを活用した写真管理サーバーについてまとめていきます。

1.写真管理サーバーの例

写真管理サービスとして有名なものは、
・Googleフォト
・Amazonフォト
・iCloud(もしくは共有アルバム機能)
が挙げられますが、どれも容量や件数に制限があります。

【Googleフォト】

Googleフォトについては2021年5月までは画質を落とすところで無制限で保存できていたものが、2021年6月からは容量がカウントされ、15GBまでに制限されるようになりました。

Googleフォトに関しては、AIを用いた人物認識やシーン検索等できる点が特徴です。

【Amazonフォト】

Amazonフォトについては、Prime会員であれば容量無制限の写真ストレージを使用することができます。

プライム会員は容量無制限の写真ストレージをご利用いただけます。プライム会員でなくとも、Amazonのお客様は、5GBの無料ストレージをご利用いただけます。
Amazon Photos

注意点は、容量無制限なのは、写真ストレージのみという点です。
動画に関してはプライム会員であっても5GBまでしか保存できません。
それ以上の動画等を保存する場合は以下の有料プランに加入する必要があります。

Amazon Photos 有料プラン

【iCloud(共有アルバム機能)】

Appleデバイス限定ですが、iCloudの共有アルバム機能というものがあります。
特徴は、
・写真、動画を無料でほぼ無制限で保存できる(若干の画質の圧縮あり)
iCloudの容量を消費しない
・Appleデバイス以外からは使い勝手が悪い

共有アルバム機能

Googleフォト、Amazonフォトと比較して、動画に関する制限がほとんどないため、Appleデバイスをメインで使っている方は一番おすすめの写真管理サービスです。
しかし、カメラで撮ったRAWデータ等を管理したい場合は画像が圧縮されてしまうため、後からRAW現像をしたい場合は不便です。

2.Photo Prismとは

今回紹介するPhoto Prismというサービスは、自身のサーバーに構築するオンプレミス方式のサービスになります。
オープンソースなので、コードが公開されており、無料で構築することが可能です。

以下のリンク先から、Photo Prismのデモを試すことができます。

Photo Prismデモ

Photo Prismの大きな特徴として、Google TensorFlowというGoogleが開発したオープンソースのディープラーニングプラットフォームを活用した高度な写真検索機能にあります。

Google TensorFlowを用いた画像検索(cat)
Google TensorFlowを用いた画像検索(人物識別)
Google TensorFlowを用いたラベルの自動生成

ただし、画像をアップロードするためには、Webdavに対応したNextcloud等のサーバーを構築する必要があります。

Nextcloudに関しては、以前投稿した記事に詳しく記載しているので、参考にしてください。
私は、スマホで撮った写真や動画はNextcloudでサーバーに自動バックアップするようにしています。

3.Photo Prismの構築方法

早速、Photo Prismを構築していきます。
私が構築した環境は、以下のとおりです。

  • ハード:Raspberry Pi 4 Model B / 8GB

  • OS:Raspberry Pi OS Buster 64bit

  • ストレージ①:SSD 240GB(Crucial CT240BX500SSD1):OS起動用

  • ストレージ②:HDD 2TB(SGP-NX020UBK):データ保存用

私のラズパイサーバーの構成等は以前の記事に詳しく記載しています。

今回は、DockerにてPhoto Prismを構築します。
Raspberry Pi OS Buster 64bitにDockerを構築する方法は、以下のサイトを参考にインストールしました。

Photo Prismの構築に関しては以下のサイトを参考にさせていただきました。

まず、docker-compose.ymlファイルをダウンロードします。
私は、/optフォルダにdocker関係はまとめているので、/opt/photoprismというフォルダを作り、そこに格納します。

$ sudo mkdir /opt/photoprism
$ cd /opt/photoprism
$ sudo wget https://dl.photoprism.app/docker/arm64/docker-compose.yml

ソースコードは以下のリンク先です。

今回は、ARM64(Raspberry Pi OS Buster 64bit)であるため、arm64版を使用しています。
ダウンロードした、docker-compose.ymlを編集していきます。

$ sudo nano docker-compose.yml

まずは、PhotoPrismのユーザー名とパスワードを変更します。

environment:
      PHOTOPRISM_ADMIN_USER: "admin"                 # admin username
      PHOTOPRISM_ADMIN_PASSWORD: "insecure"          # initial admin password (minimum 8 characters)

PHOTOPRISM_ADMIN_USERとPHOTOPRISM_ADMIN_PASSWORDを任意のものに変更します。

次に、自身が保存している写真・動画フォルダをPhotoPrismに認識させるために、保存場所を指定します。

volumes:
      # "/host/folder:/photoprism/folder"                # Example
      - "~/Pictures:/photoprism/originals"
      - "/media/data/Nextcloud/Camera:/photoprism/originals/Camera"
      - "/media/data/Nextcloud/Picture:/photoprism/originals/Picture"               # Original media files (DO NO>
      - "/media/data/Nextcloud/Backup:/photoprism/originals/Backup"
      # - "/example/family:/photoprism/originals/family" # *Additional* media folders can be mounted like this
      # - "~/Import:/photoprism/import"                  # *Optional* base folder from which files can be importe>
      - "./storage:/photoprism/storage"

volumesの"~/Pictures:/photoprism/originals"の下に追記します。

"/media/data/Nextcloud/Camera:/photoprism/originals/Camera"

:の前がデータの保存先、:の後がPhotoPrismに認識させるフォルダの場所になります。
基本的には、/photoprism/originalsのフォルダ内に作成することになります。
それ以外の場所では試していませんが、認識しない可能性があります。

設定が終わったら、PhotoPrismを起動します。

$ sudo docker-compose up -d
Creating network "arm64_default" with the default driver
Pulling mariadb (arm64v8/mariadb:10.9)...
10.9: Pulling from arm64v8/mariadb
0509fae36eb0: Already exists
cf568f815bdc: Already exists
4ba9b40f35bf: Pull complete
e0343c2247ca: Pull complete
e975d62f94a9: Pull complete
9ae679f3851b: Pull complete
93d7ec31f2cf: Pull complete
a05734d60a36: Pull complete
Digest: sha256:5a277ce58d551d399ebf5f55c5deb460bb9a48a5445208a24ef191ea69409ba2
Status: Downloaded newer image for arm64v8/mariadb:10.9
Pulling photoprism (photoprism/photoprism:arm64)...
arm64: Pulling from photoprism/photoprism
56a2caa6b2c6: Already exists
642551481c9d: Already exists
143c8d132639: Already exists
4f4fb700ef54: Pull complete
7d29826fdf8f: Pull complete
d0842cfd53e4: Pull complete
b1574c434c4a: Pull complete
Digest: sha256:11e6577f150fd4d69cd5075e3efbfebfc182a32e9d0f3481375dfd50ce1b1964
Status: Downloaded newer image for photoprism/photoprism:arm64
Creating arm64_mariadb_1 ... done
Creating arm64_photoprism_1 ... done

起動後は、http://サーバーのIPアドレス:2342にアクセスし、設定します。

PhotoPrism

ファイアーウォールを設定している場合は、外部から接続できないため、2342ポートを許可します。

sudo ufw allow 2342
PhotoPrismホーム画面

Settingsから日本語に変更できます。

日本語に変更

写真を取り込むには、「ライブラリ」から「インデックス」を選択しスキャンを開始するとスキャンされますが、ファイル数が多いと時間がかかるため、初回は、コマンドライン上から行います。

インデックスの作成(ブラウザ)
$ cd /opt/photoprism
$ docker-compose exec photoprism photoprism index

ラズベリーパイ4では、約3万ファイルのインデックス作成に丸1日程度かかりました。

このままでは、自動でインデックス作成がされないため、cronに登録します。

$ sudo crontab -e

以下を追記します。

33 2 * * * cd /opt/photoprism && /usr/local/bin/docker-compose exec -T photoprism photoprism index

この場合は、毎日2:33にインデックスを作成することになります。
時間はお好みで変更してください。

ちなみに、iOS版のアプリはありませんが、WEBページをホーム画面に追加することで、アプリのように使うことができます。

使い勝手については、一度、デモサイトをホーム画面に登録すると分かりやすいです!

4.まとめ

さて、今回は軽量な写真管理サーバーとして、PhotoPrismを紹介しましたがいかがだったでしょうか?
インデックス作成には時間がかかりましたが、一度作成すれば外部サーバーからも軽快に動作します。

企業のサービスは信頼性が高く、メンテナンスが不要というメリットがある反面、いつサービスが改悪されるかわかりません。
オンプレ方式は構築するのはやや手間ですが、一度構築してしまえば、管理は楽です。

今後もいいオープンソースのソフトがあれば紹介していきたいと思います。

この記事が気に入ったらサポートをしてみませんか?