昨年末よりブラウザで会話する人工無能(AI-Bot)を作ってきたのですが、超小型マイコンボード「Raspberry Pi」に移植してみました。

Samuel L 9000 - Chromeウェブストア

ブラウザ版をChromeの拡張機能として公開しています。絶賛配信中で現在のユーザー数は9名 となっています。

この人工無能の機能を少し拡張してRaspberry Piで動かしてみます。

こんな感じ

以前と同様に基本話しかけるとサミュエル・L・ジャクソンばりに「Mother F*cker」と返事をしてくれます。

今回は登録したYouTubeを再生してくれる機能を追加しました。

OK Samuel

某著名人工知能の呼びかけに答える様を模倣して、「OK、サミュエル」を合図に画面が立ち上がるようにしてみました。

Raspberry Piはlinuxベースの独自OS(私はRaspbianを使用)で動いています。このOSにChromium(Chromeの開発者版)を入れる事が可能です。

Chromium(Chrome)には「キオスクモード」と呼ばれるブラウザのメニューバーなどを表示せずフルスクリーンで表示させる事の出来る機能があるのです。

Create a Chrome kiosk app - Chrome for Work and Education Help

デジタルサイネージ(電子看板)などで利用されるこの機能を「OK、サミュエル」を発火点として起動させてみました。

ラズパイに話しかける

音声認識はHTML5のWeb Speech Recognition API を利用します。Chromeブラウザ(除くiOS版)から利用可能です。今回はChromeBookから音声認識をさせ、読み取った言葉をRaspberry Piに送信する形にしています。

Web Speech API Specification

raspberry Piでローカルサーバーを立ち上げるのですが、これはサーバーサイドJavaScriptとして近年注目を集めるnode.js と呼ばれるJavaScript実行環境を利用しました。

ラズパイに喋らせる

MacやWindows、iOSやAndroidには標準で音声発話エンジンが搭載されていますがRaspberry Piにはありません。

GoogleをはじめとしたWeb APIを利用する方法もありますが、今回はLinuxのパッケージソフトespeak を利用しました。

eSpeak text to speech

パッケージをインストールすれば簡単にコマンドラインから合成音声を喋べらせる事が出来ます。今回はこれをJavaScriptから起動させてみました。

YouTubeストリーミングを声で操作する

これもLinuxパッケージソフトをJavaScriptから操作することで可能です。

YouTube音源のダウンロードは、

youtube-dl

で可能になります。音源のストリーミング再生は

MPlayer

をパイプ(連結)させることで実行可能になります。

※ とはいえ、正直なところ現段階ではあまり上手くいっていません。ストリーミングを音声で中断させる処理が上手くいかず、エラーがよく発生しています。何か良い方法がないか考えてはいるのですが…。

サンプルコード

音声認識の送信がエラーになったりとまだ不具合が解消出来ていないのですがサンプルとしてコードを載せておきます。

PonDad/app.js - GitHubGist

PonDad/control.ejs - GitHubGist

PonDad/samuel.ejs - GitHubGist

Node.js のインストールとパッケージマネージャーより expressejs はダウンロード済みとします。

まとめ

Raspberry Piは構造がシンプルなだけに様々な形で機能を拡張出来るところが魅力です。少しづつ機能を追加してみようかなと思っています。では。