Graffity Tech Blog

Graffity株式会社のエンジニアブログ

弊社リードエンジニアKBOYが #iOSDC 2018にて登壇しました!

f:id:kboy_silvergym:20180831194055j:plain

こんにちは。筋肉エンジニアのKBOYです。iOSDCが開催中ですね! 私は昨年初めて参加し、今年はスピーカーとして登壇することができました。とても嬉しく思います。

さて、GraffitryではこれまでARKitを使ったアプリを開発してきました。当初は3Dの座標系について分かっていなかったため、ARKitのドキュメントや記事だけを見ても分からなかった苦い思い出があります。その試行錯誤と勉強で得られた知見を界隈に共有して盛り上げていきたいという思いがあって今回の発表を行いました。

また、優秀なiOSエンジニアが沢山いる中で自分は何で目立てるかな?と考えた時に、やはりARであるという理由もあります。なぜなら業務で本格的にARKitを使っているという珍しい存在であると自負しているからです。

発表時間には弊社社長(リーダー)も遊びに来てくれて、僕のフリに答えてくれました!w

発表内容

今回発表した内容は、「ARKitのための3D算数」ということで、座標系の種類と座標変換の話を中心に扱いました。ここは僕が最初にハマった所の1つで、一見簡単そうに見えて文字だけで説明するのが難しい分野なので、いい先生がいないと理解に時間がかかると思います。

発表資料は以下です。

また、Qiitaの記事で読みやすく、行列の話も含めて書きましたのでそちらもご確認ください。

qiita.com

発表した感想

100人弱の人たちの前で発表できるというのはとても良い機会でした!意外と緊張せずに発表できてよかったです。

また、ARKitを使った実装に興味がある方が結構いるんだなあと感じた機会でした。これからもiOSに限らずモバイルARを追求して行くので、積極的に発信していきたいと思っています。

エンジニア募集中!

ということでGraffityでは、副業や業務委託も含めて手伝って下さるエンジニアを絶賛募集中でございます!興味がある方は是非お気軽にtwitterのDMなどでもお問い合わせください!

www.wantedly.com

スタートアップがRailsからGoに移行した話(インフラ・デプロイ周り)

はじめに

GraffityというARを使った落書き通話アプリを作っているむーつんといいます。 好きな言語はJavascriptなサーバサイドエンジニアです。

弊社のAPIは元々Railsで出来ており、以下のような構成でした。

f:id:mtnnnnnnn:20180801164345p:plain

ここにはスケーラビリティは考慮されておらず、同じインスタンスをコピーしてALBに振り分けてもらうという粗末なものでした。(スピード感が求められるスタートアップにおいてはこれで良いのかも)

しかし、Graffityは過去にZIP!で取り上げて頂いたり、弊社代表の森本(以降Totti)がJ-Waveでラジオ出演するなどメディアへの露出が増える中、これではいつ大量アクセスでサーバがダウンするかわからず不安です。

Totti「むーつん、Goに興味ある?」

---それは突然訪れました。 森本の兼ねてからの友人のI氏(インターンでUSの某大手SNSで働いた実績がありとても優秀と聞いていた)がサーバサイドの業務にコミットしてくれることになり、彼がGoに興味があった事と森本がGoに対して持っていた可能性から僕にサーバの開発をGoに移行した方がいいのではないかと打診があったのです。

Goのコミュニティの活発さは感じていましたし、前述のような課題感からRailsからGoに移行することを決めました。

さて、Goに移行するぞい

Goに移行するに当たって、以下の要素を重要視しました。

  • マイクロサービスアーキテクチャ
    • PMF達成に向け、多くのプロトタイプを追加・削除しやすいこと
    • サービス間通信が行えること
  • Infrastructure as Code
    • マネジメントコンソールを触らずともインフラが構築できること
  • CI環境(デプロイ、テスト)
    • ダウンタイムのないデプロイが簡単に行えること
    • 自動テストを実行できること

最終的には以下のような構成になりました。

