見出し画像

手の姿勢推定/ジェスチャー認識(Vision) #WWDC20 #iOS14

Visionに手の姿勢推定を行うAPIが追加された。手の姿勢推定をiOSで行いたい場合、今までであればGoogleのMediaPipeを利用するのが一般的だったと思うが、

MediaPipeはC++ベースで書かれていて、iOSのプロジェクトに組み込みやすいように配慮もされてなかったので、今回Visionで手軽にできるようになったのは非常にありがたい。

なおAppleはHand Pose Detectionと呼んでいるので「姿勢検出」と表現すべきかもしれないが、この分野では姿勢推定と呼ぶほうが一般的な気がするのでこう書くことにする。

## サンプル

まずはサンプルを試して実装を見てみる。

### とりあえず試す

こんな感じで、人差し指と親指をくっつけと、ペンのように空間にお絵かきできるようになる、というコンピュータビジョン+ARなサンプル。

画像2

### 実装を見てみる

コンセプトとしてはARっぽいがARKitは使ってなくて、カメラはAVFoundation、お絵かきはUIBezierPathで実装されている。このあたりの実装に新しい部分はない。

手の姿勢推定の実装としては、VNDetectHumanHandPoseRequestオブジェクトを生成しておき、

private var handPoseRequest = VNDetectHumanHandPoseRequest()

VNImageRequestHandlerで画像データを入力して実行するだけ。(以下のコードは一部簡略化)

let handler = VNImageRequestHandler(cmSampleBuffer: sampleBuffer, orientation: .up, options: [:])
try! handler.perform([handPoseRequest])

検出結果はVNRecognizedPointsObservation型で得られる。

guard let observation = handPoseRequest.results?.first as? VNRecognizedPointsObservation else {
   return
}

以上。ここに絡んでくる新クラスはVNDetectHumanHandPoseRequestとVNRecognizedPointsObservationだが、大筋としてはこれまでのVisionでの処理と変わらない。

画像3

### ジェスチャー判定の実装

「大筋としては」変わらないと書いたが、あくまでカメラからの画像データを入力して検出結果を得るまでの話。その結果を用いて「親指と人指をくっつける」ジェスチャーを判定する処理がポイントになってくる。

ここから先は

2,370字 / 1画像
昨年は書籍という形にまとめましたが、今年はこのマガジンに集約することにしました。 最初は記事が少ないので格安から開始して、充実してくるごとに本来あるべき価格に戻していく予定です。というわけで早いうちに買うと非常にお得です。 昨年の書籍は約80ページ+本に載せなかった事項もたくさん、ということで最終的にはそれなりの量になるのではと思います。

堤がWWDC 2020およびiOS 14についてセッションやサンプルを見つつ勉強したことを記事にしていくマガジンです。NDAの都合上、Ap…

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/