rein0421 commited on
Commit
fcc6963
·
verified ·
1 Parent(s): 9b5ea70

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +168 -1
README.md CHANGED
@@ -7,7 +7,7 @@ sdk: docker
7
  pinned: false
8
  ---
9
 
10
-
11
  ---
12
 
13
  ## グローバル変数と主要な設定
@@ -160,4 +160,171 @@ pinned: false
160
 
161
  ---
162
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
 
 
7
  pinned: false
8
  ---
9
 
10
+ ##<app.py>
11
  ---
12
 
13
  ## グローバル変数と主要な設定
 
160
 
161
  ---
162
 
163
+ ##<process.py>
164
+ ---
165
+
166
+ ## 全体概要
167
+
168
+ - **目的:**
169
+ 音声ファイルの前処理、セグメント分割、音声特徴量(エンベディング)計算、類似度算出、さらに Base64 形式の音声データの保存など、音声データの様々な操作を行うための機能を提供します。
170
+
171
+ - **利用ライブラリ:**
172
+ - `pydub`:音声ファイルの読み込み、書き出し、セグメント分割に使用
173
+ - `pyannote.audio`:事前学習済みモデルを用いて音声のエンベディング(特徴量)を計算
174
+ - `numpy`:数値計算およびベクトル演算(コサイン類似度計算など)
175
+ - その他、`os`, `shutil`, `base64`, `datetime` など、ファイル操作や乱数生成に利用
176
+
177
+ - **初期設定:**
178
+ コンストラクタ (`__init__`) では、環境変数 `HF` から Hugging Face のトークンを取得し、`pyannote` のモデルをロード。標準の音声長さ(秒)も設定します。
179
+
180
+ ---
181
+
182
+ ## 各関数の詳細
183
+
184
+ ### 1. `normalize_audio_duration`
185
+ - **目的:**
186
+ 指定された音声ファイルの長さを、ターゲットの秒数に合わせて正規化(短い場合は無音でパディング、長い場合は切り詰め)します。
187
+
188
+ - **引数:**
189
+ - `input_path`:入力音声ファイルのパス
190
+ - `target_duration_seconds`:目標とする音声の長さ(秒)。未指定の場合は標準値(`self.standard_duration`)を使用
191
+ - `output_path`:出力先のパス(未指定の場合は一時ファイルとして生成)
192
+
193
+ - **戻り値:**
194
+ 正規化された音声ファイルのパス
195
+
196
+ ---
197
+
198
+ ### 2. `batch_normalize_audio_duration`
199
+ - **目的:**
200
+ 指定したディレクトリ内のすべての音声ファイルに対して、`normalize_audio_duration` を適用し、ファイルの長さを統一します。
201
+
202
+ - **引数:**
203
+ - `input_directory`:入力音声ファイルが格納されているディレクトリ
204
+ - `target_duration_seconds`:目標とする音声の長さ(秒)
205
+ - `output_directory`:出力先ディレクトリ(未指定の場合は入力ディレクトリと同じ場所)
206
+
207
+ - **戻り値:**
208
+ 処理後の音声ファイルパスのリスト
209
+
210
+ ---
211
+
212
+ ### 3. `cosine_similarity`
213
+ - **目的:**
214
+ 2つのベクトル間のコサイン類似度を計算します。
215
+ - **引数:**
216
+ - `vec1`, `vec2`:比較対象となる numpy 配列
217
+ - **処理:**
218
+ 次元が一致しているかを確認し、各ベクトルを正規化した後、内積を計算
219
+ - **戻り値:**
220
+ コサイン類似度(-1~1の範囲)
221
+
222
+ ---
223
+
224
+ ### 4. `segment_audio`
225
+ - **目的:**
226
+ 入力音声ファイルを指定した秒数のセグメントに分割し、各セグメントを出力ディレクトリに保存します。
227
+ - **引数:**
228
+ - `path`:入力音声ファイルのパス
229
+ - `target_path`:分割されたセグメントの保存先ディレクトリ
230
+ - `seg_duration`:各セグメントの長さ(秒)
231
+ - **戻り値:**
232
+ 分割されたセグメントのディレクトリパスと、元の音声の総時間(ミリ秒)
233
+
234
+ ---
235
+
236
+ ### 5. `calculate_embedding`
237
+ - **目的:**
238
+ 指定した音声ファイルからエンベディング(特徴量)を計算します。
239
+ - **引数:**
240
+ - `audio_path`:音声ファイルのパス
241
+ - **処理:**
242
+ - まず音声の長さを `normalize_audio_duration` で標準化
243
+ - `pyannote.audio` の推論機能を使い、エンベディングを計算
244
+ - 処理後に一時ファイルを削除(必要に応じて)
245
+ - **戻り値:**
246
+ エンベディング(flattened な numpy 配列)
247
+
248
+ ---
249
+
250
+ ### 6. `calculate_similarity`
251
+ - **目的:**
252
+ 2つの音声ファイル間の類似度(コサイン類似度)を計算します。
253
+ - **引数:**
254
+ - `path1`, `path2`:比較対象となる2つの音声ファイルのパス
255
+ - **処理:**
256
+ - 各音声のエンベディングを計算し、次元チェックを実施
257
+ - `cosine_similarity` を利用して類似度を求める
258
+ - **戻り値:**
259
+ 類似度(float 値、エラー時は None)
260
+
261
+ ---
262
+
263
+ ### 7. `process_audio`
264
+ - **目的:**
265
+ リファレンス音声と入力音声を比較し、リファレンスに類似したセグメントを抽出します。
266
+ - **引数:**
267
+ - `reference_path`:リファレンス音声のパス
268
+ - `input_path`:入力音声のパス
269
+ - `output_folder`:マッチしたセグメントの出力先ディレクトリ
270
+ - `seg_duration`:セグメントの長さ(秒)
271
+ - `threshold`:類似度の閾値
272
+ - **処理:**
273
+ - リファレンス音声のエンベディングを計算
274
+ - 入力音声をセグメントに分割し、各セグメントのエンベディングを計算
275
+ - 各セグメントとリファ���ンス間のコサイン類似度を計算し、閾値以上なら出力フォルダへコピー
276
+ - マッチしたセグメントの総時間と、マッチしなかった時間を計算
277
+ - **戻り値:**
278
+ タプル (マッチ時間[ms], 非マッチ時間[ms], 出力フォルダパス)
279
+
280
+ ---
281
+
282
+ ### 8. `process_multi_audio`
283
+ - **目的:**
284
+ 複数のリファレンス音声に対して、入力音声内の各セグメントの類似度を計算し、各リファレンスごとの一致時間を集計します。
285
+ - **引数:**
286
+ - `reference_pathes`:リファレンス音声のパスのリスト
287
+ - `input_path`:入力音声のパス
288
+ - `output_folder`:マッチしたセグメントの出力先ディレクトリ
289
+ - `seg_duration`:各セグメントの長さ(秒)
290
+ - `threshold`:類似度の閾値
291
+ - **処理:**
292
+ - 各リファレンス音声のエンベディングを先に計算
293
+ - 入力音声をセグメントに分割し、各セグメントのエンベディングを計算
294
+ - リファレンス毎に各セグメントとの類似度を算出し、最も高い類似度が閾値以上ならそのリファレンスとマッチと判断
295
+ - 各リファレンスごとにマッチしたセグメントの時間(秒)を集計
296
+ - **戻り値:**
297
+ タプル (各リファレンスごとの一致時間のリスト, セグメントが保存されたディレクトリパス)
298
+
299
+ ---
300
+
301
+ ### 9. `save_audio_from_base64`
302
+ - **目的:**
303
+ Base64 形式でエンコードされた音声データをデコードし、WAV ファイルとして保存します。
304
+ - **引数:**
305
+ - `base64_audio`:Base64 エンコードされた音声データ
306
+ - `output_dir`:出力先ディレクトリ
307
+ - `output_filename`:出力するファイル名
308
+ - `temp_format`:一時ファイルのフォーマット(デフォルトは 'webm')
309
+ - **処理:**
310
+ - Base64 文字列をデコードし、一時ファイルに保存
311
+ - `pydub` を用いてファイルを読み込み、WAV 形式に変換して保存
312
+ - 一時ファイルは処理後に削除
313
+ - **戻り値:**
314
+ 保存された WAV ファイルのパス
315
+
316
+ ---
317
+
318
+ ### 10. `delete_files_in_directory`
319
+ - **目的:**
320
+ 指定したディレクトリ内に存在するすべてのファイルを削除します。
321
+ - **引数:**
322
+ - `directory_path`:対象のディレクトリパス
323
+ - **処理:**
324
+ - ディレクトリ内の各ファイルを走査し、ファイルのみ削除
325
+ - 削除結果やエラーはコンソールに出力
326
+
327
+ ---
328
+
329
+ このように、`AudioProcessor` クラスは音声ファイルの長さの正規化、セグメント分割、特徴量計算、類似度評価、さらには音声データの保存と削除など、音声処理全般に関する機能を幅広く実装しています。これにより、音声データの比較や抽出処理、さらには複数の音声間の解析が可能となっています。 citeturn0file0
330