2016/11/07

【アプリ紹介】電飾カメラ / IllumiCamera


今日は 2016/01/12 に公開した「電飾カメラ」の紹介です。





こんなアプリ

夜景にネオンのような電飾を合成した動画を作るアプリです。

アプリを起動するとカメラ映像の上にほぼリアルタイムで電飾が合成されます。

シャッターを押すと、その時の風景に対して5秒分の動画が作られ、アルバムに保存されます。









▼普通の景色を電飾でキラキラさせるカメラです
▼5秒の動画が保存できます
▼暗めの人工物を写すのがおすすめ
▼ループビデオとしてVineに投稿しよう

アプリ説明にこんなこと書きましたが、Vine 終わっちゃいますね〜。


開発の経緯

詳しくはディスコマシンの紹介記事に書いた通りですが、前から作りたかったやつです(適当)。

あ、思いだした、元はと言えば休暇で香港に行った時、Symphony of lights という高層ビル群が音楽に合わせてピカピカ光ったりレーザービームが出まくる派手なショーを見たのがきっかけです。ああいうのをアプリで再現できたら面白かろうということで作りました。

ちなみに Symphony of lights は毎日 20 時からやっているので香港に行ったら是非見てみてください。

ちなみに香港といえば、毎日正午に撃たれる大砲「午砲(Noonday Gun)」も外せません。これは元々 Jardine Matheson 社が銅鑼湾に入港した自社のエグゼクティブを歓迎するために祝砲を撃っていた所、1860 年に香港に赴任したてでその習慣を知らなかった英国海軍将官が一民間企業が祝砲を撃つなんぞケシカラン、罰として以後ずっと毎日正午に時砲を撃つべし、と命令して行われるようになったのが今でも残っているものだそうです。(1941〜1947の間は日本による占領のため中断)

話を戻しまして、電飾カメラでは Symphony of lights のような音楽を鳴らすところまではできなかったですが、後に出した「ディスコマシン」ではアガる音楽が付いたりより派手になったり、リアルタイムに動画生成できるようになったりといろいろ改良されて今に至ります。

開発期間

開発日誌によると、2015/12/19(Sat) 15:58 に着手開始とあります。

OpenCV on iOS が初めてだったのでやや手こずったものの、19:46 にはカメラ映像を輪郭データ Vector3[][] にしてダミーの点灯パターンで描画して映像と合成するところまで完成、21:00 には人間の感性を揺さぶる電飾点灯アルゴリズム「IlluminationEngine™」が完成したようです。

翌日は起床〜 14:00 と 18:00 〜 21:30 で作業、21:40 にレビュー提出完了。その後スクショやビデオの準備。

Apple レビューチームが 12/22〜12/29 と冬休みに入ったのと iPad で落ちるバグがあって再提出したので公開は年明けの 2016/1/12 になりました。

ということで、メインの開発期間としては 2 日間、実質 13 時間くらいでしょうか。

技術的な解説

カメラ映像に対して OpenCV で輪郭検出をして、ノイズっぽい輪郭を除去した上で今回独自開発した人間の感性を揺さぶる電飾点灯アルゴリズム IlluminationEngine™ により点灯パターンを算出し、ほぼリアルタイムで OpenCV の API により輪郭を描画します。

フレーム間で同じ輪郭に対して異なる色を出力してしまうと脈絡のないチカチカした映像になってしまうので、そうならないようにするなどわりかし考えることはいろいろありました。

OpenGL を使うともっといろんな表現が高速に描画できるだろうなあと思いつつ、それは後でということで妥協しています。

当時は ReplayKit が出たばかりでその存在を知らず、わざわざオフラインで動画生成しています。そうすると生成中のくるくるやプログレスバーとか中断ボタンとか完了後の共有ボタンとかいろいろ作る必要があって今から振り返ると結構面倒ですね。

当時でもリアルタイムに動画出力することは理論上できたはずですが、輪郭検出から描画までの処理が結構重かったのでそこまで頑張る必要もなかろうということで軽やかにボツに決定。

動画出力には AVAssetWriter などの API を使っています。結構面倒な API ですが、以前作った分身カメラで使ったルーチンをライブラリ化していたのでそれを使い回せました。

分身カメラについてもそのうち紹介記事を書こうと思います。

以上、「電飾カメラ」の紹介でした。