開発者ドキュメントクックブックiOS SDK背景ぼかしとバーチャル背景

背景ぼかしとバーチャル背景

SkyWay iOS SDKは、カメラ映像の背景にぼかしをかける背景ぼかし、および背景を任意の画像に差し替えるバーチャル背景の機能を提供しています。

注意 この機能は iOS 15.0 以降 でのみ利用可能です。iOS 14 以下のサポートが必要な場合は、#available(iOS 15.0, *) による可用性チェックを行ってください。

クラス機能名効果
BlurProcessor背景ぼかし背景にぼかし(ブラー)をかける
VirtualBackgroundProcessorバーチャル背景背景を任意の画像に置き換える

背景ぼかし(BlurProcessor)

BlurProcessor の初期化および適用

import SkyWayRoom // 1. 背景ぼかしプロセッサを作成 let blurProcessor = BlurProcessor(blurRadius: 20, inferenceInterval: 2) // 2. CameraVideoSource に背景ぼかしプロセッサを追加 let videoSource = CameraVideoSource.shared() videoSource.add(blurProcessor)

BlurProcessorCameraVideoSource に追加すると、背景ぼかしが有効になります。 映像の送信については、カメラの選択 を参照してください。

BlurProcessor API の呼び出し

// 3. 背景ぼかし実行中に半径を変更 blurProcessor.blurRadius = 50 // 4. 背景ぼかし機能を一時停止 blurProcessor.isActive = false // 5. 背景ぼかし機能を完全に停止する videoSource.remove(blurProcessor)

バーチャル背景(VirtualBackgroundProcessor)

VirtualBackgroundProcessor の初期化および適用

import SkyWayRoom import UIKit // 1. 背景画像付きで初期化 let bgImage = UIImage(named: "virtual_background") let vbProcessor = VirtualBackgroundProcessor( backgroundImage: bgImage, inferenceInterval: 2 ) // 2. CameraVideoSource にプロセッサを追加 let videoSource = CameraVideoSource.shared() videoSource.add(vbProcessor)

VirtualBackgroundProcessorCameraVideoSource に追加すると、バーチャル背景が有効になります。 映像の送信については、カメラの選択 を参照してください。

VirtualBackgroundProcessor API の呼び出し

// 3. 実行中に背景画像を変更 vbProcessor.backgroundImage = UIImage(named: "beach_background") // 4. 背景なし(元映像)に戻す vbProcessor.backgroundImage = nil // 5. プロセッサ削除 videoSource.remove(vbProcessor)

ベストプラクティス

inferenceInterval はフレームレートに合わせて調整する

// 30fps の映像で Vision を約 10fps で実行したい場合 blurProcessor.inferenceInterval = 3 // 30 / 3 = 10fps // 60fps の映像でも同じ Vision 負荷を維持したい場合 blurProcessor.inferenceInterval = 6 // 60 / 6 = 10fps

qualityLevel はデバイス性能に応じて選択する

qualityLevel = .accurate は処理が重く、30fps の維持が困難になる場合があります。特に古い端末では inferenceInterval を大きくするか .balanced に落とすことを検討してください。

// 起動時に処理コア数によって切り替える例 if ProcessInfo.processInfo.processorCount >= 8 { processor.qualityLevel = .accurate } else { processor.qualityLevel = .balanced }

バーチャル背景の背景画像は事前にロードする

// 画像を事前ロードし、切り替え時はプロパティ代入のみ let backgrounds: [UIImage] = ["bg1", "bg2", "bg3"].compactMap { UIImage(named: $0) } vbProcessor.backgroundImage = backgrounds[selectedIndex]
  • vbProcessor.backgroundImage = UIImage(named: "bg\(selectedIndex)") のように切り替えのたびに UIImage(named:) を呼ぶと、毎回画像のデコード処理が発生するため避けてください。

isActiveadd / remove の使い分け

手法プロセッサインスタンスの維持Vision マスクのキャッシュ推奨タイミング
isActive = false維持される(プロセッサオブジェクトはメモリに残る)維持される(前回のマスク画像をそのまま保持)頻繁な ON/OFF
videoSource.remove()呼び出し元で参照を保持していれば維持されるリセットされる(次回 add 時にマスクが初期化)完全に無効化したい場合

頻繁に ON/OFF する場合は isActive の切り替えを推奨します。毎回 add / remove を呼ぶと Vision の初期化コストが再発生します。

サンプルコード