- Notifications
You must be signed in to change notification settings - Fork0
音声認識、文章生成、音声合成を使って対話するチャットボットアプリ
License
AkariGroup/akari_chatgpt_bot
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
音声認識、文章生成、音声合成を使って対話するチャットボットアプリです。
AKARI上で動作確認済み。chatbot_akari.py
以外はUbuntu22.04環境であれば使用可能です。
マイクとスピーカーは別途外付けする必要があります。
submoduleの更新
git submodule update --init
ライブラリのインストール
sudo apt install python3.10 python3.10-venv portaudio19-dev gnome-terminal
仮想環境の作成
python3 -m venv venv
. venv/bin/activate
pip install -r requirements.txt
(音声認識を使う場合) Cloud Speech-to-Text APIの有効化、秘密鍵ダウンロード
Google cloud consoleに登録し、Cloud Speech-to-Text APIを有効化する。
ユーザーをCloud Speech 管理者に登録する。
認証用のjsonをダウンロードし、~/.bashrc
にパスを記述export GOOGLE_APPLICATION_CREDENTIALS=/home/xxx/xxx.json
プロジェクトIDを~/.bashrc
に記述export GOOGLE_SPEECH_PROJECT_ID="xxxxxxxxxxx"
(chatGPTの文章生成を使う場合)OPENAI API KEYの作成
OPENAIにてユーザ登録しAPI KEYを作成し、~/.bashrcに自身のkeyを記述export OPENAI_API_KEY=sk-xxxxxxxxxxxxxxx
(Claudeの文章生成を使う場合)ANTHROPIC API KEYの作成
ANTHROPICにてユーザ登録しAPI KEYを作成し、~/.bashrcに自身のkeyを記述export ANTHROPIC_API_KEY=sk-xxxxxxxxxxxxxxx
(Geminiの文章生成を使う場合)GEMINI API KEYの作成
Google AI Studioにてユーザ登録しAPI KEYを作成し、~/.bashrcに自身のkeyを記述export GEMINI_API_KEY=xxxxxxxxxxxxxxx
(VoiceVox web版の音声合成を使う場合) VOICEVOX web版のAPI KEYの作成WEB版VOICEVOX API(高速) にてapikeyを作成し、~/.bashrcに自身のkeyを記述
export VOICEVOX_API_KEY='xxxxxxxxxxxxxxx
(VoiceVoxの音声合成を使う場合) VOICEVOXのダウンロード
VOICEVOXをダウンロード、インストールする。
AKARIでVOICEVOXのローカル版を使う場合、AKARI本体内のCPUでVOICEVOXを実行すると処理時間がかかるので、リモートPC上(特にGPU版)でVOICVOXを実行することを推奨する。
その場合下記を参考にdocker pullを行う。
(CPU版)docker pull voicevox/voicevox_engine:cpu-ubuntu20.04-latest
(nvidia GPU版)docker pull voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
(Style-Bert-VITS2の音声合成を使う場合) Style-Bert-VITS2のセットアップ
Style-Bert-VITS2のREADMEに沿ってセットアップする。
し、下記のコマンドでFastAPIサーバを起動する。python3 server_fastapi.py
AKARIなどで動かす場合は、同一ネットワーク内の外部PC上にサーバーを立てることを推奨。
(AivisSpeechの音声合成を使う場合) AivisSpeech Engineのセットアップ
AKARI本体内のCPUでAivisSpeech Engineを実行すると処理時間がかかるので、リモートPC上(特にGPUありのPC)で実行することを推奨する。
下記はnvidia GPU搭載のLinux PC、Cuda 12.4、cuDNN9がセットアップされている場合の手順。
AivisSpeech enginiのreleaseページから最新のAivisSpeech Engineをダウンロードする。
下記のコマンドでFastAPIサーバを起動する。./run --use_gpu --host {起動しているPCのIPアドレス}
(AKARIのモーション再生を使う場合) akari_motion_serverのセットアップ
git clone https://github.com/AkariGroup/akari_motion_server
akari_motion_server内のREADME.mdに沿ってセットアップする。
AKARIでVOICEVOXのローカル版を使う場合、AKARI本体内のCPUでVOICEVOXを実行すると処理時間がかかるので、リモートPC上(特にGPU版)でVOICVOXを実行することを推奨する。
その場合下記を参考にdocker pullを行う。
(CPU版)docker pull voicevox/voicevox_engine:cpu-ubuntu20.04-latest
(nvidia GPU版)docker pull voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
上記でVOICEVOXを起動した後、AKARI上で"--voice_host"にこのPCのIPアドレスを指定する。
- 音声合成を使う場合、実行したい環境に合わせて下記を起動する。
(VoiceVox web版)
特に起動は不要。
(VoiceVox)
(CPU版)docker run --rm -it -p '{VOICEVOXを起動するPC自身のIPアドレス}:50021:50021' voicevox/voicevox_engine:cpu-ubuntu20.04-latest
(nvidia GPU版)docker run --rm --gpus all -p '{VOICEVOXを起動するPC自身のIPアドレス}:50021:50021' voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
(Style-Bert-VITS2)
Style-Bert-VITS2のディレクトリ直下で下記を実行python3 server_fastapi.py
(AivisSpeech)AivisSpeech Engineのディレクトリ直下で下記を実行./run --use_gpu
マイクへの発話を文章に変換python3 speech_to_text_example.py
引数は下記が使用可能
-t
,--timeout
: マイク入力がこの時間しきい値以下になったら音声入力を打ち切る。デフォルトは0.5[s]。短いと応答が早くなるが不安定になりやすい。-p
,--power_threshold
: マイク入力の音量しきい値。デフォルトは0で、0の場合アプリ起動時に周辺環境の音量を取得し、そこから音量しきい値を自動決定する。--v2
: この引数をつけると、google sppech-to-text v2を使用する。引数がない場合はgoogle sppech-to-text v1を使用する。
キーボード入力した文章に対してchatGPTで返答を作成python3 chatgpt_example.py
引数は下記が使用可能
-m
,--model
: 使用するモデル名を指定可能。モデル名を羅列することで、全モデルに対して一括で問いかけが可能。例)python3 chatgpt_example.py -m gpt-4o claude-3-7-sonnet-latest gemini-2.0-flash
--thinking
: Claudeの拡張思考機能を使うかどうか。このオプションを有効化すると、拡張思考機能を有効化する。claude-3-7-sonnet-latest
およびその他のclaude3.7系モデル、もしくはgemini2.0以降で使用すること。--web_search
: web検索を使うかどうか。このオプションを有効化すると、Web検索を行った結果を用いて回答する。gemini2.0以降かgpt-4.1
系のモデルで使用すること。-s
,--system
: システムプロンプトを指定する。指定しない場合、config/system_prompt.txtの内容を使用する。
キーボード入力した文章を音声合成で発話
python3 voicevox_example.py
引数は下記が使用可能
--voicevox_local
: このオプションをつけた場合、voicevoxのweb版ではなくローカル版を実行する。--voice_host
:--voicevox_local
を有効にした場合、ここで指定したhostのvoicevoxにリクエストを送信する。デフォルトは"127.0.0.1"なのでlocalhostのvoicevoxを利用する。--voice_port
:--voicevox_local
を有効にした場合、ここで指定したportのvoicevoxにリクエストを送信する。デフォルトは50021。
キーボード入力した文章を音声合成で発話
python3 style_bert_vits_example.py
引数は下記が使用可能
--voice_host
: ここで指定したhostのserver_fastapi.py
にリクエストを送信する。デフォルトは"127.0.0.1"--voice_port
: ここで指定したportのserver_fastapi.py
にリクエストを送信する。デフォルトは5000。
キーボード入力した文章を音声合成で発話
python3 aivis_example.py
引数は下記が使用可能
--voice_host
: ここで指定したhostにリクエストを送信する。デフォルトは"127.0.0.1"--voice_port
: ここで指定したportにリクエストを送信する。デフォルトは10101。
キーボード入力した文章内の英単語をカタカナに変換する。対話bot内では、英単語をカタカナに変換してから音声合成で発話するようになっており、その機能のサンプル。
python3 text_to_kana_example.py
実行後、ターミナルでEnterキーを押し、マイクに話しかけると返答が返ってくる。
python3 chatbot.py
python3 chatbot_akari.py
引数は下記が使用可能
-t
,--timeout
: マイク入力がこの時間しきい値以下になったら音声入力を打ち切る。デフォルトは0.5[s]。短いと応答が早くなるが不安定になりやすい。-p
,--power_threshold
: マイク入力の音量しきい値。デフォルトは0で、0の場合アプリ起動時に周辺環境の音量を取得し、そこから音量しきい値を自動決定する。--v2
: この引数をつけると、google sppech-to-text v2を使用する。引数がない場合はgoogle sppech-to-text v1を使用する。-m
,--model
: 使用するモデル名を指定可能。モデル名はOpenAI, Anthropic, Geminiのものが選択可能。--voicevox_local
: このオプションをつけた場合、voicevoxのweb版ではなくローカル版を実行する。--voice_host
:--voicevox_local
を有効にした場合、ここで指定したhostのvoicevoxにリクエストを送信する。デフォルトは"127.0.0.1"なのでlocalhostのvoicevoxを利用する。--voice_port
:--voicevox_local
を有効にした場合、ここで指定したportのvoicevoxにリクエストを送信する。デフォルトは50021。
発話の最初の数文字を認識した時点で選択肢から返答を作成しておくことで、第一声を遅延なく返答する方法です。
Google音声認識、chatGPT、Voicevoxとのやり取りをする各アプリは個別に動作しており、各アプリ間はgrpcで通信しています。
必ず、上記実行準備で音声合成を起動させておくこと。
- (AKARIのモーション再生を行う場合)akari_motion_serverを起動する。
起動方法はhttps://github.com/AkariGroup/akari_motion_server を参照。
以下2は使用する音声合成の種類によって分岐する。
音声合成にVOICEVOXを使う場合
voicevox_server
を起動する。(Voicevoxへの送信サーバ)python3 voicevox_server.py
引数は下記が使用可能
--voicevox_local
: このオプションをつけた場合、voicevoxのweb版ではなくローカル版を実行する。--voice_host
:--voicevox_local
を有効にした場合、ここで指定したhostのvoicevoxにリクエストを送信する。デフォルトは"127.0.0.1"なのでlocalhostのvoicevoxを利用する。--voice_port
:--voicevox_local
を有効にした場合、ここで指定したportのvoicevoxにリクエストを送信する。デフォルトは50021。--robot_ip
: akari_motion_serverのIPアドレス。デフォルトは"127.0.0.1"--robot_port
: akari_motion_serverのポート。デフォルトは"50055"--no_motion
: このオプションをつけると、発話に応じてヘッドが動く動作を無効化する。
音声合成にStyle-Bert-VITS2を使う場合
style_bert_vits_server
を起動する。(Style-Bert-VITS2への送信サーバ)python3 style_bert_vits_server.py
引数は下記が使用可能
--voice_host
: ここで指定したhostのserver_fastapi.py
にリクエストを送信する。デフォルトは"127.0.0.1"--voice_port
: ここで指定したportのserver_fastapi.py
にリクエストを送信する。デフォルトは5000。--robot_ip
: akari_motion_serverのIPアドレス。デフォルトは"127.0.0.1"--robot_port
: akari_motion_serverのポート。デフォルトは"50055"--no_motion
: このオプションをつけると、発話に応じてヘッドが動く動作を無効化する。
音声合成にAivis Speechを使う場合
aivis_server
を起動する。(Aivis Speechへの送信サーバ)python3 aivis_server.py
引数は下記が使用可能
--voice_host
: ここで指定したhostにリクエストを送信する。デフォルトは"127.0.0.1"--voice_port
: ここで指定したportにリクエストを送信する。デフォルトは10101。--robot_ip
: akari_motion_serverのIPアドレス。デフォルトは"127.0.0.1"--robot_port
: akari_motion_serverのポート。デフォルトは"50055"--no_motion
: このオプションをつけると、発話に応じてヘッドが動く動作を無効化する。
gpt_publisher
を起動する。(ChatGPTへリクエストを送信し、受信結果を音声合成サーバへ渡す。)python3 gpt_publisher.py
引数は下記が使用可能
--ip
: gpt_serverのIPアドレス。デフォルトは"127.0.0.1"--port
: gpt_serverのポート。デフォルトは"10001"
speech_publisher.pyを起動する。(Google音声認識の結果をgpt_publisherへ渡す。)
python3 speech_publisher.py
引数は下記が使用可能
--robot_ip
: akari_motion_serverのIPアドレス。デフォルトは"127.0.0.1"--robot_port
: akari_motion_serverのポート。デフォルトは"50055"--gpt_ip
: gpt_serverのIPアドレス。デフォルトは"127.0.0.1"--gpt_port
: gpt_serverのポート。デフォルトは"10001"--voicevox_ip
: voicevox_serverのIPアドレス。デフォルトは"127.0.0.1"--voicevox_port
: voicevox_serverのポート。デフォルトは"10002"-t
,--timeout
: マイク入力がこの時間しきい値以下になったら音声入力を打ち切る。デフォルトは0.5[s]。短いと応答が早くなるが不安定になりやすい。-p
,--power_threshold
: マイク入力の音量しきい値。デフォルトは0で、0の場合アプリ起動時に周辺環境の音量を取得し、そこから音量しきい値を自動決定する。--progress_report_len
: 音声認識の文字数がここで入力した数値以上になると、一旦gpt_publisherに認識結果を送り、第一声とモーションを生成する(遅延なし応答用)。0にすると無効。デフォルトは8。--no_motion
: このオプションをつけた場合、音声入力中のうなずき動作を無効化する。--auto
: 自動モードの有効化。通常キーボードでEnterキーを入力するまで待つが、この引数をつけるとEnterキーの入力をスキップする。--v2
: この引数をつけると、google sppech-to-text v2を使用する。引数がない場合はgoogle sppech-to-text v1を使用する。
speech_publisher.py
のターミナルでEnterキーを押し、マイクに話しかけると返答が返ってくる。
上記4.のspeech_publisher.py
に--auto
オプションをつけて起動すると音声入力前のEnterキー入力をスキップできるが、この場合マイクの設置位置や種類によっては自身の合成音声を認識してしまう。そのような環境では、下記talk_controller_client
を起動することで、ロボット側が音声出力中は音声認識をストップすることができる。
python3 talk_controller_client.py
必ず、上記実行準備で音声合成を起動させておくこと。
音声合成にVOICEVOXを使う場合
(通常モード)
スクリプトを実行する。
cd script
./faster_chatbot.sh {1.でVoicevoxを起動したPCのIPアドレス} {akari_motion_serverのパス}
akari_motion_serverのパスを入力しなければ、akari_motion_serverは起動せず、モーションの再生は行われません(AKARI以外でも使えます)。
speech_publisher.py
のターミナルでEnterキーを押し、マイクに話しかけると返答が返ってくる。
(自動モード)
スクリプトを実行する。
cd script
./faster_chatbot_auto.sh {1.でVoicevoxを起動したPCのIPアドレス} {akari_motion_serverのパス}
akari_motion_serverのパスを入力しなければ、akari_motion_serverは起動せず、モーションの再生は行われません(AKARI以外でも使えます)。
音声合成にStyle-Bert-VITS2を使う場合
(通常モード)
スクリプトを実行する。
cd script
./faster_chatbot_bert_vits.sh {2.でStyle-Bert-VITS2を起動したPCのIPアドレス} akari_motion_serverのパス}
akari_motion_serverのパスを入力しなければ、akari_motion_serverは起動せず、モーションの再生は行われません(AKARI以外でも使えます)。
speech_publisher.py
のターミナルでEnterキーを押し、マイクに話しかけると返答が返ってくる。
(自動モード)
スクリプトを実行する。
cd script
./faster_chatbot_bert_vits_auto.sh {2.でStyle-Bert-VITS2を起動したPCのIPアドレス} akari_motion_serverのパス}
akari_motion_serverのパスを入力しなければ、akari_motion_serverは起動せず、モーションの再生は行われません(AKARI以外でも使えます)。
Voicevoxの音声合成では、デフォルトの音声として「VOICEVOX:春日部つむぎ」を使用しています。
About
音声認識、文章生成、音声合成を使って対話するチャットボットアプリ
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.