![見出し画像](https://assets.st-note.com/production/uploads/images/28969401/rectangle_large_type_2_bc9f0ad475016836e3fb7f6e93a0086b.png?width=1200)
手の姿勢推定/ジェスチャー認識(Vision) #WWDC20 #iOS14
Visionに手の姿勢推定を行うAPIが追加された。手の姿勢推定をiOSで行いたい場合、今までであればGoogleのMediaPipeを利用するのが一般的だったと思うが、
MediaPipeのiOSサンプルをビルドする手順|shu223|note https://t.co/dcQGv4eK9P
— Shuichi Tsutsumi (@shu223) June 16, 2020
MediaPipeはC++ベースで書かれていて、iOSのプロジェクトに組み込みやすいように配慮もされてなかったので、今回Visionで手軽にできるようになったのは非常にありがたい。
なおAppleはHand Pose Detectionと呼んでいるので「姿勢検出」と表現すべきかもしれないが、この分野では姿勢推定と呼ぶほうが一般的な気がするのでこう書くことにする。
## サンプル
まずはサンプルを試して実装を見てみる。
### とりあえず試す
こんな感じで、人差し指と親指をくっつけと、ペンのように空間にお絵かきできるようになる、というコンピュータビジョン+ARなサンプル。
### 実装を見てみる
コンセプトとしては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での処理と変わらない。
### ジェスチャー判定の実装
「大筋としては」変わらないと書いたが、あくまでカメラからの画像データを入力して検出結果を得るまでの話。その結果を用いて「親指と人指をくっつける」ジェスチャーを判定する処理がポイントになってくる。
ここから先は
![](https://assets.st-note.com/production/uploads/images/30546/profile_06a075ed16533f7e4dbf64e4f60f99be.jpg?fit=bounds&format=jpeg&quality=85&width=330)
#WWDC2020 の勉強メモ
堤がWWDC 2020およびiOS 14についてセッションやサンプルを見つつ勉強したことを記事にしていくマガジンです。NDAの都合上、Ap…
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/