/CLOVA_RasPi

Software for CLOVA HUT for RasPiZero

Primary LanguagePythonOtherNOASSERTION

CLOVA HUT for RasPi-Zero

はじめに

本ソフトウェアは 「ラズパイ化CLOVA」 の制御ソフトウェアです。 「ラズパイ化CLOVA」 とは、サービス終了により使えなくなってしまったスマートスピーカー LINE CLOVA を分解し、内部にRaspberry Piを組み込んで改造し、再利用可能にしたものです。 下記の画像の様に改造したものです。

改造の概略

この改造により、メインのコンピュータが置き換えられたため、制御ソフトウェアの入れ替えも必要になります。本制御ソフトウェアは、それに対応したものです。 ラズパイ ZeroW / Zero2W 上で動作し、Python言語で開発されています。

LINE CLOVAを愛用していたけれども、使えなくてがっかりしている方は、ぜひ一度試してみてください。

ただし、この改造品は個人レベルで開発されたものであり、元々の製品が持つ機能や品質を保証するものではありません。また、まだまだ開発段階(αテスト版)であり、不備やバグが存在する可能性があります。ご了承ください。 機能追加やバグレポートなどの貢献は大歓迎です。forkして追加した部分のpullリクエストなども、できるだけ早く対応できるように努めます。 宜しくお願いいたします。

動作環境(ハードウェア)

なお、「ラズパイ化CLOVA」は、自分で改造して用意する必要があります。 但し、改造方法については詳しく記載した記事が別サイトにありますので、概要紹介程度に留めます。詳しくはそちらのサイトを参照ください。

必要な機材

  • LINE CLOVA friend ( 1 mini ではない動体の長い方です。)
  • CLOVA HUT for RasPi 2
  • Raspberry Pi Zero W / Zero2 W 3
  • Micro SD(ラズパイOSイメージやプログラムデータを入れるメディア)

改造方法は、上級者版と簡単版の2つの方法があります。

上級者版

上級者版は、以下の写真のように、ハードウェアに直接半田付けしてコードを配線する必要があります。そのため、難易度は高くなります。

上級者版写真

上級者版の改造方法の詳細については、以下のサイトを参照してください。

ラズパイ化CLOVA-パート1(ガチの改造編)

簡単版

簡単版は、上級者版の難易度が高い部分をできるだけ簡略化するために、専用の改造基板を開発しました。この基板を以下の写真のように交換するだけで改造を行うことができます。

簡単版写真

簡単版の改造方法の詳細については、以下のサイトを参照してください。

ラズパイ化CLOVA-パート2(専用基板編)

使用方法(ソフトウェア導入手順)

前章の「動作環境(ハードウェア)」の各リンクにて、サービス関連の準備が完了している前提で記載しています(基本的にGitHubにアップロードされている部分の使用方法に限定します)。

まず、ラズパイにSSHでログインし、コマンドラインのプロンプトが表示されている状態から始めます。

導入手順

1. ソフトウェアのダウンロード(クローン)

以下のコマンドを使用してGitHubからソフトウェアをクローンします。

cd ~/;git clone https://github.com/TakSan0/CLOVA_RasPi

2. 設定ファイルのコピー

以下のコマンドを使用して、GitHubからクローンした設定関連のファイルをホームディレクトリにコピーします。 cp ~/CLOVA_RasPi/.CLOVA_RasPi.* ~/

3. キー設定ファイルの編集

キー設定ファイルを編集します。このファイルは、個人で取得した各APIを使用するための暗号化されたキーを含んでいます。他人に漏洩してしまうと、無断利用による高額な課金のリスクがありますので、取り扱いには注意が必要です。

以下のコマンドを使用して、GitHubからクローンしてコピーしたキー設定ファイルを編集します。

nano ~/.CLOVA_RasPi.keys

上記のコマンドを実行すると、キー設定ファイルがエディタで開かれます。ファイル内部は次のような形式になっていると思います。各項目の=の右側に、自分用のキーを追加してください。なお、=の右側にはタブやスペースなどの余計な文字を入れないでください。

GOOGLE_APPLICATION_CREDENTIALS=
OPENAI_API_KEY=
VOICE_TEXT_API_KEY=
WEB_VOICEVOX_API_KEY=
AITALK_USER=
AITALK_PASSWORD=
LINE_CH_ACC_TOKEN=

以下の表に示すように、各項目の説明に従って自分用のキーを入力してください。キーは1文字でも間違えると正常に動作しないため、注意して入力してください。キーは暗号化された英数字の羅列であり、手動で入力するとミスが発生する可能性が高いため、コピー&ペーストが推奨されます。