f:id:mtnnnnnnn:20180801164453p:plain

GraffityはPMF達成に向けて仮説検証を進めているフェーズです。 今後多くのプロトタイプが生まれ、破棄されていくことを想定し、コアな機能(ユーザ管理、Worker)と各APIを疎結合することでリスクなく運用できると考えました。

また、インフラ環境はTerraformにてコード化されており、マネジメントコンソールから操作することなくコードベースで構築できるようになりました。これにより、人為的操作により環境が壊れたりするリスクを抑えることができそうです。

デプロイはecs-deployを用いて行われ、

  1. 稼働中のサーバ(Blue)とは別のサーバ(Green)を起動する(AutoScalingGroupのMax/MinSizeを0->1以上に変更する)
  2. Greenにecs-deployを用いてECRからイメージをデプロイ
  3. テスト用サブドメインにRoute53にてGreenのロードバランサに接続
  4. テストコードが走る
  5. テストが問題なければデプロイしたいドメインに対してGreenのロードバランサを接続(Blue -> Greenにスイッチ)
  6. Blueサーバを停止する(AutoScalingGroupのMax/MinSizeを0に変更する)

上記コードをpythonでスクリプト化され、makeコマンドとして実行できるようになっています。

ポイントとしては、ELBに対するRoute53のTTLが60秒のため、5が完了後、60秒以内にBlueサーバを停止してしまうと、Route53はまだBlueに接続してしまうため接続エラーとなってしまいます。 なので、スクリプト内で5の後に80秒ほどスリープしてから6を実行するように調整しました。

で、結局Goにしてよかったの?

それは僕にもわかりません。 というかこれから分かってくるだろうかと思っています。

間違いなく、マイクロサービス化やなどのインフラ環境は資産になり得るポイントだと思いますが、GoにしたことによってどれくらいAPIのレスポンスが改善したか、生産性が向上したかはこれから運用していく中で感じることでしょう。

それ以上に大きなメリットとしては、将来的な移行コストの削減かなと思っています。 今後会社の規模が拡大し、一緒に働くメンバーも増えてくる中で言語や開発環境をリプレイスすることはかなりの重いタスクになる事は想像しやすい事だと思います。

今後Go2のリリースも控えているので、開発コミュニティはますます活発になっていく事でしょう。 弊社Graffityもその勢いに乗れるよう頑張ります。

 おわりに

Graffityとかビデオ通話をしながらAR落書きが楽しめるアプリです。 みんなで書いた落書きを動画で保存してシェアしましょう!!

GRAFFITY - ARビデオ通話 -

GRAFFITY - ARビデオ通話 -

  • Graffity Inc.
  • ソーシャルネットワーキング
  • 無料

ARKitの可能性を知るためにオススメの教材2選

こんにちは。GRAFFITYでiOSを中心にアプリエンジニアをやっているKBOYです。今回はARKitの可能性を感じさせてくれる教材を紹介し、僕なりの感想も書いて行きたいと思います。

ARKitでどんなアプリを作ったらいいのか?」という話になると、そもそもどこまでできるのか?という話になってアイデアが出にくいものです。

そのイメージを掴むために私がオススメするのは、

の2つです。

それぞれからピックアップして、ARアプリを作りたいあなたにインスピレーションを与えたいと思います。

物理的インタラクション

physics.gif

ARKit 2.0 Build Augmented Reality apps on iOS with Scenekit

そもそもSceneKitでこのような物理的インタラクションができます。 これを実際の空間で行うとこのように、公園でファイヤボールを投げてブロックを倒したりするゲームが作れます。

WWDC2018で紹介されたSwift Shotもこの物理的インタラクションとMulti Playの組み合わせで実現していますね。

空間に線を書く

image

https://github.com/shu223/ARKit-Sampler

弊社GRAFFITYでも実装されている線を書く機能。 毎フレームごとに線のnodeのgeometryを更新ことで、長い線を空間に引くことができます。

