ハイライト
SoundAnalysis フレームワークには 300 以上のカテゴリに対応するサウンド分類子が組み込まれており、カスタム モデルをトレーニングすることなく、わずか数行のコードでオーディオ内の特定のサウンドを識別できます。
主な内容
2019 年、Apple は開発者が CreateML を通じて独自の音声分類モデルをトレーニングできるようにしました。しかし、データの収集、モデルのトレーニング、パラメーターの調整に対するこれらの障壁が、多くの人々の妨げとなっています。
WWDC2021 では、この問題が完全に単純化されます。SoundAnalysis フレームワークには、300 以上のサウンド カテゴリをカバーする、事前トレーニングされたサウンド分類器が組み込まれています。開発者は機械学習を理解したり、トレーニング データを準備したりする必要はありません。
デモでは、Jon が Mac のマイクを使用して環境内の音をリアルタイムで検出します。音楽を再生すると、分類器は「音楽」と「歌」の両方を認識しました。お茶を淹れる際に「水が注がれる」音を感知します。すべての計算はローカルで行われ、音声はクラウドにアップロードされません。
Kevin は、より現実的なシナリオを提示します。彼は大量のビデオ映像を持っており、「カウベル」サウンドが含まれるクリップを見つけたいと考えています。彼は、組み込みの分類子を使用してプログラムを作成し、macOS のショートカット コマンドを使用して、すべてのビデオ ファイルを自動的にスキャンし、ターゲットのサウンドを見つけて、対応するフラグメントを傍受しました。プロセス全体が自動化されています。
##詳細
組み込み分類器でサポートされているサウンドのリストを取得します。
使用SNClassifySoundRequest組み込み分類器でサポートされているすべてのサウンド カテゴリをクエリする新しい初期化メソッド。
func getListOfRecognizedSounds() throws -> [String] {
let request = try SNClassifySoundRequest(classifierIdentifier: .version1)
return request.knownClassifications
}
キーポイント:
classifierIdentifier: .version1組み込み分類器の選択knownClassificationsサポートされているすべてのサウンドタグ (合計 300 以上) を返します。- 動物、楽器、人の声、乗り物、警報器、工具、液体などのカテゴリをカバーします。
音声ファイルを分類する
指定された音声ファイルに対して分類を実行するための分類リクエストとアナライザーを作成します。
let request = try SNClassifySoundRequest(classifierIdentifier: .version1)
let analyzer = try SNAudioFileAnalyzer(url: url)
var observer: SNResultsObserving // TODO
try analyzer.add(request, withObserver: observer)
analyzer.analyze()
キーポイント:
SNAudioFileAnalyzer音声ファイルの分析用 (08:59)add(_:withObserver:)リクエストとオブザーバーをアナライザーにバインドするanalyze()非同期分析を開始する
結果オブザーバーを実装する
観察者は分類結果を受け取り、目的音が検出されたかどうかを判断します。
class FirstDetectionObserver: NSObject, SNResultsObserving {
var firstDetectionTime = CMTime.invalid
var label: String
init(label: String) {
self.label = label
}
func request(_ request: SNRequest, didProduce result: SNResult) {
if let result = result as? SNClassificationResult,
let classification = result.classification(forIdentifier: label),
classification.confidence > 0.5,
firstDetectionTime == CMTime.invalid {
firstDetectionTime = result.timeRange.start
}
}
}
キーポイント:
- 継承
NSObjectそしてフォローしてくださいSNResultsObserving合意 (09:52) SNClassificationResult複数のカテゴリとその信頼度が含まれますclassification(forIdentifier:)指定したタグの結果を抽出する- 信頼度のしきい値を 0.5 に設定するのは例の値であり、実際のシナリオに応じて調整する必要があります。
result.timeRange.start音が発生した時刻を記録する
ウィンドウ期間と検出精度
オーディオ信号は、分析のために重複する時間ウィンドウに分割されます。ウィンドウの継続時間は検出精度に影響します。
// 设置窗口时长
request.windowDuration = CMTime(seconds: 1.0, preferredTimescale: 1)
// 查询支持的窗口时长范围
let constraint = request.windowDurationConstraint
キーポイント:
- 短いウィンドウ (0.5 秒など) は、ドラムビートなどの短い音の検出に適しており、時間の位置がより正確です (12:06)
- 長いウィンドウ (秒など) は、サイレンなどの継続的に変化する音の検出に適しており、より多くの特徴的な情報が含まれます (12:38)
- 組み込みの分類子は、0.5 秒から 15 秒までのウィンドウ期間をサポートします (13:28)
- 開始点として 1 秒以上を推奨します
信頼度閾値の選択
内蔵分類器の信頼度は独立しており、異なる音に対して異なるしきい値を設定できます。
キーポイント:
- 組み込み分類器のラベル信頼度は 加算されず、各ラベルは個別にスコアリングされます (14:21)
- しきい値を高くすると誤検出が減少しますが、弱い信号を見逃す可能性があります (14:44)
- サウンドごとに異なる閾値を設定可能
- ウィンドウの長さを変更すると信頼スコアに影響します (15:06)
Audio Feature Print: カスタム モデル用の特徴抽出機能
CreateML がカスタム音声分類モデルをトレーニングする場合、デフォルトで、組み込みの分類器の特徴抽出ツール Audio Feature Print が使用されます。
キーポイント:
- Audio Feature Print はオーディオ波形を低次元の特徴ベクトルに変換します (16:41)
- 音響的に類似したサウンドは、特徴空間内でより近くなります。
- 前世代の特徴抽出器よりも小さく、高速で、より正確です (17:47)
- 0.5 秒から 15 秒までの柔軟なウィンドウ期間をサポート (18:01)
- CreateML のデフォルトのウィンドウの長さは 3 秒で、調整可能 (18:24)
重要ポイント
-
ビデオコンテンツの検索: ビデオライブラリにサウンドベースの検索機能を追加します。ユーザーが「赤ちゃんの泣き声」を検索すると、システムが自動的に対応するクリップを見つけます。
-
リアルタイムの環境認識: ドアベル、アラーム、赤ちゃんの泣き声などの重要な音を検出してリマインダーを発行する、視覚障害のあるユーザー向けの補助アプリケーションを開発します。
-
スマート ホーム オートメーション: ショートカットと組み合わせると、特定の音 (ガラスの割れる音、煙警報器など) が検出されると自動化プロセスがトリガーされます。
-
オーディオ コンテンツのレビュー: ライブ ブロードキャストまたはボイス チャット アプリケーションでは、不適切なサウンド コンテンツがリアルタイムで検出されます。
-
カスタムサウンド検出: CreateML を使用して特定のシナリオ (工場設備の異常音など) に合わせてサウンド モデルをトレーニングし、オーディオ フィーチャー プリントを使用してより高い精度を取得します。
関連セッション
- Create ML での音声分類モデルのトレーニング — WWDC19 の CreateML 音声分類トレーニング ガイド
- macOS の Meet ショートカット — サウンド分類を macOS ショートカット ワークフローに統合します
- Swift で構造化された同時実行性を探る — Swift でオーディオ分析タスクを同時に処理する
- Swift アクターを使用して可変状態を保護する — マルチスレッドのオーディオ処理で共有状態を保護する
コメント
GitHub Issues · utterances