LoginSignup
9
8

More than 3 years have passed since last update.

VisionでHand Pose Detection 手のトラッキング

Last updated at Posted at 2020-12-19

Dec-19-2020 23-39-38.gifDec-19-2020 23-39-55.gif

iOS14から手のポイントを認識できるようになりました。
上のお絵かきはAppleのサンプルプロジェクトです。
この記事では、画像から手のポイントを取る手順を紹介します。

手順

リクエスト実行までは、いつものVisionと同じです。

1.Visionをインポート。


import Vision

2.リクエストを作成。


var handPoseRequest = VNDetectHumanHandPoseRequest()
handPoseRequest.maximumHandCount = 1 // 検出するての数

3.ImageRequestHandlerで実行。

AVFoundationのCaptureOutputメソッドなどでフレームのPixelBufferを当て込みます。

let handler = VNImageRequestHandler(cvPixelBuffer:pixelBuffer, orientation: .up, options: [:])
do {
    try handler.perform([handPoseRequest!])
    guard let observation = handPoseRequest?.results?.first as? VNHumanHandPoseObservation else { return }
    // maximumHandCountで設定した手の数だけObservationを取得できます。
} catch let error {
    print(error)
}

4.指の各ポイントへのアクセス

例えば、人差し指の先のポイントへのアクセスは以下。

let indexFingerTip = try observation.recognizedPoints(.all)[.indexTip]
print(indexFingerTip)

Optional([0.984453; 0.562278])

ポイントは与えた画像の向きなどによって原点が変化するので、X軸Y軸を確認しましょう。

取得できるポイント一覧

5本の指それぞれの先の、第一関節、第二関節、付け根と、手首の21ポイントが取得できます。

第一関節 第二関節 付け根
親指 .thumbTIP .thumbIP .thumbMP .thumbCMC
人差し指 .indexTip .indexDIP .indexPIP .indexMCP
中指 .middleTip .middleDIP .middlePIP .middleMCP
薬指 .ringTip .ringDIP .ringPIP .ringMCP
小指 .littleTip .littleDIP .littlePIP .littleMCP

手首は.wrist

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium

9
8
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
8