キー名 概要 用途
GOOGLE_APPLICATION_CREDENTIALS Googleクラウドのサービスアカウントキーのファイルパス 音声認識(STT)/音声合成(TTS)に使用します。<必須>
OPENAI_API_KEY OpenAIのAPIキー AIによる応答を作る為にChat-GPTのAPIにアクセスするのに使用します。 <必須>
VOICE_TEXT_API_KEY Web版VoiceTextのキー 音声合成(TTS) 設定しているとより多くのキャラクタ(声色)を選択できます。<オプション>
WEB_VOICEVOX_API_KEY= WEB版VOICEVOX APIのAPIキー 音声合成(TTS) 設定しているとより多くのキャラクタ(声色)を選択できます。<オプション>
AITALK_USER= AITalk Iのユーザー名 音声合成(TTS) 設定しているとより多くのキャラクタ(声色)を選択できます。<オプション>
AITALK_PASSWORD= AITalk Iのユーザー名 音声合成(TTS) 設定しているとより多くのキャラクタ(声色)を選択できます。<オプション>
LINE_CH_ACC_TOKEN LINEチャンネルアクセストークン LINE MessagingAPIを使って LINEメッセージ送信をする時に使用します。<オプション>

<オプション>の項目を設定しない場合は空白にしてください。(その機能が動作しなくなります。)

キー設定ファイルの編集が完了したら、[Ctrl] + [o] の後 [Enter] で書き込み、[Ctrl] + [x] でエディタを抜けます。(nanoエディタの使い方は、必要な方はググってください。)

4. pyaudio の入出力設定

以下のコマンドを実行して、入出力のデバイスインデックス値を確認します。

python ~/CLOVA_RasPi/CLOVA_test.py get_indecies

デバイスインデックスとは、pyaudioの中の設定パラメータ番号のようなもので、何度かやった限りでは Index=11 になるようですが、環境によっては異なる場合もあります。以下のように出力されます。

入力(MIC)デバイスインデックス = 11
出力(SPEAKER)デバイスインデックス = 11

次に、SSHでつなぎに行っているラズパイのIPアドレスの8000番ポートを、ラズパイをSSH操作しているPC等からブラウザで開きます。 例えば、ラズパイのLAN内IPアドレスが "192.168.9.50" であれば、以下のようにブラウザのアドレス欄に入力して開きます。

http;//192.168.9.50:8000

すると、以下の「CLOVAラズパイ設定」画面が開きます。

CLOVAラズパイ設定画面

11以外の表示になる場合は、MicIndex:とSpeakerIndex:を変更し、[書き込み]ボタンを押して保存してください。"2. 設定ファイルのコピー"でコピーした.CLOVA_RasPi.cfgというファイル内に記録されます。 11の場合はそのまま次のステップまで飛ばしてください。

5. ハードウェアテスト

以下のコマンドを実行して、テストを実施してみます。

python ~/CLOVA_RasPi/CLOVA_test.py hw_test

コマンドを実行してしばらくすると、ハードウェアテストモードになります。本体下部のLEDが暗い緑色になったら準備完了です。 マイクに向かって話しかけてみると、その音声がエコーされます。また、各キーを押すと、

[*] switch is ON

と表示され、スイッチを離すと

[*] switch OFF *の部分に押されたスイッチの名称)のように表示されれば、そのスイッチは問題なく接続できています。

ハードウェアの説明箇所での導入「5-4-3-3. 電源(シャットダウン)ボタン」の所で底面スイッチをシャットダウンに割り当てているため、そのスイッチは最後まで押さないでください。押すとシャットダウンが実行されます。

また、 [Bluetooth] スイッチを押すと赤色 LED が点灯、 [+] スイッチを押すと緑色 LED が点灯、 [-] スイッチを押すと青色 LED が点灯、 するのが確認出来たら、LED の接続も問題なく接続できています。 なお、RGB LED なので、同時に押すと合成した色になります。

最後に、底面スイッチを押して同じように画面に [*] switch is ON が表示されれば、ハードはすべて問題無く動いていることになります。

使い方

CLOVA Raspberry Piは、実装されているスキルのソフトウェア制御とAIによる自動応答のハイブリッド形式で動作します。最新情報や時間に関連する情報など、学習型AI(Chat-GPTなど)が答えられない質問については、スキルに頼ることができます。したがって、実装されているスキルに該当しない場合は、AIによる自動応答が実行されます。 現時点では完全ではなく、スキルの呼び出しに関する認識やトリガーワードの不備により、スキルがうまく呼び出されない場合はAIが応答する可能性があります。この点については、今後改善していく予定です。 実装に協力してくれる方大歓迎です。

起動方法

