9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

まりあのかわいいシールを貼れるARアプリを作ってみた

Posted at

これは、プリッカソン Advent Calendar 2019 9日目の記事です。

「プリッカソン」については主催者のなかひこくんが1日目の記事で紹介しているので、そちらをご覧ください。

プリッカソンに私は#8で初めて参加し、#9にも参加しました。そのときに「まりあのかわいいシールを貼れるARアプリ」を作っていたので、この記事ではそれを紹介しようと思います。

「まりあのかわいいシール」とは

「キラッとプリ☆チャン」シーズン2で、金森まりあちゃんがかわいいものにシールをペタペタとたくさん貼るシーンが度々あります。
スクリーンショット 2019-12-08 18.06.06.png
最初は「頭おかしい奴(褒め言葉)が出てきたぞ」と思いました。しかし、まりあの「かわいい」は、ただかわいいものが好きとかそういうものではなく、全てを肯定し受け入れて、それを「かわいい」という言葉で表現しているということが次第にわかってきます。実はとんでもなく凄い子でした。

その「まりあのかわいいシール」はプリズムストーン店舗/WEB SHOPで購入1 2できるのですが、たくさん貼ろうとするとお金がいくらあっても足りません。
90AB90EF-7F08-45DB-AF64-FAB7714DED0D.jpeg
そんなわけで「まりあのかわいいシールを貼れるARアプリ」を作ろうと思い立ちました。

ハンドトラッキング

作中でまりあがやっているのと同じように指先で貼れるようにするには、ハンドトラッキングが必要です。結論から言うと、ハンドトラッキングは今のところあまりうまくいっていません。作り始めた当初もうまくいくとは思っていませんでしたが、「やってみなくちゃわからない、わからなかったらやってみよう」3の精神でやってみました。

プリッカソン#8,#9では、次の2つのやり方を試しています。

  • ARKit3のPeople Occlusionを使う
  • MediaPipeのハンドトラッキングを使う

ARKit3のPeople Occlusionを使う

ARKit3のPeople Occlusionは、iPhoneのカメラの前に手だけかざしてもわりとしっかり手の内側と外側を分けてくれるので、これを使えばある程度手の動きを認識することができるのではないか、と考えました。

結果はこんな感じでした。

これは、親指と人差し指で輪を作ったことを認識しています。正確には「People Occlusionで認識した領域内に穴があり、その面積が一定の範囲内かどうか」を検出しています。

この方式だと、一応手の動きに合わせてシールを貼ることはできますが、指先を認識することは難しそうです。

MediaPipeのハンドトラッキングを使う

Googleが公開しているMediaPipeというフレームワークがあり、これには顔検出や物体検出、ハンドトラッキングなどの機能が含まれています。これを使えば指先の認識ができそうです。

結果はこんな感じに。

指先の認識は一応できていますが、いくつか問題がありました。

  • まだ非常に不安定:わりとすぐクラッシュします。メモリリークも激しいです。
  • 重い:MediaPipe単体で使えばそれなりに動きますが、ARKitと組み合わせると結構重くなってしまいました。
  • デプスが手首からの相対値?:3Dモードで動かすとデプス値らしきものを取れるのですが、その値をよく見てみるとどうやら手首?からの相対値のようでした。これでは指先を認識できてもシールの奥行き方向の位置を指先に合わせるのが難しいです。上の動画では指先のデプスは適当な固定値にしています。

ハンドトラッキングは一旦諦める

どうやらこのままハンドトラッキングに拘っていてもなかなか先に進みそうもありません。萌黄えもちゃんの曲「えもめきピッカーン」には次の一節があります。

失敗したっていいんだよ「うぇい!」
問題点を見つけよう「うぇい!」
次のすごいプラン話したい

ということで、一旦ハンドトラッキングは諦めて別の方法を試してみます。

画像トラッキング

かわいいシールの実物をトラッキング用の画像として使います。これならわりと簡単にできそうです。当然これはこのアプリを作ろうと思い立ったとき最初に考えましたが、指先を認識したいという気持ちが強すぎました。

やってることは、ARKitのサンプルコードの Detecting Images in an AR Experience を少し改造してるだけです。ARKitに詳しい人なら簡単だと思うので詳細は省きますが、次のことをしています。

  • かわいいシールの画像をトラッキング用の画像として事前に登録しておく
  • シールの実物をトラッキング
  • トラッキングしたシールのワールド座標を起点とし、シールが向いている方向にレイキャスト
  • レイが交差した点までの距離が3cm以内ならARシールを貼る

今後の予定

一旦、画像トラッキング方式で開発を進めます。とりあえず次の機能を実装したいです。

  • 貼ったシールを他の端末と共有する。これは同じローカルネットワークに接続している端末間であれば、ARKit3の機能だけでわりと簡単にできますが、モバイルネットワークを通して共有したり貼ったシールを永続化するところまでやりたいです。

最終的には、ライブ会場とかプリズムストーンショップとかをかわいいシールだらけにしたい。また、街中でふとアプリを起動してカメラ越しに見たらかわいいシールが貼られてた、ってなったらとっても楽しかわいいですよね。4

  1. まりあのかわいいステッカー

  2. まりあのかわいいフレークシール

  3. 主人公チーム「ミラクル☆キラッツ」の3人がよく言うセリフ

  4. App Storeに出すには「まりあのかわいいシール」のままだと著作権的にアウトになってしまうため、そのへんをどうにかしなければなりませんが…

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?