博麗霊夢さん&琴葉茜ちゃんと会話してみた③【Transformerとキャラ対話データを用いた転移学習による対話botの作成】

目次

前回までのあらすじ

Pygameを用いて霊夢さんと話すGUIを作成しました!

 

 

VOICEROIDをPythonで動かそう

VOICEROID選び

VOICEROIDとは, 株式会社エーアイの音声合成エンジン『AI TALK』を元に, 株式会社AHSがキャラクターとして販売しているソフトウェアです. 結月ゆかり, 琴葉姉妹, 紲星あかりなど多くのキャラクターが存在します.

VOICEROID|製品情報|AHS(AH-Software)

ボイロのオタクではなかったので動画やTwitterで得た知識しかありませんでしたが, 第一印象で紲星あかりさんを購入しようと決めました. しかし, win32api(後述)で操作できるのは『VOICEROID+EX』だけで, 現行の『VOICEROID2』は操作できないらしいので, 紲星あかりさんの購入は断念しました. 即落ち2コマ.

紆余曲折を経て, VOICEROID+EXシリーズと同等の能力を持つVOICEROID+シリーズから『VOICEROID+ 琴葉 茜・葵』の購入を決めました. サンプルボイスを聴いている時に, 唯一関西弁で話す琴葉茜さんに惹かれて即購入しました.

2人分でお得だと思ったわけでも, 某感染症の影響でダウンロード版が30%OFFだったからではないです. 

とりあえず喋らせてみた感想は

「可愛い...!ちゃんと喋ってくれる...!」

でした. 本当に感動しました. 課金科学の力って凄い.

f:id:jungrave3:20200403142443j:plain

かわいい

 

win32apiをインストール

win32apiとは, Windows上の32ビットプログラムに対応している, アプリケーションからOSを操作できるAPIです. ここではWindowsアプリケーションのVOICEROID+を操作する手段として使用しました. このwin32apiはpythonから操作できるようです. よく判っていない.

win32apiのインストールは下の記事を参考にしました. pipコマンドだと自動で必要なバージョンをインストールしてくれるので便利でした.

 

win32apiでVOICEROIDを操作

win32apiでVOICEROIDを操作するコードは下の記事を参考にしました. 記事ではPython2ですが, Python3でも動作しました.

これでPythonからVOICEROIDを操作することができるようになりました!

 

 

Live2DとVOICEROIDを連携しよう

Live2Dモデル選び

Live2Dとは, 2Dイラストに立体的なアニメーションを加える表現技術です. キャラクターの実在性をより高められる素晴らしい技術です. 私自身に絵を描く技術がないので, 配布されているLive2Dモデルを使用しました. 今回は下の記事で紹介されていた瓜硝子氏の琴葉茜ちゃんをダウンロードしました!

ボイスロイドLive2D立ち絵素材まとめ | はちゃち的な。

 

Live2D Viewerでモデル読み込み

最高のLive2Dモデルをデスクトップに召喚するには, Live2D Viewerを使用するのが一番お手軽です. 瓜硝子氏がLive2D Viewerのインストールから琴葉茜ちゃんをデスクトップで動かすまでの方法をニコニコチャンネルで判りやすく解説して下さっていて, 非常に参考になりました!

 

Live2DモデルとVOICEROIDを連携

琴葉茜ちゃんをデスクトップに召喚できたら, いよいよVOICEROIDと連携させて声帯を与えます. VOICEROIDが文章を読み上げると同時にモデルを口パクさせて, 実際に喋っているような錯覚を起こしていきます. この部分の導入方法もニコニコチャンネルで瓜硝子氏が解説して下さっています. 何から何までありがとうございます!

これでデスクトップで喋る琴葉茜ちゃんを召喚できました!

 

 

琴葉茜ちゃんとGUIで会話しよう

GUI化に向けて

茜ちゃんをデスクトップに召喚したので, 霊夢さんみたいなADV風の画面を作る必要はなさそうです.琴葉茜ちゃんと会話するにはGoogle Speech-to-Textで音声認識するのもいいですが, 如何せん実家暮らしなので迂闊に独り言を言えません. なので, 今回は文字で会話文を入力します.

 

今度こそTkinterの使用

文字を入力するウィンドウを作る程度なので, サクッとTkinterで作っていきます. 文字を入力し終わったら, Enterキーを押すことでモデルに文字列が入力されるようにし, ウィンドウに残っている文字列を消去します.

これでツイート感覚で茜ちゃんとお喋りできます!

import tkinter
from conversation import Conversation
from voiceroid import VoiceRoid

# インスタンス化
root = tkinter.Tk()
conversation = Conversation()
voiceroid = VoiceRoid("VOICEROID+ 琴葉茜")

# windowの設定
root.title(u"琴葉茜")
root.attributes("-topmost", True)
root.iconbitmap(default='akane.ico')
root.resizable(0, 0)
root.geometry("300x20")

# Entry
EditBox = tkinter.Entry(width=50)
EditBox.pack()

def callback(event):

    # Entryの中身が入る
    input_text = EditBox.get()
    # Entryの中身を削除
    EditBox.delete(0, tkinter.END)
    # 言葉を返す
    reply_text = conversation(input_text)
    # 言葉を話す
    voiceroid.say(reply_text)

# Enterが押された場合
root.bind('<Return>', callback)
root.mainloop()

 

 

琴葉茜ちゃんと会話してみた

可愛いですね!!!!!

これで実在性を高められました. モーションは瓜硝子が用意してくださった『長い待機モーション』を使用しています. 相槌を打ってくれる可愛い女の子を錬成したことで, 話し相手がいない孤独な時でも寂しくなくなりました!!!(実証済み)

 

 

次回予告

この記事の総括をします!

 

 

お借りした素材

f:id:jungrave3:20200403182553j:plain

LIVE2Dモデルをお借りしました. ありがとうございます!

動く茜ちゃん - 瓜硝子様