追記1: 本スライドは2019年6月に開催されたイベント向けに作成したものです。
追記2: 「iOS 13の新機能をざっくり把握する本」という電子書籍を
100円
で販売しています。本文84ページ。SoundAnalysisの解説も入っています。
"SwiftUI"でGoogle検索
(日本語・直近1ヶ月)
"SoundAnalysis"でGoogle検索
(日本語・直近1ヶ月)
イマイチ注目されていない😇
音楽向け?
よくわからないユースケース?
・・・と思われているのでは?
話者認識
話者認識とは
「誰が話しているか?」を認識する
cf. 「何を話しているか」・・・音声認識
話者認識ができると・・・
- 議事録・翻訳・字幕
- 動画や音声の無音部分を自動でカット
- 動画や音声から特定話者の部分だけ抽出
etc.
今は静止画しか使用していないアプリでも、動画のサイズの問題が解決すれば、今後動画を利用する可能性も出てくるのでは?
Sound Analysis
Sound Analysisとは
- iOS 13で追加された音声解析のためのフレームワーク
- 今のところ音声の「分類」のみ可能
- "SoundAnalysis"(リファレンス) か "Sound Analysis"(WWDC)かはっきりしない...
何の音声を分類できるのか?
- 特定の種類の音声を分類するためのクラス等は何も用意されていない
- Core MLモデルを自作する必要がある
→ どんな音声でも大丈夫(できるとは言っていない)
音声分類用のCore MLモデルをつくる
Create ML
Sound Analysisで音声分類を実行する
音声分類を実行する
// ファイル用のアナライザを初期化
let audioFileAnalyzer = try! SNAudioFileAnalyzer(url: url)
// MLModelオブジェクトを渡してリクエストを作成
let request = try! SNClassifySoundRequest(mlModel: HogeSoundClassifier().model)
// リクエストをアナライザに追加
try! audioFileAnalyzer.add(request, withObserver: self)
// 解析開始
audioFileAnalyzer.analyze()
分類結果
SNClassificationResult
-
timeRange: CMTimeRange
- 処理区間の開始時間・終了時間
-
classifications: [SNClassification]
- 各分類クラスのラベル
- 各分類クラスの信頼度
(デモ) 動画内の話者を識別する
SoundAnalysis + Create MLで話者認識(2019年6月に開催された勉強会向けにつくったデモ) #iOS13https://t.co/qpExce47Ss pic.twitter.com/r2Dg27ueeH
— Shuichi Tsutsumi (@shu223) February 27, 2020
(会場での反応はこんな感じでした)
#wwdc_rusuban これめちゃくちゃ便利なのでは
— おもちメタル (@omochimetaru) June 17, 2019
Sound Analysis 使ってサザエさんの声を判定するデモすごい… #wwdc_rusuban
— たかしんぐ (@takashings) June 17, 2019
SoundAnalysis?Sound Analysis?のデモ、感動しました。
— haseken_dev (@haseken_dev) June 17, 2019
確かにこれは利用シーンが多そうですよね。。
トレーニングデータを増やせばもっと精度が上がるのでしょうか。#wwdc_rusuban
Sound Analysisすごい😱 #wwdc_rusuban
— 藤 治仁 (@From_F) June 17, 2019
サザエさん話者認識凄い! #wwdc_rusuban
— izumi (@izm256) June 17, 2019
すげえ 字幕の色わけとかに使えそう #wwdc_rusuban
— Sho Aoki (@shoaooki) June 17, 2019
実装概要 (学習側)
- トレーニング用音声データを用意
- CreateMLで学習 →
.mlmodel
ファイルを出力
実装概要 (アプリ側)
- 動画から音声を抽出してファイル化
- ファイルアナライザで処理するため。ストリーミング音声を解析することも可能
-
timeRange
に応じて分類結果を表示する
その他
Sound Analysisを使わず、Core MLだけで実装することも可能
Sound Analysisを使うと・・・
overlapFactor
- 認識に渡されれるバッファの長さは約1.0秒
- 対象の音声波形が区間の真ん中に来るように、オーバーラップさせながら解析処理を行う
- オーバーラップするほど取りこぼしが減るが、処理時間はかかる
- デフォルトは0.5
[PR] いろいろ本を出してます
- iOS 13の機能も追記予定です
- 電子版は無料でアップデートできます
- ページ数に応じて値上げするので、今買うと得かも?
補足1
10分のLTなのでいろいろ割愛したことがある
- デモは
confidence
と結果の前後関係をみて出力をフィルタしている-
confidence < 0.7
の結果はカット - 前後の認識結果と
identifier
が違う(つまり孤立している)結果はカット
-
- デモでは
request.overlapFactor = 0.9
補足2
- 学習データの録音環境を実行時の環境と合わせる必要がある
- 学習データ/デモ用シーンともにBGMのないところを選んだ
- ただ試してみてダメだったわけではない。BGMありも含めて大量のデータを食わせればロバストに認識できるかもしれない
補足3
- 学習用の音声データはAudacityという昔からあるmacOS用の波形編集ソフトを使ってチマチマ手作業でやった