メインカメラへのアクセス - Enterprise APIs for visionOS
Enterprise APIs for visionOS 解説シリーズ、今回は「メインカメラへのアクセス」です。
Apple Vision Pro の前面カメラを活用することで、業務アプリや産業用途での視覚データ取得が可能になります。例えば、現場作業員の支援や医療分野でのリモート診断といった用途が考えられます。
サンプルプロジェクトはこちら。
サンプルの動作動画はこちら。
サンプルの実行手順
先ほどのドキュメントページよりサンプルプロジェクトをダウンロードします。
zipファイルを展開して「AccessingTheMainCamera.xcodeproj」を開きます。
Xcode でプロジェクトを開いたら「Enterprise.license」ファイルを差し替えます。
サンプルにはテキストファイルが入っているので、一度このファイルを削除して、取得した正規の「Enterprise.license」をプロジェクトにコピーします。
プロジェクト設定画面を開き、「General」タブで visionOS のバージョンを指定します。
Enterprise APIs for visionOSはvisonOS 2.0以上が対応するので「2.0」を指定します。
サンプルでは設定済みのためスキップしますが、「Capability」の追加として「Signing & Capabilities」より「+ Capability 」ボタンを押して「Main Camera Access」を選択します。
Capabilityまで設定したら、実機にビルドして転送します。
カメラ画像は Immersive Space のみ有効になるため、ボタンを押して切り替えると表示されます。
コードの簡単な解説
カメラ画像取得のコードは MainCameraView.swift にあり、MainCameraView は ContentView.swift内で呼ばれます。
MainCameraViewでは カメラのフレームデータをCVPixelBufferで取得し、image に設定しています。
画像処理などを行う場合は、CVPixelBufferで取得したデータを利用します。
import ARKit
import RealityKit
import SwiftUI
struct MainCameraView: View {
@State private var arkitSession = ARKitSession()
@State private var pixelBuffer: CVPixelBuffer?
let emptyImage = Image(systemName: "camera")
var body: some View {
let image = pixelBuffer?.image ?? emptyImage
image
.resizable()
.scaledToFit()
.task {
// カメラアクセスがサポートされているか確認します。サポートされていない場合は処理を中断します。
guard CameraFrameProvider.isSupported else {
print("CameraFrameProvider is not supported.")
return
}
let cameraFrameProvider = CameraFrameProvider()
try? await arkitSession.run([cameraFrameProvider])
// 左側のメインカメラがサポートするビデオフォーマットを読み込みます。
let formats = CameraVideoFormat.supportedVideoFormats(for: .main, cameraPositions: [.left])
// 最も高解像度のフォーマットを見つけます。
let highResolutionFormat = formats.max { $0.frameSize.height < $1.frameSize.height }
// 非同期のカメラフレームシーケンスをリクエストします。
guard let highResolutionFormat,
let cameraFrameUpdates = cameraFrameProvider.cameraFrameUpdates(for: highResolutionFormat) else {
return
}
for await cameraFrame in cameraFrameUpdates {
if let sample = cameraFrame.sample(for: .left) {
// フレームの画像をレンダリングするために、`pixelBuffer` を更新します。
pixelBuffer = sample.pixelBuffer
}
}
}
}
}
まとめ
Apple Vision Pro の前面カメラの画像を取得できるようになりました。
取得した画像データを利用して、リアルタイムの物体検出、リモートアシスタント、ARコンテンツの強化など、画像処理や機械学習処理に利用ができます。
Discussion