CLOVA Raspberry Piを起動するには、現在は自動起動がうまく機能しないため、SSHで接続したプロンプトからコマンドを入力して起動する必要があります。 (自動起動がうまく機能しない原因は現在調査中です。)

以下のコマンドを入力して起動します。

python ~/CLOVA_RasPi/CLOVA_RasPi.py

正常に起動すると、「キャラクターXXさんが選択されました」という音声とともに、底面のLEDが暗緑色に点灯します。もし起動しない場合は、底面のLEDが赤色になるか消灯しているかを確認してください。一般的には設定の問題が原因と考えられますので、表示されているログに従って対処してください。 (トラブルシューティングガイドとして詳細な対処方法をまとめる予定です。)

スイッチ操作

スイッチ名 概要 説明
前面(口部分) - 現状未割当
[MUTE] 起動・終了 現状未対応
[Bluetooth] キャラクタ切り替え 押すと別のキャラクタ(話し相手)が選択されます。声のトーンやAIの応答の性格が微妙に変わるようになっています。
[+] ボリュームアップ ボリュームを1ステップ上げます
[-] ボリュームダウン ボリュームを1ステップ下げます
(底面) シャットダウン システムをシャットダウンします。後ろのLEDが赤色で常時点灯しているか消灯したら、シャットダウンが完了しているため、USB電源ケーブルを抜くことができます。

発話による操作

実装されているスキルは以下の通りです。

  • タイマーの設定
  • 日時
  • ニュース
  • 天気
  • LINE送受信

以下でスキルごとに説明します。

タイマーの設定

例)「1分30秒後にタイマーをセットして」

と指示すると、1分30秒後に通知されます。通知は停止するまで続きますので、「わかりました」と言って通知を停止してください。

日時

例)「今日何日?」 例)「今何時?」 と指示すると、現在の日付や時間を教えてくれます。

ニュース

例)「国際ニュースを教えてください」

と指示すると、Yahooのトピックスから10項目のニュースを読み上げます。詳細を知りたいニュースの番号を選んで、「〇番」と指示してください

詳細番号待ち状態から抜けるには、「ニュース終わり」と言って解除し、通常の待機状態に戻ります。

指定可能なニュース種別は以下の通りです。

  • トップ
  • 国内
  • 国際
  • ビジネス
  • エンタメ
  • スポーツ
  • 科学
  • 地域
  • コンピュータ
  • インターネット
  • 社会
天気

例)あさっての東京の天気を教えて? と指示すると、天気予報を教えてくれます。

指定可能な日は、今日/明日/あさってです。 指定可能な地域は、天気予報ソースファイル "CLOVA_weather.py" の 13行目以降を参考に、住んでいる地域に該当する元を選んでください。

LINE送受信

例)「クローバに おはようございます ってLINE送って。」

LINE DEVELOPERサイトに、LINE Messaging APIを使うためのチャンネルを作成する必要があり、手順が少し複雑です。 手順の作成中ですので、もう少々お待ちください。

ソフトウェア実装説明

ソフトウェア実装の説明はまだ作成していません。申し訳ありませんがしばらくお待ちください。

今後実装したい機能

  • [MUTE] キーによる、プログラムの起動/終了。終了でプロンプトに戻る等。
  • 毎日や曜日指定の目覚まし機能
  • AWS / Azure / Watson 等の 音声認識・音声合成に対応
  • 音楽(ラジオまたは配信、ローカルストレージ内)再生
  • 底面イルミネーションLEDをもっと派手に光らせたい。アニメーション等。
  • ボリューム変更時にLEDを光らせる。
  • ボリューム変更時連続して行うと、その分の発話がたまってしまう。
  • Bard対応 (APIが公開されたら)
  • Open AI Wisper にも対応したい。
  • OpenAI の会話は、過去数個分のやり取りを覚えるようにしたい
  • 外部機器のリモコン制御。(外にリモコン信号送信デバイスを設け、bluetooth経由でデータを送るようにしてみたい。M5-Echoとか使えるか?)
  • 英会話機能
  • 多言語化

他にもリクエストあればコメントまたは"#ラズパイ化CLOVA" でTweet してください。

現状見つかっている問題点

  • マイクとスピーカーが切り替わるたびにブツ音が鳴る。
  • スキルはよく誤解をして AIが答えてしまう。
  • 自動起動で実行すると音声を認識できないため使えない。
  • 例外処理に弱い(ネットワークエラー等でプログラムが終了してしまう箇所が数か所ある)
  • 底面LEDを付けた時に電源レギュレータ付近から鳴き音がなる個体がある。

Footnotes

  1. 別途開発中です。

  2. 改造様に開発された基板です。

  3. 別途購入する必要があります。Zero / Zero2 いずれでも可能です。