From 7cc8c7a75b26f266f315d63a82d1b189bbf7c7f4 Mon Sep 17 00:00:00 2001 From: Hiroshiba Date: Thu, 19 Jan 2023 12:59:10 +0900 Subject: [PATCH 1/3] =?UTF-8?q?metas.json=E3=81=8B=E3=82=89=E4=B8=8D?= =?UTF-8?q?=E8=A6=81=E3=81=AA=E6=83=85=E5=A0=B1=E3=82=92=E6=8A=9C=E3=81=8D?= =?UTF-8?q?=E3=81=A4=E3=81=A4=E3=82=B9=E3=83=8D=E3=83=BC=E3=82=AF=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=82=B9=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 61 +++++++++++-------- ...50\343\201\256\351\200\243\346\220\272.md" | 6 +- run.py | 2 +- .../metas.json | 11 +--- .../metas.json | 23 +------ .../metas.json | 22 +------ .../metas.json | 11 +--- voicevox_engine/morphing.py | 8 +-- 8 files changed, 51 insertions(+), 93 deletions(-) diff --git a/README.md b/README.md index 2a4efd1d8..79bbe082d 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ curl -s \ 生成される音声はサンプリングレートが 24000Hz と少し特殊なため、音声プレーヤーによっては再生できない場合があります。 -`speaker` に指定する値は `/speakers` エンドポイントで得られる `styleId` です。互換性のために `speaker` という名前になっています。 +`speaker` に指定する値は `/speakers` エンドポイントで得られる `style_id` です。互換性のために `speaker` という名前になっています。 ### 読み方を AquesTalk 記法で取得・修正するサンプルコード @@ -98,11 +98,11 @@ curl -s \ ### ユーザー辞書機能について -APIからユーザー辞書の参照、単語の追加、編集、削除を行うことができます。 +API からユーザー辞書の参照、単語の追加、編集、削除を行うことができます。 #### 参照 -`/user_dict`にGETリクエストを投げることでユーザー辞書の一覧を取得することができます。 +`/user_dict`に GET リクエストを投げることでユーザー辞書の一覧を取得することができます。 ```bash curl -s -X GET "localhost:50021/user_dict" @@ -110,17 +110,18 @@ curl -s -X GET "localhost:50021/user_dict" #### 単語追加 -`/user_dict_word`にPOSTリクエストを投げる事でユーザー辞書に単語を追加することができます。 -URLパラメータとして、以下が必要です。 +`/user_dict_word`に POST リクエストを投げる事でユーザー辞書に単語を追加することができます。 +URL パラメータとして、以下が必要です。 + - surface (辞書に登録する単語) - pronunciation (カタカナでの読み方) - accent_type (アクセント核位置、整数) アクセント核位置については、こちらの文章が参考になるかと思います。 〇型となっている数字の部分がアクセント核位置になります。 -https://tdmelodic.readthedocs.io/ja/latest/pages/introduction.html +https://tdmelodic.readthedocs.io/ja/latest/pages/introduction.html -成功した場合の返り値は単語に割り当てられるUUIDの文字列になります。 +成功した場合の返り値は単語に割り当てられる UUID の文字列になります。 ```bash surface="test" @@ -136,13 +137,14 @@ curl -s -X POST "localhost:50021/user_dict_word" \ #### 単語修正 -`/user_dict_word/{word_uuid}`にPUTリクエストを投げる事でユーザー辞書の単語を修正することができます。 -URLパラメータとして、以下が必要です。 +`/user_dict_word/{word_uuid}`に PUT リクエストを投げる事でユーザー辞書の単語を修正することができます。 +URL パラメータとして、以下が必要です。 + - surface (辞書に登録するワード) - pronunciation (カタカナでの読み方) - accent_type (アクセント核位置、整数) -word_uuidは単語追加時に確認できるほか、ユーザー辞書を参照することでも確認できます。 +word_uuid は単語追加時に確認できるほか、ユーザー辞書を参照することでも確認できます。 成功した場合の返り値は`204 No Content`になります。 ```bash @@ -161,9 +163,9 @@ curl -s -X PUT "localhost:50021/user_dict_word/$word_uuid" \ #### 単語削除 -`/user_dict_word/{word_uuid}`にDELETEリクエストを投げる事でユーザー辞書の単語を削除することができます。 +`/user_dict_word/{word_uuid}`に DELETE リクエストを投げる事でユーザー辞書の単語を削除することができます。 -word_uuidは単語追加時に確認できるほか、ユーザー辞書を参照することでも確認できます。 +word_uuid は単語追加時に確認できるほか、ユーザー辞書を参照することでも確認できます。 成功した場合の返り値は`204 No Content`になります。 ```bash @@ -267,11 +269,11 @@ curl -s -X GET "localhost:50021/speaker_info?speaker_uuid=7ffcb7ce-00ec-4bdc-82c この API は実験的機能であり、エンジン起動時に引数で`--enable_cancellable_synthesis`を指定しないと有効化されません。 音声合成に必要なパラメータは`/synthesis`と同様です。 -### CORS設定 +### CORS 設定 -VOICEVOXではセキュリティ保護のため`localhost`・`127.0.0.1`・`app://`・Originなし以外のOriginからリクエストを受け入れないようになっています。 +VOICEVOX ではセキュリティ保護のため`localhost`・`127.0.0.1`・`app://`・Origin なし以外の Origin からリクエストを受け入れないようになっています。 そのため、一部のサードパーティアプリからのレスポンスを受け取れない可能性があります。 -これを回避する方法として、エンジンから設定できるUIを用意しています。 +これを回避する方法として、エンジンから設定できる UI を用意しています。 #### 設定方法 @@ -370,29 +372,38 @@ CPU スレッド数が未指定の場合は、論理コア数の半分か物理 ``` ### 過去のバージョンのコアを使う -VOICEVOX Core 0.5.4以降のコアを使用する事が可能です。 -Macでのlibtorch版コアのサポートはしていません。 + +VOICEVOX Core 0.5.4 以降のコアを使用する事が可能です。 +Mac での libtorch 版コアのサポートはしていません。 #### 過去のバイナリを指定する -製品版VOICEVOXもしくはコンパイル済みエンジンのディレクトリを`--voicevox_dir`引数で指定すると、そのバージョンのコアが使用されます。 + +製品版 VOICEVOX もしくはコンパイル済みエンジンのディレクトリを`--voicevox_dir`引数で指定すると、そのバージョンのコアが使用されます。 + ```bash python run.py --voicevox_dir="/path/to/voicevox" ``` -Macでは、`DYLD_LIBRARY_PATH`の指定が必要です。 + +Mac では、`DYLD_LIBRARY_PATH`の指定が必要です。 + ```bash DYLD_LIBRARY_PATH="/path/to/voicevox" python run.py --voicevox_dir="/path/to/voicevox" ``` #### 音声ライブラリを直接指定する -[VOICEVOX Coreのzipファイル](https://github.com/VOICEVOX/voicevox_core/releases)を解凍したディレクトリを`--voicelib_dir`引数で指定します。 + +[VOICEVOX Core の zip ファイル](https://github.com/VOICEVOX/voicevox_core/releases)を解凍したディレクトリを`--voicelib_dir`引数で指定します。 また、コアのバージョンに合わせて、[libtorch](https://pytorch.org/)や[onnxruntime](https://github.com/microsoft/onnxruntime)のディレクトリを`--runtime_dir`引数で指定します。 -ただし、システムの探索パス上にlibtorch、onnxruntimeがある場合、`--runtime_dir`引数の指定は不要です。 -`--voicelib_dir`引数、`--runtime_dir`引数は複数回使用可能です。 -APIエンドポイントでコアのバージョンを指定する場合は`core_version`引数を指定してください。(未指定の場合は最新のコアが使用されます) +ただし、システムの探索パス上に libtorch、onnxruntime がある場合、`--runtime_dir`引数の指定は不要です。 +`--voicelib_dir`引数、`--runtime_dir`引数は複数回使用可能です。 +API エンドポイントでコアのバージョンを指定する場合は`core_version`引数を指定してください。(未指定の場合は最新のコアが使用されます) + ```bash python run.py --voicelib_dir="/path/to/voicevox_core" --runtime_dir="/path/to/libtorch_or_onnx" ``` -Macでは、`--runtime_dir`引数の代わりに`DYLD_LIBRARY_PATH`の指定が必要です。 + +Mac では、`--runtime_dir`引数の代わりに`DYLD_LIBRARY_PATH`の指定が必要です。 + ```bash DYLD_LIBRARY_PATH="/path/to/onnx" python run.py --voicelib_dir="/path/to/voicevox_core" ``` @@ -425,7 +436,7 @@ python make_docs.py ## ビルド この方法でビルドしたものは、リリースで公開されているものとは異なります。 -また、GPUで利用するにはcuDNNやCUDA、DirectMLなどのライブラリが追加で必要となります。 +また、GPU で利用するには cuDNN や CUDA、DirectML などのライブラリが追加で必要となります。 ```bash python -m pip install -r requirements-dev.txt diff --git "a/docs/VOICEVOX\351\237\263\345\243\260\345\220\210\346\210\220\343\202\250\343\203\263\343\202\270\343\203\263\343\201\250\343\201\256\351\200\243\346\220\272.md" "b/docs/VOICEVOX\351\237\263\345\243\260\345\220\210\346\210\220\343\202\250\343\203\263\343\202\270\343\203\263\343\201\250\343\201\256\351\200\243\346\220\272.md" index 09cab0ed9..540173be1 100644 --- "a/docs/VOICEVOX\351\237\263\345\243\260\345\220\210\346\210\220\343\202\250\343\203\263\343\202\270\343\203\263\343\201\250\343\201\256\351\200\243\346\220\272.md" +++ "b/docs/VOICEVOX\351\237\263\345\243\260\345\220\210\346\210\220\343\202\250\343\203\263\343\202\270\343\203\263\343\201\250\343\201\256\351\200\243\346\220\272.md" @@ -2,6 +2,6 @@ - バージョンが上がっても、`/audio_query`で返ってくる値をそのまま`/synthesis`に POST すれば音声合成できるようにする予定です - `AudioQuery`のパラメータは増えますが、なるべくデフォルト値で以前と変わらない音声が生成されるようにします -- バージョン0.7から音声スタイルが実装されました。スタイルの情報は`/speakers`から取得できます - - スタイルの情報にある`styleId`を`speaker`に指定することで、今まで通り音声合成ができます - - styleIdの指定先がspeakerなのは互換性のためです +- バージョン 0.7 から音声スタイルが実装されました。スタイルの情報は`/speakers`から取得できます + - スタイルの情報にある`style_id`を`speaker`に指定することで、今まで通り音声合成ができます + - style_id の指定先が speaker なのは互換性のためです diff --git a/run.py b/run.py index 1fbf25696..fa006c788 100644 --- a/run.py +++ b/run.py @@ -497,7 +497,7 @@ def is_morphable( ): """ 指定された2人の話者でモーフィング機能を利用可能か返します。 - モーフィングの許可/禁止は`/speakers`の`speaker.supportedFeatures.synthesisMorphing`に記載されています。 + モーフィングの許可/禁止は`/speakers`の`speaker.supported_features.synthesisMorphing`に記載されています。 プロパティが存在しない場合は、モーフィングが許可されているとみなします。 """ engine = get_engine(core_version) diff --git a/speaker_info/35b2c544-660e-401e-b503-0e14c635303a/metas.json b/speaker_info/35b2c544-660e-401e-b503-0e14c635303a/metas.json index 41e6bede8..3dea87454 100644 --- a/speaker_info/35b2c544-660e-401e-b503-0e14c635303a/metas.json +++ b/speaker_info/35b2c544-660e-401e-b503-0e14c635303a/metas.json @@ -1,10 +1,3 @@ { - "speakerName": "dummy3", - "speakerUuid": "dummy3uuid", - "supportedFeatures": {"permitedSynthesisMorphing": "NOTHING"}, - "styles": [ - { - "styleId": 8 - } - ] -} \ No newline at end of file + "supported_features": { "permited_synthesis_morphing": "NOTHING" } +} diff --git a/speaker_info/388f246b-8c41-4ac1-8e2d-5d79f3ff56d9/metas.json b/speaker_info/388f246b-8c41-4ac1-8e2d-5d79f3ff56d9/metas.json index b297f7226..0947273bd 100644 --- a/speaker_info/388f246b-8c41-4ac1-8e2d-5d79f3ff56d9/metas.json +++ b/speaker_info/388f246b-8c41-4ac1-8e2d-5d79f3ff56d9/metas.json @@ -1,22 +1,3 @@ { - "speakerName": "dummy2", - "speakerUuid": "dummy2uuid", - "supportedFeatures": {"permitedSynthesisMorphing": "SELF_ONLY"}, - "styles": [ - { - "styleId": 3 - }, - { - "styleName": "style2", - "styleId": 1 - }, - { - "styleName": "style3", - "styleId": 7 - }, - { - "styleName": "style4", - "styleId": 5 - } - ] -} \ No newline at end of file + "supported_features": { "permited_synthesis_morphing": "SELF_ONLY" } +} diff --git a/speaker_info/7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff/metas.json b/speaker_info/7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff/metas.json index 270afaaaf..0967ef424 100644 --- a/speaker_info/7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff/metas.json +++ b/speaker_info/7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff/metas.json @@ -1,21 +1 @@ -{ - "speakerName": "dummy1", - "speakerUuid": "dummy1uuid", - "styles": [ - { - "styleId": 2 - }, - { - "styleName": "style2", - "styleId": 0 - }, - { - "styleName": "style3", - "styleId": 6 - }, - { - "styleName": "style4", - "styleId": 4 - } - ] -} \ No newline at end of file +{} diff --git a/speaker_info/b1a81618-b27b-40d2-b0ea-27a9ad408c4b/metas.json b/speaker_info/b1a81618-b27b-40d2-b0ea-27a9ad408c4b/metas.json index eeb1c5b27..c6d7d1ec0 100644 --- a/speaker_info/b1a81618-b27b-40d2-b0ea-27a9ad408c4b/metas.json +++ b/speaker_info/b1a81618-b27b-40d2-b0ea-27a9ad408c4b/metas.json @@ -1,10 +1,3 @@ { - "speakerName": "dummy4", - "speakerUuid": "dummy4uuid", - "supportedFeatures": {"permitedSynthesisMorphing": "ALL"}, - "styles": [ - { - "styleId": 9 - } - ] -} \ No newline at end of file + "supported_features": { "permited_synthesis_morphing": "ALL" } +} diff --git a/voicevox_engine/morphing.py b/voicevox_engine/morphing.py index 4d926a6a3..d49fdb358 100644 --- a/voicevox_engine/morphing.py +++ b/voicevox_engine/morphing.py @@ -93,14 +93,14 @@ def is_synthesis_morphing_permitted( # FIXME: 他にsupported_featuresができたら共通化する base_speaker_morphing_info: SpeakerSupporPermitedSynthesisMorphing = ( - base_speaker_engine_info.get("supportedFeatures", dict()).get( - "permitedSynthesisMorphing", SpeakerSupporPermitedSynthesisMorphing(None) + base_speaker_engine_info.get("supported_features", dict()).get( + "permited_synthesis_morphing", SpeakerSupporPermitedSynthesisMorphing(None) ) ) target_speaker_morphing_info: SpeakerSupporPermitedSynthesisMorphing = ( - target_speaker_engine_info.get("supportedFeatures", dict()).get( - "permitedSynthesisMorphing", SpeakerSupporPermitedSynthesisMorphing(None) + target_speaker_engine_info.get("supported_features", dict()).get( + "permited_synthesis_morphing", SpeakerSupporPermitedSynthesisMorphing(None) ) ) From eb2511638a1a12774dee76059d1e250f05e4e8d7 Mon Sep 17 00:00:00 2001 From: Hiroshiba Date: Thu, 19 Jan 2023 13:00:30 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E3=81=A4=E3=81=84=E3=81=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 79bbe082d..578981e77 100644 --- a/README.md +++ b/README.md @@ -314,7 +314,7 @@ Issue 側で取り組み始めたことを伝えるか、最初に Draft プル ```bash # 開発に必要なライブラリのインストール -python -m pip install -r requirements-test.txt +python -m pip install -r requirements-dev.txt -r requirements-test.txt # とりあえず実行したいだけなら代わりにこちら python -m pip install -r requirements.txt From 8176704b55b4b5df8d1ab11d246416b8ad729089 Mon Sep 17 00:00:00 2001 From: Hiroshiba Date: Thu, 19 Jan 2023 13:04:31 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=E3=83=9F=E3=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 59 ++++++++++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 578981e77..63a45ac89 100644 --- a/README.md +++ b/README.md @@ -98,11 +98,11 @@ curl -s \ ### ユーザー辞書機能について -API からユーザー辞書の参照、単語の追加、編集、削除を行うことができます。 +APIからユーザー辞書の参照、単語の追加、編集、削除を行うことができます。 #### 参照 -`/user_dict`に GET リクエストを投げることでユーザー辞書の一覧を取得することができます。 +`/user_dict`にGETリクエストを投げることでユーザー辞書の一覧を取得することができます。 ```bash curl -s -X GET "localhost:50021/user_dict" @@ -110,18 +110,17 @@ curl -s -X GET "localhost:50021/user_dict" #### 単語追加 -`/user_dict_word`に POST リクエストを投げる事でユーザー辞書に単語を追加することができます。 -URL パラメータとして、以下が必要です。 - +`/user_dict_word`にPOSTリクエストを投げる事でユーザー辞書に単語を追加することができます。 +URLパラメータとして、以下が必要です。 - surface (辞書に登録する単語) - pronunciation (カタカナでの読み方) - accent_type (アクセント核位置、整数) アクセント核位置については、こちらの文章が参考になるかと思います。 〇型となっている数字の部分がアクセント核位置になります。 -https://tdmelodic.readthedocs.io/ja/latest/pages/introduction.html +https://tdmelodic.readthedocs.io/ja/latest/pages/introduction.html -成功した場合の返り値は単語に割り当てられる UUID の文字列になります。 +成功した場合の返り値は単語に割り当てられるUUIDの文字列になります。 ```bash surface="test" @@ -137,14 +136,13 @@ curl -s -X POST "localhost:50021/user_dict_word" \ #### 単語修正 -`/user_dict_word/{word_uuid}`に PUT リクエストを投げる事でユーザー辞書の単語を修正することができます。 -URL パラメータとして、以下が必要です。 - +`/user_dict_word/{word_uuid}`にPUTリクエストを投げる事でユーザー辞書の単語を修正することができます。 +URLパラメータとして、以下が必要です。 - surface (辞書に登録するワード) - pronunciation (カタカナでの読み方) - accent_type (アクセント核位置、整数) -word_uuid は単語追加時に確認できるほか、ユーザー辞書を参照することでも確認できます。 +word_uuidは単語追加時に確認できるほか、ユーザー辞書を参照することでも確認できます。 成功した場合の返り値は`204 No Content`になります。 ```bash @@ -163,9 +161,9 @@ curl -s -X PUT "localhost:50021/user_dict_word/$word_uuid" \ #### 単語削除 -`/user_dict_word/{word_uuid}`に DELETE リクエストを投げる事でユーザー辞書の単語を削除することができます。 +`/user_dict_word/{word_uuid}`にDELETEリクエストを投げる事でユーザー辞書の単語を削除することができます。 -word_uuid は単語追加時に確認できるほか、ユーザー辞書を参照することでも確認できます。 +word_uuidは単語追加時に確認できるほか、ユーザー辞書を参照することでも確認できます。 成功した場合の返り値は`204 No Content`になります。 ```bash @@ -269,11 +267,11 @@ curl -s -X GET "localhost:50021/speaker_info?speaker_uuid=7ffcb7ce-00ec-4bdc-82c この API は実験的機能であり、エンジン起動時に引数で`--enable_cancellable_synthesis`を指定しないと有効化されません。 音声合成に必要なパラメータは`/synthesis`と同様です。 -### CORS 設定 +### CORS設定 -VOICEVOX ではセキュリティ保護のため`localhost`・`127.0.0.1`・`app://`・Origin なし以外の Origin からリクエストを受け入れないようになっています。 +VOICEVOXではセキュリティ保護のため`localhost`・`127.0.0.1`・`app://`・Originなし以外のOriginからリクエストを受け入れないようになっています。 そのため、一部のサードパーティアプリからのレスポンスを受け取れない可能性があります。 -これを回避する方法として、エンジンから設定できる UI を用意しています。 +これを回避する方法として、エンジンから設定できるUIを用意しています。 #### 設定方法 @@ -372,38 +370,29 @@ CPU スレッド数が未指定の場合は、論理コア数の半分か物理 ``` ### 過去のバージョンのコアを使う - -VOICEVOX Core 0.5.4 以降のコアを使用する事が可能です。 -Mac での libtorch 版コアのサポートはしていません。 +VOICEVOX Core 0.5.4以降のコアを使用する事が可能です。 +Macでのlibtorch版コアのサポートはしていません。 #### 過去のバイナリを指定する - -製品版 VOICEVOX もしくはコンパイル済みエンジンのディレクトリを`--voicevox_dir`引数で指定すると、そのバージョンのコアが使用されます。 - +製品版VOICEVOXもしくはコンパイル済みエンジンのディレクトリを`--voicevox_dir`引数で指定すると、そのバージョンのコアが使用されます。 ```bash python run.py --voicevox_dir="/path/to/voicevox" ``` - -Mac では、`DYLD_LIBRARY_PATH`の指定が必要です。 - +Macでは、`DYLD_LIBRARY_PATH`の指定が必要です。 ```bash DYLD_LIBRARY_PATH="/path/to/voicevox" python run.py --voicevox_dir="/path/to/voicevox" ``` #### 音声ライブラリを直接指定する - -[VOICEVOX Core の zip ファイル](https://github.com/VOICEVOX/voicevox_core/releases)を解凍したディレクトリを`--voicelib_dir`引数で指定します。 +[VOICEVOX Coreのzipファイル](https://github.com/VOICEVOX/voicevox_core/releases)を解凍したディレクトリを`--voicelib_dir`引数で指定します。 また、コアのバージョンに合わせて、[libtorch](https://pytorch.org/)や[onnxruntime](https://github.com/microsoft/onnxruntime)のディレクトリを`--runtime_dir`引数で指定します。 -ただし、システムの探索パス上に libtorch、onnxruntime がある場合、`--runtime_dir`引数の指定は不要です。 -`--voicelib_dir`引数、`--runtime_dir`引数は複数回使用可能です。 -API エンドポイントでコアのバージョンを指定する場合は`core_version`引数を指定してください。(未指定の場合は最新のコアが使用されます) - +ただし、システムの探索パス上にlibtorch、onnxruntimeがある場合、`--runtime_dir`引数の指定は不要です。 +`--voicelib_dir`引数、`--runtime_dir`引数は複数回使用可能です。 +APIエンドポイントでコアのバージョンを指定する場合は`core_version`引数を指定してください。(未指定の場合は最新のコアが使用されます) ```bash python run.py --voicelib_dir="/path/to/voicevox_core" --runtime_dir="/path/to/libtorch_or_onnx" ``` - -Mac では、`--runtime_dir`引数の代わりに`DYLD_LIBRARY_PATH`の指定が必要です。 - +Macでは、`--runtime_dir`引数の代わりに`DYLD_LIBRARY_PATH`の指定が必要です。 ```bash DYLD_LIBRARY_PATH="/path/to/onnx" python run.py --voicelib_dir="/path/to/voicevox_core" ``` @@ -436,7 +425,7 @@ python make_docs.py ## ビルド この方法でビルドしたものは、リリースで公開されているものとは異なります。 -また、GPU で利用するには cuDNN や CUDA、DirectML などのライブラリが追加で必要となります。 +また、GPUで利用するにはcuDNNやCUDA、DirectMLなどのライブラリが追加で必要となります。 ```bash python -m pip install -r requirements-dev.txt