はじめに
こんにちは、エンジニアのkeitaMaxです。
以下の記事で紹介されているソースを動かしてみてiOSのFace Trackingを自分なりに理解してみようと思います。
ソースをそのまま動かしてみる。
まずは前回作成したexample-ar-app
に組み込んでみようと思います。
import SwiftUI
import RealityKit
import ARKit
struct FaceTrackingView : View {
var body: some View {
ARFaceTrackingContainer().edgesIgnoringSafeArea(.all)
}
}
struct ARFaceTrackingContainer: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
// ARViewをゼロサイズのフレームで作成
let arView = ARView(frame: .zero)
// Face Trackingの設定を作成
let configuration = ARFaceTrackingConfiguration()
// Face Trackingの設定でセッションを開始
arView.session.run(configuration)
// 顔に表示する3Dモデルを作成
let mesh = MeshResource.generateBox(size: 0.15, cornerRadius: 0.01)
let material = SimpleMaterial(color: .red, roughness: 0.1, isMetallic: false)
let modelEntity = ModelEntity(mesh: mesh, materials: [material])
// 顔の位置にアンカーを作成
let anchor = AnchorEntity(.face)
// 3Dモデルを顔のアンカーに追加
anchor.addChild(modelEntity)
// 顔のアンカーをARViewのシーンに追加
arView.scene.addAnchor(anchor)
// 設定されたARViewを返す
return arView
}
// ARViewを更新するメソッド
func updateUIView(_ uiView: ARView, context: Context) {}
}
#Preview {
FaceTrackingView()
}
これをビルドして使ってみると、顔の部分にキューブがつきました。
※画像を撮ったのですが、Qiitaの容量画像の制限に引っかかってしまったので後ほどあげます。
let mesh = MeshResource.generateBox(size: 0.15, cornerRadius: 0.01)
この部分で顔に貼る物体を作成しているので、球体にしたい場合は以下のようにすると球体になります。
let mesh = MeshResource.generateBox(size: 0.15, cornerRadius: 1.0)
困ったこと
本当は目のトラッキングをできるようにしたいなと思っていたのですが、調べてみたもののやり方がわからなかったです。
この公式のアプリをなんとかSwift UIでかきたいと思って色々やってみてはいるのですが、なかなかうまくいかないです。
もし、Swift UIで目のトラッキング方法を知っている方がいらっしゃいましたら教えていただけると幸いです。
おわりに
Story Boardで書いてあるものをサンプルのアプリをSwift UIで書いてみようと思っているのですが、なかなかうまくいかなかったです。
もっとSwiftとSwift UIについての理解を深めてから再挑戦しようかなと思っています。
やり方が違ったり、もっといいやり方があるというご指摘がある方はコメントしていただけると幸いです。
最後まで読んでいただきありがとうございました。
参考文献