Visionフレームワークを活用した猫のポーズ検出 #はてなエンジニアアドベントカレンダー2023

はてなエンジニアアドベントカレンダー2023 1日目の記事です。
アドベントカレンダー初日は id:yutailang0119 が担当します。

猫と生活しています

誕生日を迎えた 30回目 - がんばってなんか書く の引っ越しに合わせて、猫がやってきました。
オスの茶虎 "ビビ" です。

ビビ

今回は、WWDC 23でVisionフレームワークに追加されたAnimal Body Poseの検証を、ビビに手伝ってもらいます。

Animal Body Pose

Detecting animal body poses with Vision | Apple Developer Documentation のサンプルアプリを使って撮影します。
実行環境は、iPad mini (6th generation) iPadOS 17.1.1です。

ビビのポーズ検出

スクリーンショットでの紹介ですが、サンプルアプリではVideoのインプットを、リアルタイムに検出します。
公開されているサンプルで、おもしろい写真が撮れることがわかりました。

VNDetectAnimalBodyPoseRequest

Animal Body Poseには、ポーズ検出を行うVNDetectAnimalBodyPoseRequest を使います。
関節をはじめとする25のジョイントを検出できます。
現在は、猫と犬をサポートしています。

より詳しくは、WWDC23のビデオを参照してください。

developer.apple.com

ちなみに、人間に対してはVNDetectHumanBodyPoseRequestを使用します。
Detecting Human Body Poses in Images | Apple Developer Documentation

VNRecognizeAnimalsRequest

VNDetectAnimalBodyPoseRequest は2023年OSがサポートするAPIですが、以前のOSでも使用できるAPIがあります。
Visionフレームワークには、VNRecognizeAnimalsRequestがあり、動物の特定ができます。
サンプルアプリを変更して、猫自身の特定も行ってみました。

ビビ自身の検出

boundingBoxの扱いには難があります*1が、I/Oの処理はVNDetectAnimalBodyPoseRequestと同様です。
VNImageRequestHandler.perform(_:)には、複数のVNRequestを実行可能なので、VNDetectAnimalBodyPoseRequestVNRecognizeAnimalsRequestを同時に処理できます。

さいごに

画像処理やMLに踏み込む必要なく、Visionフレームワークを活用すると、猫自体の検出とポーズ検出を行なうことができました。
猫のポーズに合わせて写真を撮るアプリなら、簡単に作れそうです。
Apple Vision Proのために、Visionフレームワークの練習に励んでいきましょう!

明日のはてなエンジニアアドベントカレンダー2023担当は id:pokutuna です!

ビビへのファンレターもお待ちしています!!!

おまけ

オフショット集