ARKit-Samplerでは中心から線を書くように実装されていますが、タッチしている位置を使うことで、手の動きに合わせて線を書くことができます。

それがGRAFFITYです。

f:id:graffity:20180731131141g:plain

オクリュージョン(3D物体が平面に隠れる)

oclusion.gif

ARKit 2.0 Build Augmented Reality apps on iOS with Scenekit

ARは実際に空間に物を置いているわけではなく、3Dに見えるように描画しているだけなので、そのままだと図にあるような机も通り抜けて見えてしまいます。しかし、平面認識と組み合わせることでARKitでもオクリュージョンと呼ばれる現実の物の後ろに3D物体が隠れるという表現が可能です。

先日Pokemon GOでオクリュージョン技術が注目されましたが、ARKitでも実はある程度できるということを知っといて損はないでしょう。

ドローンが近づいたら音声が聞こえる

sound.gif

ARKit 2.0 Build Augmented Reality apps on iOS with Scenekit

このdroneはxcode上でSceneKitのGUIで作ることができます。このデモではそれで作ったdroneをある点を中心に回るようにアニメーションさせてさらに、音声ファイルを使ってdroneから音が鳴っているように表現しています。

広い意味でARは視覚表現だけでなく、聴覚や触覚も使うとより現実味を帯びたものになります。そういった世界感を作って行きたいものですね。

画像の認識

image.gif

ARKit 2.0 Build Augmented Reality apps on iOS with Scenekit

ARKit1.5からできますが、2.0でかなり精度が上がっています。図のように動かしても画像に地球がくっついてきます。

Tweet Realityの作者がAR名刺のイメージ映像を公開していましたが、物理的なものは概要Overviewだけにして、ARで詳細を表現するというアプローチは最高にクールですね。ミニマリストの僕にも刺さります笑

平面認識

image

https://github.com/shu223/ARKit-Sampler]

ARKit1.0平面認識ができますが、ARKit1.5では壁も認識できるし、gifのように短形だけでなくて円のような形も判別することができます。テーブルの上に水を張り巡らせるといったような演出ができるのです。

僕は木製のものがスクなので、全ての机を木にトランスフォームしてみたいですね笑

まとめ

以上、ARKitの可能性を感じることができたでしょうか?

堤さんのARKit-Samplerは自由に参照できますし、ARKit 2.0 Build Augmented Reality apps on iOS with Scenekitは有料ですが動画をみながらわかりやすくARKitを習得できるのでオススメです。興味のある方は見てみてください。

(本文に掲載したgithubの動画は公開されているものであり、Udemyの動画は作者から掲載の許可をもらっています。またNDA違反しないようにARKit2.0特有のスクショは載せていません)

ARイノベーションを牽引するComputerVision7選

f:id:graffity:20180730134247j:plain

ARは視覚の代替、拡張にあります。 ベースとなる技術である、Computer Visionは、2012年のDeepLearningのブレイクスルーにより、毎年たくさんのComputerVisionの研究が発表されることから始まりました。初めはクラウド上で動くものでしかなかったこのテクノロジーは、今やスマホでサクサク動く時代へ。 AR普及するのに欠かせない、ComputerVisionテクノロジーを今回はピックアップしたいなと思います。

INDEX

  1. 顔認識
  2. 画像分類
  3. 物体識別
  4. 物体追跡
  5. セマンティックセグメンテーション
  6. インスタンスセグメンテーション
  7. 姿勢認識

1. 顔認識

f:id:graffity:20180730132726j:plain

顔認識は、顔から特徴点を抽出するテクノロジーです。 現在利用されているARのユースケースでは、ダントツであるFaceFilterがそうですね。 近年急速に普及している、Avatarも同様なテクノロジーを利用しています。

iPhoneXではdepthセンサーより、より細かく特徴点を把握できるので、Avatarの表現をよりリアルにすることができました。 これが画像ベースでできると非常に面白い世界になりそうですね。

