Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ENH: speaker_infoのリソースをURLで返すようにする #1318

Merged
merged 92 commits into from
Jun 23, 2024
Merged
Show file tree
Hide file tree
Changes from 84 commits
Commits
Show all changes
92 commits
Select commit Hold shift + click to select a range
26f4800
ENH: `speaker_info`のリソースをURLで返すようにする
sabonerune May 15, 2024
8c58bab
FIX: typo修正
sabonerune May 24, 2024
bacde64
Merge branch 'master' into enh/url-infos
sabonerune May 27, 2024
c565ffd
FIX: コメント追加
sabonerune May 27, 2024
4b3b916
FIX: `resource_url` to `return_resource_url`
sabonerune May 27, 2024
6b6da5f
FIX: snapshot-update
sabonerune May 27, 2024
32623b2
Merge branch 'master' into enh/url-infos
sabonerune May 28, 2024
78fa22c
Merge branch 'master' into enh/url-infos
sabonerune May 29, 2024
5d23138
FIX: merge
sabonerune May 29, 2024
918c32d
ENH: 開発時に`filemap.json`を不要にした。
sabonerune May 30, 2024
18c1bc1
Update voicevox_engine/engine_manifest.py
sabonerune Jun 3, 2024
613fa04
FIX: `engine_manifest.json`のテキスト変更
sabonerune Jun 3, 2024
b433300
Merge branch 'master' into enh/url-infos
sabonerune Jun 3, 2024
df46c52
MNT: 関数名変更
sabonerune Jun 3, 2024
6bb6a03
FIX: `resource_url` to `resource_format`
sabonerune Jun 3, 2024
a40a7d0
TST: update snapshot
sabonerune Jun 3, 2024
f999234
FIX: `SpeakerResourceManager`周りの修正
sabonerune Jun 3, 2024
8835a96
MNT: `ResourceManager`分離
sabonerune Jun 3, 2024
b96a5f9
ENH: より汎用的な実装へ
sabonerune Jun 4, 2024
1772a43
MNT: `file_map.py`の改良
sabonerune Jun 4, 2024
2fc05c6
MNT: `_file_to_hash` to `_path_to_hash`
sabonerune Jun 4, 2024
dc72d77
FIX: `resources()`を修正
sabonerune Jun 5, 2024
f2b4c63
FIX: `filemap.json`の保存場所を変更
sabonerune Jun 5, 2024
4112054
Merge branch 'master' into enh/url-infos
sabonerune Jun 5, 2024
8f331c8
ENH: レスポンスの検証を実装
sabonerune Jun 5, 2024
02ef06d
FIX: 冗長な部分を修正
sabonerune Jun 6, 2024
c45f9ce
FIX: エンドポイント変更
sabonerune Jun 7, 2024
8559434
FIX: 検証の削除とヘッダ変更
sabonerune Jun 7, 2024
de48299
Merge branch 'master' into enh/url-infos
sabonerune Jun 10, 2024
3f7c563
MNT: `Literal["base64", "url"]` to `ResourceFormat`
sabonerune Jun 10, 2024
94a1006
FIX: fix `file_map.py`
sabonerune Jun 10, 2024
a773489
MNT: `file_map.py` to `generate_filemap.py`
sabonerune Jun 10, 2024
894bd3a
FIX: `resource_manager.py`
sabonerune Jun 10, 2024
35c86ea
ENH: ビルド時に`filemap.json`を作成する
sabonerune Jun 10, 2024
14c036d
Merge branch 'master' into enh/url-infos
sabonerune Jun 10, 2024
49ad9c1
TST: e2eテスト追加
sabonerune Jun 12, 2024
493417d
FIX: 例外処理の強化
sabonerune Jun 13, 2024
5ae701c
TST: ユニットテスト追加
sabonerune Jun 13, 2024
a571a6c
ENH: `is_development()`を使うようにする
sabonerune Jun 13, 2024
8e889a8
FIX: `filemap.json`に含まれていないファイルはbase64の取得もエラーにする
sabonerune Jun 16, 2024
fb3ec12
FIX: エンドポイントとモデルの説明を変更
sabonerune Jun 17, 2024
42c2586
Update test/e2e/test_speakers.py
sabonerune Jun 17, 2024
0a6bb38
Update build_util/generate_filemap.py
sabonerune Jun 17, 2024
a4ce2ad
Update build_util/generate_filemap.py
sabonerune Jun 17, 2024
5808317
FIX: `main()`を廃止して`if __name__ == "__main__":`へ
sabonerune Jun 17, 2024
3511d62
Update voicevox_engine/resource_manager.py
sabonerune Jun 17, 2024
d9a28e0
Update voicevox_engine/resource_manager.py
sabonerune Jun 18, 2024
ade94ff
Update voicevox_engine/resource_manager.py
sabonerune Jun 18, 2024
662ce37
Update voicevox_engine/resource_manager.py
sabonerune Jun 18, 2024
afffa0d
FIX: `register_dir`
sabonerune Jun 18, 2024
1a3fed1
Update voicevox_engine/resource_manager.py
sabonerune Jun 18, 2024
9620310
Update voicevox_engine/resource_manager.py
sabonerune Jun 18, 2024
b0cf1b2
Update voicevox_engine/metas/Metas.py
sabonerune Jun 18, 2024
a2dbf40
Update voicevox_engine/metas/Metas.py
sabonerune Jun 18, 2024
318ab78
Update voicevox_engine/app/routers/speaker.py
sabonerune Jun 18, 2024
d197885
Update voicevox_engine/app/routers/speaker.py
sabonerune Jun 18, 2024
bc20984
Update voicevox_engine/resource_manager.py
sabonerune Jun 18, 2024
dc1dc22
FIX: suggestion
sabonerune Jun 18, 2024
710fc15
TST: fix test
sabonerune Jun 18, 2024
91df0d3
FIX: typo
sabonerune Jun 18, 2024
2e034b8
FIX: `ResourceManager`インスタンス化の場所を変更
sabonerune Jun 18, 2024
3fb026c
FIX: remane test function
sabonerune Jun 18, 2024
b8d3558
FIX: コメント追加・変更
sabonerune Jun 18, 2024
1503b18
TST: 同じバイナリがある場合のテストを追加
sabonerune Jun 18, 2024
34ec95a
FIX: モデルの説明の修正
sabonerune Jun 18, 2024
576ecf1
Merge branch 'master' into enh/url-infos
sabonerune Jun 18, 2024
4770f63
FIX: add comment
sabonerune Jun 18, 2024
8e0e944
FIX: add comment
sabonerune Jun 18, 2024
e8941ad
FIX: rename variable
sabonerune Jun 18, 2024
33eef5e
FIX: rename variable
sabonerune Jun 18, 2024
91736d2
FIX: variable and description
sabonerune Jun 18, 2024
ec7d89e
FIX: rename
sabonerune Jun 18, 2024
90d22ef
FIX: Comment
sabonerune Jun 18, 2024
a24a2b0
FIX: 対応するリソースが無い場合エラーを返すようにする
sabonerune Jun 19, 2024
a174ee6
FIX: remove model description
sabonerune Jun 19, 2024
bd57f7e
FIX: remove model description
sabonerune Jun 19, 2024
28c4cdb
TST: Update snapshot
sabonerune Jun 19, 2024
87e49f7
FIX: fix comments
sabonerune Jun 20, 2024
5e2c521
DOC: `ResourceManager`の仕様についてのドキュメントを追加
sabonerune Jun 20, 2024
88a2a0c
Merge branch 'master' into enh/url-infos
sabonerune Jun 20, 2024
0a40b56
FIX: 例のディレクトリツリーを変更
sabonerune Jun 20, 2024
1281341
FIX: 不要な区切りを削除
sabonerune Jun 20, 2024
ae7e0f3
DOC: ドキュメント修正
sabonerune Jun 21, 2024
73710d0
FIX: ファイル名変更
sabonerune Jun 21, 2024
726e630
FIX: ドキュメント修正
sabonerune Jun 23, 2024
555b6a6
FIX: ドキュメント修正
sabonerune Jun 23, 2024
9e7623c
FIX: docstring修正
sabonerune Jun 23, 2024
0b351e9
FIX: Dependsの内部関数化
sabonerune Jun 23, 2024
62e3397
FIX: テストの内部関数化
sabonerune Jun 23, 2024
4e946d1
Merge branch 'master' into enh/url-infos
sabonerune Jun 23, 2024
d64ac46
assert_resource_url追加
Hiroshiba Jun 23, 2024
bff011e
ファイル名変更
Hiroshiba Jun 23, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/build-engine-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,9 @@ jobs:
# FIXME: VOICEVOX (editor) cannot build without licenses.json
cp resources/engine_manifest_assets/dependency_licenses.json licenses.json

