頭一つ抜けたARアプリを作りたい人向け！画像処理ライブラリまとめ

## 頭一つ抜けたARアプリの例

この記事のライブラリを使えば↓みたいに「人の姿勢ごとに処理をする」など**他とは違うARアプリ**を作れるようになれるかも...!?

![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474440/f24ce38b-d615-5e2b-f092-d36f652eb905.gif)


# 概要
この記事はARKitやARCoreのような既存のARSDKでは満足できない人たちのために、ARアプリに利用できる画像処理ライブラリを紹介していきます。

# 開発環境
Windows 10 Pro
Mac OS Big Sur 11.2
iPhone XR
Google Pixel 4a

#ライブラリ一覧
[1.VisionFramework](#1-visionframework)
[2.MediaPipe](#2-mediapipe)
[3.coreML](#3-coreml(createml))
[4.iOSの深度推定](#4-iosの深度推定)
[5.Androidの深度推定](#5-android-の深度推定)
[6.arfoundation](#6-arfoundation)

#1. VisionFramework
###頭抜けポイント　
iOSアプリに組み込むのがめちゃくちゃ簡単！

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474440/e90e00f6-427a-a3a2-ce49-89925a7fa57b.png">

###できること
- 顔認識(face tracking)
    - 目、鼻、口、頬の輪郭など検出可能
- 手認識(hand tracking)
- 上半身検出
- 姿勢推定(body tracking)
- 姿勢ごとの分類(action classifier)
- 文字の検知
- バーコードの検知
- 矩形の検知

###説明
iOS向けの画像系機械学習フレームワークです。機械学習の知識を持っていない人でも簡単に画像処理をすることができます。
特にiosでのハンドトラッキングはvision frameworkに追加されるまで、後述するMediaPipe経由でしか実装できなかったので嬉しい機能です！

分析結果の座標は2次元座標(x.y)なので、何か表示するときはUIKitを使うことになると思います。
この時注意するのは座標の原点が異なることです。
vision frameworkは左下、UIkitは左上になります。

また、arkitとの併用も一応可能ですが処理が重くなることがあります。(ハンドトラッキングなど)

#2. MediaPipe
###頭抜けポイント　
クロスプラットフォームでAndroid,iOS,webブラウザで動かすことができる！

![スクリーンショット 2021-03-05 11.38.50.png](https://google.github.io/mediapipe/images/mobile/holistic_sports_and_gestures_example.gif)

###web版デモサイト
- [ハンドトラッキング](https://codepen.io/mediapipe/pen/RwGWYJw)
- [フェイストラッキング](https://codepen.io/mediapipe/details/KKgVaPJ)
- [上半身検出](https://codepen.io/mediapipe/pen/LYRRYEw)

###できること
- フェイストラッキング(face tracking)
    - 目、鼻、口、頬の輪郭など検出可能
- フェイスメッシュ(face mesh)
    - 468のランドマークを取得できるそうです。
    - 顔のランドマークの数は1番多いのかな？
- 上半身検出
    - 顔(468)・手(21)・体(33)の合計543のランドマークを取得します。
- 虹彩検出
- ハンドトラッキング(hand tracking)
- 姿勢推定(body tracking)
- 髪検出(Hair Segmentation)
- 物体検出(Object Detection)
- 3次元物体検出(Objectron)
    - 通常の物体検出は2次元(x,y)ですが、これは3次元(x,y,z)で検出してくれます。
    - 現在は自転車・ペットボトル・本・カメラ・四角い箱・椅子・コップ・靴を検出できます。
    - Objectronについては友人が詳しく記事を書いてくれているので興味があればそちらを！
        - [【MediaPipe】超簡単！自分の靴にバーチャルな靴を重ねるだけのアプリを作る](https://qiita.com/akicchi/private/bab85ddbb7e17e9ca42c)

###説明
mediapipeは動画に対して推論を実行するMLパイプラインを作るフレームワークです。
Googleが作っているのでAndroid向けのソリューションが多いですね。

ですがクロスプラットフォームなのでiOSやweb,Unityなどでも使えます。
web版はpcのブラウザだと十分なfpsですが、モバイル端末のブラウザだと十分にfpsがでないです。


#3. coreML(createML)

###頭抜けポイント　
独自の分類器を作ることができる！

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474440/3c59e9cb-f2b9-d4cf-a7da-116ff65d784c.png">

###できること
- 画像識別
- オブジェクト検出
- スタイル変換
- アクション識別
- アクティビティ識別
- 音声識別


###説明
coreMLは機械学習の知識のないアプリケーションエンジニア向けのiOS機械学習フレームワークです。
vision frameworkとの違いは、画像処理だけではなく音声認識やApple Watchを使ったアクティビティ識別などができます。

また、これらは全てcreateMLで**独自の分類器**を作ることができます！
Xcodeを入れるだけで環境構築が完了で、ほぼドラッグ&ドロップだけで学習ができます。(めちゃくちゃ簡単)
冒頭で紹介した自分のストレッチアプリもcoreML,createMLのアクション識別から独自の類器を作成しました。

自分がcoreMLとcreateMLについて使い方を詳しく紹介している記事があるので良かったら一緒に見てください！
[swift初心者がAction Classifierを使いこなすまでにやったこと(サンプル付き)]
(https://qiita.com/hibiking/items/ae58ebcbcb6b2740cf77)


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Action Classifierで<br><br>「バンザイを認識」<br><br>してみました！<br><br>バンザイして喜んでる時に何かエフェクトとかつけられたら面白そう<a href="https://twitter.com/hashtag/CoreML?src=hash&amp;ref_src=twsrc%5Etfw">#CoreML</a> <a href="https://twitter.com/hashtag/AR?src=hash&amp;ref_src=twsrc%5Etfw">#AR</a> <a href="https://twitter.com/hashtag/Vision?src=hash&amp;ref_src=twsrc%5Etfw">#Vision</a> <a href="https://twitter.com/hashtag/Apple?src=hash&amp;ref_src=twsrc%5Etfw">#Apple</a> <a href="https://t.co/khwpmtObe5">pic.twitter.com/khwpmtObe5</a></p>&mdash; ひびき@学生AR開発マン (@hibiking3456789) <a href="https://twitter.com/hibiking3456789/status/1342172374293069824?ref_src=twsrc%5Etfw">December 24, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#4. iOSの深度推定

###頭抜けポイント　
Lidarを使えば高精度でスキャンできる！


<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474440/60d34c9a-4b57-b2a1-f845-deabbf6c51f4.jpeg">


###できること
- 撮影済み画像からの深度推定
- 撮影済み動画からの深度推定
- リアルタイムでの深度推定
- 2次元の画像から3次元点群の生成
- 人と背景の分離(Portrait Effects Matte)
    - Zoomのバーチャル背景のようなやつです

###iOSの深度取得の種類
- 2つ(もしくは3つ)の背面カメラから視差での推定
- 前面にあるTrueDepthカメラでの取得
    - face idなどで使われています
- 背面にあるLidarでの取得
    - iPhone12ProMaxなどの一部iPhone,iPadのみ



###説明

深度推定とは赤外線センサーや機械学習を使い画像の奥行きを推定することです。
BOOTHで販売しているこの本がとてもわかりやすかったです！
[Depth in Depth - iOSデプス詳解](https://booth.pm/ja/items/1313752)


#5. Android の深度推定

###頭抜けポイント　
スマホのセンサーのみで震度情報を取得するからARCore1.18も対応しているなら機種なんでも扱える！

<img width="250" alt="ファイル名" src="https://developers.google.com/ar/develop/platform-agnostic/depth/images/depth-white-wall.gif">

###できること
- 撮影済み画像からの深度推定
- 撮影済み動画からの深度推定
- リアルタイムでの深度推定
    - 基本的にはARCoreと使うようです
- 人と背景の分離(iOSのPortrait Effects Matteに似ている)

###説明
**depth api**と言うもので専用の機器などを取り付けなくても深度推定ができます。
震度センサーがあればより高精度な震度情報を取得できるようになります。
サンプルapkがGoogle Play Storeで配布されているので試してみてください！
[配布サイト](https://play.google.com/store/apps/details?id=com.google.ar.unity.arcore_depth_lab)

# さいごに
頭一つ抜けたARアプリは思いついたでしょうか？
個人的には導入と学習が簡単なvision frameworkがおすすめです。

###プチ宣伝
**ひびきんぐ**([@hibiking3456789](https://twitter.com/hibiking3456789))といいます!
仕事と趣味の両方でXR三昧の日々を送ってます。

私たち[DENDOH Inc.](https://dendoh.co.jp/)ではARを用いた購買体験や、3Dクリエイター向けのサービスを開発しています。
一緒に働きたい方、学生でインターンしたい方をエンジニアに限らず募集しています！
興味のある方は[ひびきんぐ](https://twitter.com/hibiking3456789)のDMまでお声掛けください！