以下のMeMojiでは、なんとDisneyのキャラクターになりきっています。 子供に人気が出そうなユースケースですね。

www.youtube.com

2. 画像分類

f:id:graffity:20180729215049j:plain

画像分類は、画像のラベルを予測するテクノロジーです。

画像分類の学習から予測までのステップは以下です。

  • 訓練データとして、N個の画像とそれぞれの画像にK個のラベルを用意します。
  • DeepLearningでN個のインプットデータと、K個のラベルを学習させます。
  • ある画像を入れた時に、K個のどれに分類されるかを予測します。

シンプルなステップですが、画像を正確に予測していくことが難しい。 より具体的に分類したければしたいほど難しいです。 大量なデータとそのラベル、そしてAIエンジニアの力量が必要な分野です。

実際にPiterestでは、大量なデータをオンラインで集め、画像分類を使った画像検索を提供しています。 f:id:graffity:20180729215823j:plain

どのような画像検索かは、こちらのDemoより!

f:id:graffity:20180730134026g:plain

3. 物体識別

f:id:graffity:20180729220342j:plain

物体認識とは、画像の物体それぞれに対して、ラベルとその領域を予測するテクノロジーです。

自動運転の要素技術であることから、大手IT企業が研究開発を進め、リアルタイムに精度高く識別ができています。

  • You Only Look Once (YOLO)
  • Single Shot MultiBox Detector (SSD)
  • Region-Based Fully Convolutional Networks

あたりで検索するとモデルにたどり着けると思います。

以下はYOLOを使った物体識別です。

www.youtube.com

4. 物体追跡

物体追跡とは、あるシーンの中の物体がどのように動いたかトラッキングし、今後どのように動くかを予測するテクノロジーです。

こちらも自動運転に必要な要素技術なので、TeslaやUberなどが研究開発をしており業界をリードしています。

fully-convolutional network tracker というモデルが有名です。 デモはこちらから。

www.youtube.com

5. セマンティックセグメンテーション

f:id:graffity:20180729221920j:plain

セマンティックセグメンテーションとは、画像のそれぞれのピクセルが、車、自転車などの概念に属するのかを予測できるテクノロジーです。上記の写真だと、人・道・車・木・歩道などを識別することがピクセル単位でできています。 物体識別とは違って、ピクセル単位で予測できることが一番大きな特徴になります。

以下が有名なモデルになります。 * Dilated Convolutions * DeepLa * RefineNet.

Tensorflowで作った、Dilated ConvolutionsのDemoがこちらになります。 www.youtube.com

6. インスタンスセグメンテーション

f:id:graffity:20180730131032j:plain

インスタンスセグメンテーションは、セマンティックセグメンテーションをさらに深め、上記の画像のように、車や人をさらに識別してセグメンテーションするテクノロジーです。

Mask R-CNNあたりが有名ですね。 以下がデモになります。

www.youtube.com

7. 姿勢認識

姿勢認識は、画像から人の体を認識し、ボーンを予測するテクノロジーです。 この技術は、Vtuberに使われている技術ですね。

OpenPoseというモデルが有名で、デモはこちらから。

www.youtube.com

このボーンを予測するという文脈では、ジェスチャー認識もあります。 2018年のF8で、Facebookが研究している発表していました。こちらもスマホARで使える未来は近いですね。

f:id:graffity:20180730132145p:plain

8. まとめ

「ARイノベーションを牽引するComputerVision7選」ということで、ワクワクする未来感のあるテクノロジーと出会えたらに嬉しいです。 個人的にもテクノロジーが好きなので、率先して深くリサーチしていければと思います。まだまだ公には出ていないCV技術はあると思いますので、定期的に発信していければと思います。

このようなCV技術を使い、早く人類がARの未来に近づけるよう頑張っていきます。

参考記事

AR時代のプラットフォーム「ARCloud」とは?

はじめに

AppleがARKit、GoogleがARCoreを2017年に発表し、

