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)BlurProcessor を CameraVideoSource に追加すると、背景ぼかしが有効になります。
映像の送信については、カメラの選択 を参照してください。
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)VirtualBackgroundProcessor を CameraVideoSource に追加すると、バーチャル背景が有効になります。
映像の送信については、カメラの選択 を参照してください。
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 = 10fpsqualityLevel はデバイス性能に応じて選択する
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:)を呼ぶと、毎回画像のデコード処理が発生するため避けてください。
isActive と add / remove の使い分け
| 手法 | プロセッサインスタンスの維持 | Vision マスクのキャッシュ | 推奨タイミング |
|---|---|---|---|
isActive = false | 維持される(プロセッサオブジェクトはメモリに残る) | 維持される(前回のマスク画像をそのまま保持) | 頻繁な ON/OFF |
videoSource.remove() | 呼び出し元で参照を保持していれば維持される | リセットされる(次回 add 時にマスクが初期化) | 完全に無効化したい場合 |
頻繁に ON/OFF する場合は isActive の切り替えを推奨します。毎回 add / remove を呼ぶと Vision の初期化コストが再発生します。