はじめに
本記事では、ARKit のフェイストラッキング機能を簡単に試す方法を紹介する。例として、まばたきを検出する iPhone アプリを制作する。ARKit とは Apple 社が提供する iOS・iPadOS 向けの AR 開発用フレームワークであり、カメラやセンサーを利用して現実世界とデジタル情報を融合させることができる。その中の機能でも「フェイストラッキング機能」は、ユーザーの顔の動きをリアルタイムで取得し、表情やまばたきなどを認識できる機能である。
フェイストラッキングによるまばたき検出
ここでは、ARKit のフェイストラッキング機能を利用して、まばたきを検出する簡単なプログラムを作成する。
公式サイトから提供されているサンプルプロジェクトをダウンロードする。
以下のように BlendShapeCharacter.swift の renderer の最後に print を追加する。
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let faceAnchor = anchor as? ARFaceAnchor
else { return }
let blendShapes = faceAnchor.blendShapes
guard let eyeBlinkLeft = blendShapes[.eyeBlinkLeft] as? Float,
let eyeBlinkRight = blendShapes[.eyeBlinkRight] as? Float,
let jawOpen = blendShapes[.jawOpen] as? Float
else { return }
eyeLeftNode.scale.z = 1 - eyeBlinkLeft
eyeRightNode.scale.z = 1 - eyeBlinkRight
jawNode.position.y = originalJawY - jawHeight * jawOpen
print(String(format: "%.6f", Date().timeIntervalSince1970), String(format: "%.6f", eyeBlinkRight), separator:",")
}
ARKit を利用したプログラムはシミュレーターでは動作せず、実機が必要となる。実機を接続し、ビルドする。
本記事では、Xcode 16.0、iOS 18.1.1 を用いた。
実機での動作の様子を示す。
上記のコードは Xcode の Console に時刻と右目の開閉情報を出力する。開閉情報の範囲は0.0〜1.0となる。完全に閉じているときは1.0、開いていくにつれて0.0に近付く。
詳細は以下を参照。
実際に計測した結果を示す。横軸が時間で、縦軸が eyeBlinkRight を1から引いたものになっている。目が開いているときに1.0に近づき閉じているときに0.0に近づく。14.4秒あたりから瞼が閉じ、14.7秒辺りで瞼が開いていることがわかる。参考文献によると、瞬きは0.3秒である。これは計測結果と一致している。ここからまばたきが正しく検出できていることがわかる。
その他のパラメータ一覧
ARKit では、目や口だけではなく、顔のさまざまな部位に対応した BlendShape が用意されている。
プログラムと瞬きのデータは以下で公開している。
参考文献