- name: <Build> Generate filemap.json
run: python tools/generate_filemap.py --target_dir resources/character_info

- name: <Build> Build VOICEVOX ENGINE run.py
run: |
set -eux
Expand Down
4 changes: 4 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,10 @@ RUN <<EOF
cp /opt/voicevox_engine/resources/engine_manifest_assets/dependency_licenses.json /opt/voicevox_engine/licenses.json
EOF

# Generate filemap.json
ADD ./tools/generate_filemap.py /tmp/
RUN gosu user /opt/python/bin/python3 /tmp/generate_filemap.py --target_dir resources/character_info

# Keep this layer separated to use layer cache on download failed in local build
RUN <<EOF
set -eux
Expand Down
72 changes: 72 additions & 0 deletions docs/ファイルURLとfilemap.md
Hiroshiba marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# ResourceManagerの仕様について

一部のリソースファイルはURLとして返します。
ファイルの内容が変わってもURLが同じ場合、キャッシュが働いて新しいリソースを取得できない可能性があります。
これを防ぐためハッシュを使用してリソースの変更の度にURLを変更します。

ResourceManagerはファイルとハッシュを管理します。
filemap.jsonは事前に生成したハッシュとファイルの関連付けを行います。
generate_filemap.pyはfilemap.pyの作成を行います。

