litagin commited on
Commit
57f7970
1 Parent(s): ecd87d6
Files changed (2) hide show
  1. app.py +12 -6
  2. make.py +0 -36
app.py CHANGED
@@ -240,7 +240,7 @@ def get_label(audio_path: str, num_top_classes_to_use: int = 10):
240
  ## {i+1}位 (スコア{score:.4f})
241
  - ゲーム名: **{game_dict[game_key].name}** ({game_dict[game_key].company})
242
  - 公式サイト: {game_dict[game_key].url}
243
- - キャラクター名: {speaker_name}
244
  ---"""
245
  results.append(result_md)
246
 
@@ -261,9 +261,10 @@ def make_speaker_info_md(game_key: str, speaker_name: str) -> str:
261
 
262
 
263
  initial_md = """
264
- # ギャルゲー似た声検索
265
 
266
  - 与えられた音声に対して、声が似ているような日本のギャルゲー(ビジュアルノベル・エロゲー)の音声を検索するアプリです
 
267
  - 「この声と似たキャラクターが出ているギャルゲーは?」「この音声AIの声に聞き覚えあるけど、学習元は誰なのかな?」といった疑問の参考になるかもしれません
268
  - 次ができます:
269
  - セリフ単位でのTop 10の音声のサンプル表示
@@ -274,19 +275,24 @@ initial_md = """
274
 
275
  details_md = """
276
 
277
- ## 音声データ
278
 
279
- - 音声データは全て [OOPPEENN/Galgame_Dataset](https://huggingface.co/datasets/OOPPEENN/Galgame_Dataset) から取得
280
  - 音声ファイル処理: 各キャラクターについて次を行う
281
  - 総ファイル数が100未満の場合はモブキャラとして除外
282
  - 「2秒以上20秒未満」の音声ファイルのうち、時系列的に最初の100ファイルに加え、ランダムに最大200ファイル、合計最大300ファイルを選択
283
  - 22050Hz oggでリサンプリング
284
 
285
- ## 音声ファイル同士の類似度計算
 
 
 
 
 
286
  - 話者埋め込み: [pyannote/wespeaker-voxceleb-resnet34-LM](https://huggingface.co/pyannote/wespeaker-voxceleb-resnet34-LM) の256次元の話者埋め込み
287
  - 類似度計算: 2つの音声ファイルの話者埋め込みベクトルのコサイン類似度
288
 
289
- ## キャラクター検索
290
  - 与えられた音声に対して、全ての音声ファイルとの類似度を計算
291
  - 各キャラクターについて、類似度の高い10ファイルの平均類似度を計算し、スコアとする
292
  - そのスコアでソートして上位10キャラクターを表示
 
240
  ## {i+1}位 (スコア{score:.4f})
241
  - ゲーム名: **{game_dict[game_key].name}** ({game_dict[game_key].company})
242
  - 公式サイト: {game_dict[game_key].url}
243
+ - キャラクター名: **{speaker_name}**
244
  ---"""
245
  results.append(result_md)
246
 
 
261
 
262
 
263
  initial_md = """
264
+ # ギャルゲー似た声検索 (Galgame Similar Voice Search)
265
 
266
  - 与えられた音声に対して、声が似ているような日本のギャルゲー(ビジュアルノベル・エロゲー)の音声を検索するアプリです
267
+ - **30秒未満**の音声ファイルにしか対応させていません (Only supports audio files less than 30 seconds)
268
  - 「この声と似たキャラクターが出ているギャルゲーは?」「この音声AIの声に聞き覚えあるけど、学習元は誰なのかな?」といった疑問の参考になるかもしれません
269
  - 次ができます:
270
  - セリフ単位でのTop 10の音声のサンプル表示
 
275
 
276
  details_md = """
277
 
278
+ ### 音声データ
279
 
280
+ - 音声データは全て [OOPPEENN/Galgame_Dataset](https://huggingface.co/datasets/OOPPEENN/Galgame_Dataset) から取得(合計293ゲーム)
281
  - 音声ファイル処理: 各キャラクターについて次を行う
282
  - 総ファイル数が100未満の場合はモブキャラとして除外
283
  - 「2秒以上20秒未満」の音声ファイルのうち、時系列的に最初の100ファイルに加え、ランダムに最大200ファイル、合計最大300ファイルを選択
284
  - 22050Hz oggでリサンプリング
285
 
286
+ ### ゲーム情報
287
+
288
+ - [OOPPEENN/Galgame_Dataset](https://huggingface.co/datasets/OOPPEENN/Galgame_Dataset) ではゲームタイトルの英語表記のみが提供されているため、日本語タイトルと公式サイトURLを手動で調べて追加
289
+ - 間違っている箇所があったら教えてください
290
+
291
+ ### 音声ファイル同士の類似度計算
292
  - 話者埋め込み: [pyannote/wespeaker-voxceleb-resnet34-LM](https://huggingface.co/pyannote/wespeaker-voxceleb-resnet34-LM) の256次元の話者埋め込み
293
  - 類似度計算: 2つの音声ファイルの話者埋め込みベクトルのコサイン類似度
294
 
295
+ ### キャラクター検索
296
  - 与えられた音声に対して、全ての音声ファイルとの類似度を計算
297
  - 各キャラクターについて、類似度の高い10ファイルの平均類似度を計算し、スコアとする
298
  - そのスコアでソートして上位10キャラクターを表示
make.py DELETED
@@ -1,36 +0,0 @@
1
- import json
2
- from pathlib import Path
3
-
4
-
5
- def txt_to_json(input_path: Path, output_path: Path) -> None:
6
- """
7
- パイプ区切りのTXT形式ファイルをJSON形式に変換する。
8
-
9
- :param input_path: 入力ファイルのパス(TXT形式)
10
- :param output_path: 出力ファイルのパス(JSON形式)
11
- """
12
- data_list: list[dict[str, str]] = []
13
-
14
- with input_path.open(encoding="utf-8") as file:
15
- for line in file:
16
- line = line.strip()
17
- if not line:
18
- continue # 空行はスキップ
19
-
20
- columns = line.split("|")
21
- if len(columns) == 4:
22
- key, company, name, url = columns
23
- data_list.append(
24
- {"key": key, "company": company, "name": name, "url": url}
25
- )
26
-
27
- # JSONファイルに書き込み
28
- with output_path.open("w", encoding="utf-8") as json_file:
29
- json.dump(data_list, json_file, ensure_ascii=False, indent=4)
30
-
31
-
32
- # 使用例
33
- input_file = Path("search_results.txt") # 入力ファイルのパス
34
- output_file = Path("game_info.json") # 出力ファイルのパス
35
-
36
- txt_to_json(input_file, output_file)