徐々に普及しているモバイルAR。2019年〜2020年にかけて普及すると見ております。普及した際の一つのプラットフォームになるのが、「ARCloud」。世界で広がるAR時代においてかなり重要な概念になるので、まとめておきたいと思います。

1. ARCloudとは

AR Cloudとは、 「クラウド」に保存された、現実から抽出した「点群の集合」です。 想像が難しいと思うので、Graffity Inc.で研究開発している、AR Cloudの一部お見せします。

f:id:graffity:20180721172605g:plain Graffity Inc. 会議室のAR Cloud

上記の青色は全て点であり、現実から取得しています。点は特徴点と呼び、P(x,y,z)という3次元情報を持った点です。現実からこのような特徴点を抽出し、集めたものを点群 or point cloudと呼んでおり、それをクラウドに保存したものをAR Cloudというのです。

2. なぜ今ARCloudが注目されているのか?

理由は大きく分けて2つあります。

2–1 大手IT企業が投資が加速

2017年は、モバイルAR元年とも言える年でした。AppleがARKitを発表し、GoogleがARCoreを発表、FacebookはARStudio、SnapchatはLensStudioという誰もが簡単にFacebook/Snapchatカメラ向けに、ARのコンテンツを作成できるプラットフォームを発表。さらに、Snapchatは新しくBitomojiを立体にしたコンテンツを提供開始し始めました。

実際に、数値としては以下。 f:id:graffity:20180721172624j:plain

Digi-Capitalの2018年第1四半期に関するレポートによれば、過去12ヶ月で総額36億ドル(約3800億円)の投資が行われたとのことです。第1四半期自体の数字がありませんが、グラフを見る限りでは堅調な数字なようにも思えます。 by Komori

2–2 データをたくさん集めることができるようになった

ARへ投資は、ARの体験を作りやすくするToolレイヤーから行われます。ARKitやARCoreのSDKが代表的な例です。ARKit、ARCoreによりARの技術障壁が下がり、iOSAndroid、Unityエンジニアであれば簡単に作れるようになりました。

f:id:graffity:20180721172655j:plain

大量のARのアプリが誕生して、2017年9月からARKitを利用したアプリのダウンロード数はなんと、1300万ダウンロードを超えました。 ARKit-only apps top 13 million installs, nearly half from games上記の変化がAR Cloudにどのような影響を与えるかはシンプルです。

「ARCloudを作るのに必要なデータが取得できるようになった」ということです。

具体的には、ARを使うということは、カメラを使うと同義です。つまり、カメラの滞在時間が増えているということをさします。 カメラの滞在時間が増えると、現実を画像として収集できる機会が増えることに値します。 このように、ARCloudが実現するためのデータが取得できるようになったことはARCloudが注目される大きなきっかけとなっています。

2–3 買収事例

そして、買収事例1号が誕生しました。ARリーディングカンパニーとも言える、Niantic Inc. が Escher RealityというAR企業を買収しました。

Pokemon Go開発元のNiantic、ARスタートアップのEscher Realityを買収し開発強化へ

Escher Realityは、ARCloudを作るカンパニーであり、複数の大手IT企業からオファーがありつつも、Niantic Inc.がもつ膨大なデータに価値を感じ、買収オファーを受け入れたそうです。 買収事例が出たことにより、投資も加速していく。そのような正のサイクルに入っています。

実際に、Nianticは、ARのプラットフォームを発表しました。 ここでは、Occlusionという技術を発表し、物体の裏にピカチュウが隠れることができております。

youtu.be

3. ARCloudの価値

では、ARCloudの本質的な価値はなんなのでしょうか? 答えはシンプルで、「人々が空間を共有できるようになる」ということです。以下は、USで10M以上も調達した、AR CloudカンパニーのPVです。

www.youtube.com

このように今まで、共有できなかった「空間」を共有できるようになります。

4. AR Cloud の仕組み

では、AR Cloudはどのようにして作られるのか?ここでは簡単な触り部分をお伝えします。 AR Cloudは、研究領域でいうと、SLAM ( Simultaneous Localization and Mapping )という、自己位置推定と環境地図作成を同時に行う領域に属します。