## ResourceManager

初期化時に`create_filemap_if_not_exist`を`True`にすると`filemap.json`がないディレクトリの登録ができます。
登録されるリソースは`filemap.json`にあるものに限ります。
`filemap.json`がない場合ディレクトリ内のすべてのファイルが登録されます。

細かい仕様はResourceManagerのドキュメントと実装を確認してください。

## filemap.json

キーは登録するファイルパスを登録するディレクトリを基準にした相対パスです。
パス区切り文字は互換性のため`/`である必要があります。

値は登録するファイルを一意に識別できるハッシュ等の文字列です。
`generate_filemap.py`はsha256ハッシュを生成します。

### 例

#### デイレクトリ構造

```
登録ディレクトリ/
├── filemap.json
├── dir_1/
│ ├── 登録ファイル.png
│ ├── samples/
│ │ └── 登録ファイル.wav
│ └── 非登録ファイル1.txt
└── dir_2/
├── 登録ファイル.png
├── samples/
│ └── 登録ファイル.wav
└── 非登録ファイル1.txt
```

#### filemap.json

```json
{
"dir_1/登録ファイル.png": "HASH-1",
"dir_1/samples/登録ファイル.wav": "HASH-2",
"dir_2/登録ファイル.png": "HASH-3",
"dir_2/samples/登録ファイル.wav": "HASH-4",
}
```

## generate_filemap.py

`filemap.json`を生成するためのスクリプトです。
デフォルトではpngファイルとwavファイルのみを登録します。

### 例

```bash
python tools/generate_filemap.py --target_dir resources/character_info
```

