Sketchar
ブログに戻る

コンピュータビジョンと拡張現実における「プログレッシブマーカー」手法

執筆者: Sketchar読了時間 1 分

ついに、この1年間で私たちが開発してきたこと、そして乗り越えてきた課題についてお話しする時が来ました。これは、SketchARユーザーが慣習の制約なしに創造の自由を感じられるようにするための、もう一つの重要な一歩です。

現在の技術的な限界に関わらず、バーチャルコンテンツを提供するモバイルアプリへの需要は高まっています。コンピュータビジョンはソフトウェアがハードウェアと密接に結びついている分野であるため、残念ながらAR製品のコンセプトのほとんどは技術面の遅れによって常に制限を受けてしまいます。

小さなチームが根本的な問題を解決することは滅多にありませんが、私たちはタスクを単純化できる方法を見つけることができました。

なぜ車輪の再発明をするのか、そしてなぜ私たちの前に誰もそれを試みなかったのか?

ほとんどのサードパーティ製ライブラリやプラットフォームは、現実世界における仮想オブジェクトの位置を固定するために、あらかじめ設置されたマーカーに依存しています。私たちの場合、絵を描く手がこれらのマーカーを隠してしまうため、独自の手法を開発する必要がありました。

ARKitはマーカーなしでは同じことができません。

さらに、ARKitやARCoreはマーカーに依存していません(環境内のものを除いて)が、あらかじめ設置されたマーカーが仮想オブジェクトをその場に固定してくれれば、精度はもっと向上するはずです。現在の手法にはユーザーを誘導するための特徴点の検出と追跡が含まれていますが、ユーザー自身が独自の基準マーカーを設定することはまだできません。ARKitとARCoreの2つ目の問題は、仮想オブジェクトを現実世界と連動させて動かせないことです。例えば、物理的な表面に仮想オブジェクトを配置した後、その仮想と物理の表面をまるで接着したかのように一体として動かすことはできません。仮想の画像はその場に留まったままで、表面に追従しないからです。

前述の通り、SketchARは白い紙を使って動作しますが、これはほとんどのコンピュータビジョンアルゴリズムにとって「天敵」です。しかし、私たちのアルゴリズムはこうした条件のために特別に最適化されています。AR コンテンツを紙に結びつけるのに十分な安定性と精度を備えています。ARKitのトラッキングが失敗した後でも動作を続けます。速度も重要です。ほとんどの計算をGPUに移行させたことで、SketchARはiPhone 5SE以降のモデルでリアルタイムに動作できるようになりました。

「プログレッシブマーカー」手法

これは、アーティストが描いた線がアンカーとなり、仮想オブジェクトの保持に安定性を加えるという仕組みです。

また、収集されたデータは、各ユーザーのための本格的なパーソナルアシスタントを開発し続けるために活用されています。ちなみに、私たちは各ユーザーの描画データを分析・学習するために機械学習とニューラルネットワークを使用しています。これについては次の記事で詳しくお話しします。

ヒューストン、問題が発生した―いや、これが動作原理だ。「恐れることはない」。

この問題がどのように解決されたのかを理解するには、最初に立ち返る必要があります。

環境。 すべての表面には異なるテクスチャ、色、構造があります。また、アルゴリズムは環境の余計な「ノイズ」に惑わされることもあります。フィルター(Photoshopの「チャンネル」と同じ考え方の「チャンネル」)がこの問題を解決します。

表面の統一化は、ニューラルネットワークの学習が実際のユーザーデータに基づいていない限り困難です。ニューラルネットワークの学習は継続的なプロセスであり、プロダクトの完成した一部分だと考えるべきではありません。

「キャンバス」。 キャンバスとは、紙のシート、壁、あるいは描画のために選ぶことができるその他の表面のことです。「キャンバス」の種類は、その寸法によってのみ決まります。同時に、白色はコンピュータビジョンにとって「天敵」です。なぜこうしたことが起こるのか理解するために、私たちのノート「白い紙の問題」をぜひお読みください。

描画。 当然ながら、私たちはユーザーのスキルレベルを把握しており、スケッチが元の画像と完璧に一致することは期待していません。そのため、私たちのアルゴリズムはユーザーの不一致を考慮に入れています。

手。 アプリがうまく動作するためのもう一つの「敵」は、画面上の手が表面やマーカー、描画自体を横切ることです。手の大きさや形、肌の色、さらには鉛筆の持ち方のスタイルまでもが、アルゴリズムの注意の一部をそらしてしまいます。

デバイス。 デバイスの位置が固定されていないこと。ユーザーは片手でスマートフォンを持ち、様々な角度で表面に近づけたり離したりします。

解決。
これらの問題を詳細に分析した結果、環境を無視するのではなくフィルタリングしながら、ユーザーが描いているものだけをアプリに「見せる」方法を理解しました。

以下では、周囲の世界がどのようにフラットな画像に変換され、各層をチャンネルごとに分析するためにレイヤーに分割されるかを見ることができます。

どのように機能するのか?

レンダリングされたコンテンツを変換し、それを元の画像にマッピングした上で、仮想オブジェクトを表面に配置するには、多面的なアプローチが必要です。実際、これらのレイヤーの中には、他よりもはるかに重要なものがあります。プロセスのほんの一部だけを見ても、毎秒どれほど多くの処理が行われているかがよく分かります。

これは、環境がフラットな画像に変換される単純な仕組みです。その後、分析のために多数のレイヤー(チャンネル)に分割されます。

上記で説明した通り、レイヤーは分離され、アルゴリズムはカメラが見るすべてのものを区別できるように学習します。例えば、背景は手から分離され、手はその影から分離される、といった具合です。

画面は左から右の順番です:

  1. 表面に配置された仮想画像。ユーザーにはスマートフォンの画面上で見えています。
  1. 表面上のシートの認識
  1. 紙が背景からおおまかに分離されます。テーブルの表面上のノイズが見え、手の影が一つの物体として認識されています。
  1. 手と表面の明確な分離。
  1. 描かれたコンテンツのみの検出。
  1. 環境に対する、描かれたコンテンツの認識。

アプリが各オブジェクトを明確に認識できるようになると、それらを元の画像と照合します。忘れてはならないのは、カメラと手がフレーム内で絶えず動いている中で、アルゴリズムの各処理が実行されているということです。

アルゴリズムの最初のバージョンで、多くの誤った照合が発生していた例です。

こちらは、後のバージョンのアルゴリズムでの良好な照合の例です。

詳細には立ち入りませんが、このアプローチはユーザー体験を向上させるための、製品が抱える多くの問題やタスクを解決します。取得したデータを応用できる範囲を広げ、それによって私たちは製品を新たなレベルへと引き上げることができます。これは、機械学習とニューラルネットワークのデータに支えられた、本格的なアシスタントなのです。

SketchARはAppStoreでほぼ1年間、Play Marketで半年間、そしてMS Hololensでも提供されてきました。ユーザーやプレスからの熱烈なレビューにもかかわらず、同様の機能を持つ競合アプリはいまだに存在しません。これは、この問題の複雑さと私たちのアルゴリズムの独自性を裏付けています。

アップデートをフォローして、もっと絵を描いて、テクノロジーを愛してください。テクノロジーは私たちの成長を助けてくれますから…そしてもうすぐ人類を支配することになるでしょう! ;)

すべての人にアートを!

この記事をシェア

関連記事

会社のアップデートを購読する

新着記事、製品アップデート、コミュニティの話題をメールでお届けします。スパムはありません。