web-dev-qa-db-ja.com

音声の検出と識別のためのオープンソースコード

私は15本のオーディオテープを持っています。そのうちの1つには、祖母と私自身が話している古い録音が含まれていると思います。適切な場所をすばやく見つけようとしても、うまくいかなかった。それを見つけるために20時間のテープを聞きたくありません。場所がいずれかのテープの先頭にない可能性があります。ほとんどのコンテンツは3つのカテゴリに分類されるようです-長いものから順に、無音、スピーチラジオ、音楽の順です。

すべてのテープをデジタル形式に変換してから、もう一度録音を探します。明白な方法は、私が他のことをしている間、それらすべてをバックグラウンドで再生することです。それは私にはあまりにも単純すぎるので、次のように、洗練されて有用性が増す順に見つけることができるオープンソースライブラリや他のコードはありますか。

  1. 非サイレント地域
  2. 人間の発話を含む地域
  3. 私自身のスピーチ(および私の祖母のスピーチ)を含む地域

私の好みはPython、Java、またはCです。

答えが見つからない場合、フィールドについて何も知らないので、検索語句についてのヒントをいただければ幸いです。

私はこれに20時間以上費やすことができることを理解しています。

24
Croad Langshan

ほとんどの場合、おそらく節約できるのは話者ダイアライゼーションです。これは、スピーカーIDを使って録音に注釈を付けることで機能します。これにより、ほとんど手間をかけずに手動で実際の人にマッピングできます。エラー率は通常、レコード長の約10〜15%ですが、これはひどい話ですが、これには、話者が多すぎることを検出したり、2人のIDを同じ人物にマッピングしたりすることも含まれます。

そのような優れたツールの1つは SHoUTツールキット (C++)ですが、入力形式については少しうるさいです。このツールの使用法を参照 作成者から音声/音声アクティビティ検出メタデータANDスピーカーダイアライゼーションを出力します。 1番目と2番目のポイント(VAD/SAD)と少し余分な情報を取得します。これは、同じスピーカーが録音でアクティブな場合に注釈を付けるためです。

他の便利なツールは LIUM spkdiarization (Java)です。ただし、VADメタデータを取得する方法を理解するのにまだ十分な努力をしていません。すぐに使える ダウンロード可能なパッケージ を備えています。

ほんの少しのコンパイルで、これは1時間以内に機能するはずです。

14
hruske

最良のオプションは、音声認識または話者識別(音声認識ではない)を行うオープンソースモジュールを見つけることです。話者識別は特定の話者を識別するために使用されますが、音声認識は話された音声をテキストに変換します。オープンソースのスピーカー識別パッケージが存在する場合があります。SourceForge.netなどで「スピーカー識別」または「音声AND生体認証」を検索してみてください。私は自分で使ったことがないので、何もお勧めできません。

何も見つからない場合でも、独自のものをローリングすることに興味がある場合は、人気のある言語用のオープンソースFFTライブラリがたくさんあります。テクニックは次のようになります:

  • 普通に話しているあなたと祖母が普通にデジタル形式で話している典型的な録音を取得します。バックグラウンドノイズをできるだけ少なくします
    • ターゲットの録音でオーディオの毎秒程度のFFTを取得します
    • 作成したFFTプロファイルの配列から、ノイズである可能性が最も高いため、特定の平均エネルギーしきい値を下回るフィルターを除外します。
    • フィルター処理されていないFFTスナップショットを平均化してマスターFFTプロファイルを作成する
    • 次に、デジタル化されたターゲットオーディオ(20時間のもの)に対して上記のFFTサンプリングテクニックを繰り返します。
    • いつでもインデックスのFFTスナップショットがあなたとあなたの祖母が話しているマスターFFTプロファイルに類似しているターゲットオーディオファイルの領域にフラグを付けます。偽陽性が多すぎないように、類似性の設定を試す必要があります。また、FFT周波数ビンの比較を、マスターFFTプロファイル内のエネルギーを持つ周波数ビンのみに制限する必要がある場合があることに注意してください。それ以外の場合、あなたとあなたの祖母が話しているターゲットオーディオに大きなバックグラウンドノイズが含まれていると、類似性関数が無効になります。
    • 手動検査のための時間指標のリストをクランクアウト

このプロジェクトを完了するための時間数は、録音を手動で聞く20時間を簡単に超える可能性があることに注意してください。しかし、20時間のオーディオをじっくりと味わうよりもはるかに楽しいでしょう。また、将来再構築するソフトウェアを使用することもできます。

もちろん、プライバシーの観点から音声が重要でない場合は、音声の試聴タスクをAmazonのメカニカルタークなどに外部委託できます。

5
Robert Oschler

pyAudioAnalysis を試してみることもできます:

  1. 無音の除去:

from pyAudioAnalysis import audioBasicIO as aIO from pyAudioAnalysis import audioSegmentation as aS [Fs, x] = aIO.readAudioFile("data/recording1.wav") segments = aS.silenceRemoval(x, Fs, 0.020, 0.020, smoothWindow = 1.0, Weight = 0.3, plot = True)

segmentsには、無音でないセグメントのエンドポイントが含まれます。

  1. 分類:音声と音楽の区別: pyAudioAnalysis には、未知のセグメントを音声または音楽のいずれかに分類するために使用できる事前学習済みの分類子も含まれています。

Java=音楽からスピーチを分離するために、時間ウィンドウのFFTスペクトルを使用できます。スピーチは、フォルマントと呼ばれるいくつかの非常に異なる周波数帯域を使用します。

おそらく、音声/音楽ブロックの100%の分離は得られませんが、ファイルにタグを付けて、興味深い部分だけを聞くだけで十分です。

http://code.compartmental.net/tools/minim/

http://en.wikipedia.org/wiki/Formant

3

私はWindows音声認識の使用についてブログ記事を書きました。 C#でオーディオファイルをテキストに変換する基本的なチュートリアルがあります。 こちら をチェックしてください。

2
mrtsherman

2つのアイデア:

  • たとえば、「音声認識」フィールドを調べます CMUSphinx
  • Audacity には、便利な「沈黙の切り捨て」ツールがあります。
2
Anders Lindahl

ここから始めます

http://alize.univ-avignon.fr/

http://www-lium.univ-lemans.fr/diarization/doku.php/quick_start

codeblocks ::はgccに適しています

0
Kickaha