画像処理で透過画像を用いるため、画像は png で扱う。
通常の URL に One Time Token を付与することで、画像の取得を行う。 画像認証サーバーに直接アクセスするのは(画像認証サーバーの API を叩くのは)Nginx とバックエンド API サーバーのみである。
デフォルト画像には認証を用いない。
画像の選択は、モバイルアプリで行う。
参加者は、複数枚存在しうる画像の内、一枚を選択した状態にする。 選択した状態以外の画像はモバイルのアプリトップ画面には表示されず、またバックエンドの画像の生成も行われない。
参加者が初めてフォトスポットで撮影した場合は、その画像が自動的に選択される。
GCS にアップロードされる画像は画像名で管理される。
{image_id}_origin.png
{image_id}_{palette_index(id)}.png
{image_id}_current_{visitor_id}.png
GMM によるクラスタリングを行う予定。 クラスタリングする祭にはあらかじめ画像のドットを間引く。
HSV と画像の座標を用いてクラスタリングを行う。
クラスタリング時に、透過 png でクラスタごとのマスクしが画像を生成する。
クラスタリングが完了すると、バックエンド API に通知がいき、現在の参加者の状態に応じた画像の生成が行われる。
TODO: シーケンス図
パレットは、画像をクラスタリングした色のクラスタである。
パレットには 0~n までの Index が割り振られており、ユーザーが所持しているパレットの Index は画像間で持ち越される。
画像 A の Index1 が画像 B の Index1 と似ているクラスタの構成色である保証はない。
各画像は 0~n までの同じ数のパレットに分割される。
ユーザーのパレットの保有 Index によって、画像を生成する。
各パレットごとにマスクした透過 png を作成し、それを合成することで画像を生成する。
参加者のパレットの状況や選択の状況が変わると、バックエンドの画像の生成が行われる。 画像の生成が完了するとバックエンド API を経由して、モバイルに画像の更新があるという情報が渡る。 モバイルはその情報を受け取ると、表示する画像の更新を行う。
TODO: シーケンス図