見出し画像

ChatAIのキャラクターと音声で話すやり方!(AI絵使いにおすすめ)

※当記事は古くなっており、非推奨です。

こんにちは!やなぎ(https://twitter.com/Yanagi_aiai)です。ふだんAI全般で遊びながら、技術検証を発信してます!


この記事のうれしいところ

OpenAIのAPIを使用して、ChatAIにキャラ付けして音声会話する方法について解説します。
できる限り簡単な作業と学習量で、AIとリアルタイム音声会話する感動と、その環境を自分で構築する喜びを味わってもらうことが目的です。

ちなみにわたしのレベル感としては、先月

print("hello world")

からPythonを始めたくらいの初学者です。
そのレベルでも何とかなったので、ぜひ実践してAIと会話してもらえたら嬉しいです。
 (もし間違いがあったら教えてください!)

(2023年3月2日追記)
本日ChatGPTのAPIがリリースされました!
当記事ではOpenAIのAPIで実行していますが、ChatGPTのAPIのほうが安い&応答が早いので、そちらを使うほうがおすすめです。

この記事を読むべき人

・何とかAutomatic1111のwebUIだけ導入して、AI絵作りしてる人
・Pythonのコード、何もわからないという人
・AIと音声会話してみたい人

できないこと

・アバターや絵と連動しての会話(可能だけど、別の簡単なやり方がある)
・youtube等での配信(同上)
※「キャラ付け」したAIと会話はできますが、この記事で紹介する内容では絵が動くわけではないです

想定している環境

・Windows
・Python3.10.x
・CUDA11.6
・Git導入済
・テキストエディタ導入済(APIコピペするだけなので、何でもいい)

ローカルでAI絵を作ってる方の標準的な環境を想定しています。
それでは本題に入ります。

手順


PythonとGitの導入(WebUI導入済の方はスキップでOK)

わたしの環境としてはPythonのバージョンは3.10.8、CUDA11.6です。
WebUIを動かしている方は、多分Pythonは3.10.xで同様の環境になっている方が多いとおもいます。

環境構築

下記の3つのツールが必要です。

  • Whisper(音声書き起こしツール)

  • OpenAIのAPI(GPT-3を外部から使う)

  • COEIROINK(テキスト読み上げツール)

順番に導入の解説をしていきます。

Whisperの導入

いい感じの参考リンクがあるので、こちらをご覧ください
リンク先でも案内されていますが、FFmpegというフリーウェアの導入も併せて必要になります。

「FFmpegのパスを通す」ところがつまづきポイントです。

FFmpegのパスを通す簡単なやり方

  • ダウンロードしたzipファイルを解凍する

  • 出来たフォルダを適当に置く(下記のような位置がおすすめ)※図1

  • Windowsボタンを押して「環境変数」と入力し、「システムの環境変数」を開く※図2

  • ユーザー環境変数の「Path」を押して編集

  • 「新規」を押してbinフォルダの場所をコピペ※図3

図1フォルダの場所
環境変数の場所
環境変数の入力例

これでFFmpegの導入は完了です。一旦PCを再起動してください。

フォルダの作成

まず、プログラムを実行するためのフォルダを作成します。適当な場所にフォルダを作成してください。

その後、上の例の場合だとaivtuberフォルダを開いてください。
中身が空のフォルダが表示されます。
そこでShift+右クリックでPowerShellを開いてください。
以下、コードブロックの中身をコピペしていきます。

(以後、もしPowerShellを閉じてしまったら、この手順の.venv\Scripts\activateの部分のコピペをやり直してから作業再開してください)

python -m venv .venv
.venv\Scripts\activate

続いてWhisperrをインストールします

pip install git+https://github.com/openai/whisper.git 

pytorchとCUDAのバージョンを合わせる必要があります

pip list

このように入力して、torch 1.13.1+cu116と表示があれば、わたしと同様の環境なので問題ないです。

(ここからスキップOK)異なる場合
一旦Pytorchのアンインストールをします。

pip uninstall torch

その後、Pytorchの再インストールをしてください。

https://pytorch.org/

(一応載せておく)CUDAのバージョン11.6はこちら
https://developer.nvidia.com/cuda-11-6-0-download-archive

(ここまでスキップOK)
これでWhisperの導入は完了です。
一旦音声ファイルを読み込ませてみて、書き起こしで遊んでみるのも楽しいです。

OpenAIのAPIの取得

AIキャラクターとの音声会話には、OpenAIのAPIを利用します。
参考リンクを貼っておきます。

上記の方法でAPIキーを取得してください。
ここは手順通りやれば、つまづきポイントはそんなにないと思います(多分)

COEIROINKの導入

下記から導入できます。
ダウンロードページから、GPU版の最新版をダウンロードしてください。

COEIROINKの導入ができたら、ブラウザから下記のアドレスにアクセスしてください。
http://localhost:50031/docs
APIの使い方を見ることができます。

導入に関しては、下記に神記事があります。

以上で必要なツール類の導入は完了です!

Pythonモジュールとスクリプトの導入

本記事のキモがこちらです。
先ほどのPowerShell画面に戻り、必要なモジュールをインストールしていきます。
下記をコピペしてください。

pip install numpy
pip install soundfile
pip install SpeechRecognition
pip install whisper
pip install openai
pip install pydub
pip install requests
pip install soundcard
pip install pytchat
pip install argparse
pip install keyboard
pip install simpleaudio

色んなものを参考にして、とりあえず動くコードを用意しました。
こちらを利用することで、「マイク認識→AIで返答→ボイス読み上げ」が自動化できます。

こちらをダウンロードして、最初に作成したフォルダの中に入れてください。
キャラクターのセリフ例は思い浮かばなかったので、ChatGPTくんに考えてもらいました。

一応コードの中身は下記です。
エディタで上記のmic_gpt3.pyを開いて、"ここにAPIキーを入力"の場所に、ご自身のOpenAIのAPIキーをコピペして保存してください。

from io import BytesIO

import numpy as np
import soundfile as sf
import speech_recognition as sr
import whisper

import openai
import time

import requests
from pydub import AudioSegment, playback

import json

def completion(text):
    openai.api_key = "ここにAPIキーを入力"
    response = openai.Completion.create(
        engine="text-davinci-003",
        prompt=text,
        max_tokens=1024,
        temperature=0.7,
    )
    return response['choices'][0]['text']

def create_prompt(transcript):
    return f"""
架空のキャラクター「ナギ」を演じてください。
高飛車、銀髪ロング、お嬢様といった特徴をもったキャラクターです。
語尾には「ですわ」をつけることが多いです。
以下はナギのセリフの例です。

セリフ例
「わたくしの名前はナギですわ」
「あら、あなた、ちょっとしたことで落ち込まなくても大丈夫ですわ。私たちは、あなたの味方ですわから。」
「どうぞ、心配しなくても大丈夫ですわ。私がちゃんとサポートしてあげますから。」
「ごめんなさい、私もたまに強がってしまって、つい言ってしまったことがあるのですわ。でも、本当はあなたのことが大好きなのですわよ。」
「あなたはとても素晴らしい人ですわ。今度は、私があなたから学ぶ番ですわね。」
「私も時々、素直になれなくて、言葉がトゲトゲしいことがありますわ。でも、あなたが言ってくれたこと、とても嬉しかったですわ。」
「あなたが言ってくれたこと、とても勇気づけられましたわ。ありがとう、私もあなたのことが大好きですわ。」
「私も、あなたと一緒にいるととても楽しいのですわ。今度は、もっと一緒にいられるように計画を立てましょうね。」
「あなたが言ってくれたこと、すごく嬉しかったですわ。私も、あなたに何かお返しをしたいですわね。」
「あなたのために何かできることがあったら、いつでも言ってくださいませ。私たちは、あなたを全力で支えますわ。」
「私も、あなたのために何かできることがあったら、すぐにやってあげますわ。あなたと一緒にいると、とても楽しいですわ。」

{transcript}
"""

if __name__ == "__main__":
    model = whisper.load_model("medium")

    recognizer = sr.Recognizer()
    transcript = ""
    while True:
        with sr.Microphone(sample_rate=16_000) as source:
            print("会話受付中")
            audio = recognizer.listen(source)

        print("音声処理中 ...")
        wav_bytes = audio.get_wav_data()
        wav_stream = BytesIO(wav_bytes)
        audio_array, sampling_rate = sf.read(wav_stream)
        audio_fp32 = audio_array.astype(np.float32)

        result = model.transcribe(audio_fp32, fp16=False)
        text = result["text"]  # 生成されたテキストを変数に代入
        transcript += text
        print(text)
        prompt = create_prompt(transcript)
        summary = completion(prompt)
        print(summary)

        # パラメータ
        speaker_id = 0  # スピーカーID (0:つくよみちゃん)

        # 音声合成のクエリの作成
        response = requests.post(
            "http://localhost:50031/audio_query",
            params={
                'text': summary,
                'speaker': speaker_id,
                'core_version': '0.0.0'
            })
        query = response.json()

        # 音声合成のwavの生成
        response = requests.post(
            'http://localhost:50031/synthesis',
            params={
                'speaker': speaker_id,
                'core_version': "0.0.0",
                'enable_interrogative_upspeak': 'true'
            },
            data=json.dumps(query))

        # wavの音声を再生
        playback.play(AudioSegment(response.content,
            sample_width=2, frame_rate=44100, channels=1))

以上で環境構築、準備は完了です。
導入後、下記のコードをPowerShellにコピペすると起動します!

python mic_gpt3.py

うおおおお!AIと会話が出来ます!(妹がきれいな声なので、会話をお願いしました。わたしではないです。)

お疲れ様でした!

※動かない場合は、恐らくなんらかのモジュールが足りてないです。
エラーコードの表記に従って、下記のようにモジュールを入れてください。

pip install 〇〇〇

課題

1.記憶の保持ができないため、話していることを忘れる
2.プロンプトの初期化処理を行っていないため、会話が肥大化する
など

普段Pythonに触っている方なら、2の方はすぐに解決できるとおもいます

最後に

正直「とりあえず動く」程度のコードですが、最低限の機能は果たせているかなとおもいます。
修正箇所も多くこの状態で公開するか迷ったのですが、初学者のわたしが修正ばかりしていても時間がかかるし、その間にトレンドが変わってしまうと思い公開しました。

何より、わたしが音声会話AIを実際に作れたのは、圧倒的情報不足のこの界隈で、多くの方が率先して貴重な情報を発信してくれたおかげでした。
それならば、わたしも同じようにこれから始める方にも「会話するAIが作れる」楽しさを味わってもらいたいと思い、記事にしました。

ちなみに、制作過程ではChatGPTとCopilotを存分に活用しました。
おそらくもう間もなく、GUIでプログラミング不要でAI Vtuberを動かせるツールはたくさん出てくるとは思います。
しかし、何もないところから「イチから自分で作る喜び」は今やるのが一番味わえると思います。

興味を持ってもらえたら、ぜひ一緒にやりましょう!技術者の最後尾から応援しております!
あとわたしより詳しい方も多いと思うので、コメントやアドバイスなどいただけたら大変うれしいです!

Twitterもよろしくー

追記

どんな勉強したの?と聞かれたので追記します。
N予備校(月額1000円)で最初は勉強しましたが、Python Japanの公式サイトのほうが無料で質高かったです!
https://python.jp/train/index.html…
あと、下記の本をやりました。おすすめです。

とはいえ、プログラミングスクール系は避けておいたほうがいいと思うくらいで、教材は何でも大丈夫だとおもいます。
これらの教材は基礎は学べますが、やりたいこととはちょっとズレるので、
ネットで先人のコードを学びながら、ChatGPTとペアプロすることが大事かなと思います!

参考にした記事

以下の記事から部分的にコードをお借りしたりしています。

この記事をきっかけに、作ってみよう!と思えました

当記事はほとんど下記の記事のデッドコピーです。導入の手引にさせていただきました

colabで公開しているWhisperのコードが大変勉強になりました

「Whisperの音声認識→ChatGPTに送る」ところで大変勉強になりました

記事内で言及している「別のやり方」はこれです。
今回は何とか既存のサービスを使わずやりたかったのですが、次はmeboを使うやり方も試してみようと思っています。


この記事が気に入ったらサポートをしてみませんか?