重要なのは、MappingとLocalizationです。

こちらのMappingとLocalizationは、ブログで書くと長くなるので、別記事にしたいと思います。

5. 競合

AR Cloudの戦いは始まったばかりで、勝者はまだ決まっていません。 勝負はデータにあるからです。どこも技術を確立しましたが、NianticとSnap以外にカメラの滞在時間がしっかりとあるプロダクトを作ることができていないからです。逆にいうと、NianticとSnapは貴重なデータを取れているので一歩リードといったところでしょうか。

現在のARCloudスタートアップは以下になります。

5-1 ARCloudスタートアップ

名前 url API公開 資金調達額
Blue Vision Lab https://www.bluevisionlabs.com/ クローズド公開 $14.5M from GV
Sturfee https://sturfee.com/ クローズド公開 $2.7M
6D.ai https://www.6d.ai/ β版公開 非公開
https://www.prnewswire.com/news-releases/general-catalyst-leads-seed-round-in-6dai-to-bring-the-ar-cloud-into-reality-300622011.html
Ubiquity6 https://ubiquity6.com/ 未公開 $10.5M from Google
https://next.reality.news/news/google-backs-yet-another-ar-cloud-platform-via-ubiquity6s-10-5m-funding-round-0183789/
Escher Reality http://www.escherreality.com/ 未公開 Niantic 買収
vertical https://vertical.ai/ 公開 for unity and swift 非公開
YouAR https://www.youar.io/ 未公開 非公開
https://www.forbes.com/sites/charliefink/2018/04/06/youar-out-of-stealth-with-ar-cloud-breakthrough/
Map - for Unity 非公開
ICO PJなので、ICOしてどれほど資金調達できるか

また、大企業ももちろん参入しており、AppleはARKit2.0にて、GoogleはARKit、ARCore向けにCloudAnchorというARCloudのSDKを発表しております。

5-2ARCloudスタートアップの勝ち筋

まず、前提として、多くのARCloudスタートアップのExitストーリーは売却です。 売却先はシンプルで、データをもつカンパニーになり、NianticFacebook、SnapChat、GoogleAppleMicrosoftなどになると考えている。

このような企業に売却すると大量なデータが手に入ります。よって、売却する際に、重要なのは「精度と速さ」です。 つまり、精度と速さある地域においてベストな結果を出すこと がExitに置いてポイントとなります。

ここで大切なのは、世界中のデータ収集に重きをおかず、ある地域のデータ収集に重きをおくところです。 しかし、ここでの課題が登場します。

データ収集するためのアプリケーションがない

完全に鶏卵問題に直面して、多くのARCloudスタートアップは死んでいくと考えます。

これを解決するためのソリューションは2つ

  • データを提供するアプリにお金を出す ... ヒットするであろうアプリとパートナーシップを組む。
  • データを提供するアプリにtokenを出す ... ICOを行い、データを提供してくれた人にtokenを発行する。すでにGoogleMapのストリートビューでは類似のことが行われており、ポイントをもらうことができます。

よって、以下の勝ち筋にまとまってくると個人的に考えております。

  1. Niantic or Snap がそれぞれ買収したカンパニーと一緒に開発したARCloud
    • Nianticは買収済み。Snapは今年後半か来年中には買収するだろう。
  2. ヒットするアプリと組んで、開発したARCloud
  3. ICOをうまく成功させて、ユーザーがtokenを取得するためにデータを提供する形で開発するARCloud
    • MAPがそれに当たる

6 最後に

2019〜2020年は、ARCloudの勝者が決まって来る年になると思います。 Nianticが現在は先行していますが、ぜひその他のベンチャーにも期待! もちろんGraffityも来たるべくARCloud競争に着実に準備を進めていきたいと思います。

Ref

注目のトレンドはこれだ! シリコンバレーVR/ARニュース3月号