pngとwavに加えてjpgファイルを登録する例
```bash
python tools/generate_filemap.py --target_dir resources/character_info \
--target_suffix png --target_suffix wav --target_suffix jpg
```
5 changes: 5 additions & 0 deletions engine_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@
"type": "bool",
"value": true,
"name": "音声ライブラリのインストール・アンインストール"
},
"return_resource_url":{
"type":"bool",
"value":true,
"name": "speaker_info・singer_infoのリソースをURLで返送"
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

157 changes: 157 additions & 0 deletions test/e2e/__snapshots__/test_speakers.ambr
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
# serializer version: 1
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_5_icon]
'MD5:517ba089e0b03f8868af2ce956f7699d'
# ---
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_5_voice_sample_0]
'MD5:d368ea4f7af3fba9f9f7fa862e50590f'
# ---
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_5_voice_sample_1]
'MD5:a844eb96e25efd52dfee76d023eda0c8'
# ---
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_5_voice_sample_2]
'MD5:4cd9a6ff5ac76ea1c267c99b2cfe925f'
# ---
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_7_icon]
'MD5:562ad0f61ca6dd81e89a4479f97dcd9f'
# ---
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_7_voice_sample_0]
'MD5:f214d07c3fb5332e429abb17921eecb5'
# ---
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_7_voice_sample_1]
'MD5:46296628b586d968054cc43ad733dd4a'
# ---
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_7_voice_sample_2]
'MD5:919e8e440b31b13fb0d2aae03061661f'
# ---
# name: test_歌手の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_portrait]
'MD5:27777cb0883c98cd9870707005bf1faf'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_4_icon]
'MD5:c6a8ddea789d8115372db31b4a76d2aa'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_4_portrait]
'MD5:2b339e97d7ae0b6b215de842ff12515e'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_4_voice_sample_0]
'MD5:5333edce35b3806f1818c407cd74b66b'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_4_voice_sample_1]
'MD5:720ab16616e8e3e8e15535c9f6fd1f03'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_4_voice_sample_2]
'MD5:444dd9f019828f3773192cca7d1099df'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_6_icon]
'MD5:d2c7c85a9919372ef62ad49786bd7fc4'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_6_portrait]
'MD5:6f7cd8ecb9d2d8de0ed410e05350ac72'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_6_voice_sample_0]
'MD5:4add3a1cf25c4b6ce6d35aaa1f760071'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_6_voice_sample_1]
'MD5:42d20380d8d6fc95916037e4da990aaa'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_6_voice_sample_2]
'MD5:af22bcd03f4959dc8f0e4ac1d04854e0'
# ---
# name: test_歌手の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_portrait]
'MD5:78228648fe527ee23597b66db59a4f94'
# ---
# name: test_歌手の情報をURLで取得できる[b1a81618-b27b-40d2-b0ea-27a9ad408c4b_9_icon]
'MD5:1e3d0a6e88264b1b99839aeb7c7cbe1f'
# ---
# name: test_歌手の情報をURLで取得できる[b1a81618-b27b-40d2-b0ea-27a9ad408c4b_9_voice_sample_0]
'MD5:e8626456ba706690676639e61ad43b73'
# ---
# name: test_歌手の情報をURLで取得できる[b1a81618-b27b-40d2-b0ea-27a9ad408c4b_9_voice_sample_1]
'MD5:93e3d5c44bbad3ddfc43953f5c751670'
# ---
# name: test_歌手の情報をURLで取得できる[b1a81618-b27b-40d2-b0ea-27a9ad408c4b_9_voice_sample_2]
'MD5:765ff637563e64182ace61fb5ca7daf4'
# ---
# name: test_歌手の情報をURLで取得できる[b1a81618-b27b-40d2-b0ea-27a9ad408c4b_portrait]
'MD5:381ba07cbcad95f1c99109f5f6d096a8'
# ---
# name: test_話者の情報をURLで取得できる[35b2c544-660e-401e-b503-0e14c635303a_8_icon]
'MD5:1fe576e75458c752cfeecc1e93a29886'
# ---
# name: test_話者の情報をURLで取得できる[35b2c544-660e-401e-b503-0e14c635303a_8_portrait]
'MD5:56b2cfc4a9118c40a999e151c0ac647e'
# ---
# name: test_話者の情報をURLで取得できる[35b2c544-660e-401e-b503-0e14c635303a_8_voice_sample_0]
'MD5:62cce06e564276499df6014e7182368d'
# ---
# name: test_話者の情報をURLで取得できる[35b2c544-660e-401e-b503-0e14c635303a_8_voice_sample_1]
'MD5:2164af6fc692d5b2117dfd845c880f81'
# ---
# name: test_話者の情報をURLで取得できる[35b2c544-660e-401e-b503-0e14c635303a_8_voice_sample_2]
'MD5:4e81220a91745cf2ab7b632cd528ffbd'
# ---
# name: test_話者の情報をURLで取得できる[35b2c544-660e-401e-b503-0e14c635303a_portrait]
'MD5:bd6cf66dcc652f56892b14b423f6f37c'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_1_icon]
'MD5:becb1cc2aaf82623a13a1250a39d7393'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_1_voice_sample_0]
'MD5:a9bf75355816d858213cb116942fe499'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_1_voice_sample_1]
'MD5:0dc81612c1f305b6210ef325a4518e53'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_1_voice_sample_2]
'MD5:ba5694044d8e7e0bffa9578d22ba2ba8'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_3_icon]
'MD5:9a3690c368cd9a4ecb1940ff9eb2c955'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_3_portrait]
'MD5:0308b1a8e7a849e8be5ea699706f5097'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_3_voice_sample_0]
'MD5:0fd8a039030ea31560c84e91f955e4cd'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_3_voice_sample_1]
'MD5:c249264fa985fd4ab5e940c7e813db3e'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_3_voice_sample_2]
'MD5:6a0bc8b54543fe816f37cb286795ad07'
# ---
# name: test_話者の情報をURLで取得できる[388f246b-8c41-4ac1-8e2d-5d79f3ff56d9_portrait]
'MD5:27777cb0883c98cd9870707005bf1faf'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_0_icon]
'MD5:1f1da5f25968c638a783bf6ba9df9420'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_0_portrait]
'MD5:1724b3741e58978f5b9db25eb6575d9b'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_0_voice_sample_0]
'MD5:79d52a44a8dc8548616c300e49b37a94'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_0_voice_sample_1]
'MD5:d31e59cf938a46d156add0da486fe5e2'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_0_voice_sample_2]
'MD5:73d7e1f311263ab7e1b468318cb8575a'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_2_icon]
'MD5:0b158046338f60a53e9afdb7797c5864'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_2_portrait]
'MD5:593c75329b6531e5ae0266a708e5ebc0'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_2_voice_sample_0]
'MD5:8e917c07fe5d444eddd4b451b7dc8d83'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_2_voice_sample_1]
'MD5:0cf95e313bc5c3314be6a71e5021fad2'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_2_voice_sample_2]
'MD5:43f9f43e4607015e7ab3bd016bee5509'
# ---
# name: test_話者の情報をURLで取得できる[7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff_portrait]
'MD5:78228648fe527ee23597b66db59a4f94'
# ---

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading