こんにちは、エンジニアののびすけです。
人物紹介:菅原のびすけ エンジニア ガジェットを面白くハックするのが趣味 |
僕は、世間の理不尽さにイラ立っています。
いまTwitterを見ているんですけど、このつぶやきって実際は「本当のつぶやき」じゃないですよね? なのに、つぶやき、つぶやきって……
おかしくないですか??
そもそも、”つぶやき”って何でしょうか。
調べてみたところ、「小さい声でひとりごとを言うこと」のようです。
でも、俺の知っている人たち、みんな文章をつくって投稿してるんですよね。
やっぱり本当のつぶやきじゃないですよね?
というわけで、つくってみる
「本当のつぶやきをつぶやけるシステム」をつくってみようと思います。
構図はこんな感じ。
1.つぶやきを集音
2.音声をテキスト化してサーバーへ送信
3.サーバー上のNode.jsからTwitterAPIにアクセス
4.あらかじめ作成しておいたbotへツイート
という流れで構築していきます。
1.つぶやきを集音
今回の声の集音に使うのは、偶然PRをお願いされていたこの製品。
本来電話につかうものですが、声も拾ってくれるのでつぶやきを拾うには最適です。この製品はBluetoothデバイスなので、ホストとなるPC(or Android)デバイスとはBluetoothペアリングとなります。
2.音声をテキスト化してサーバーへ送信
音声認識には、HTML5の機能である「Web Speech API」を使います。
実装するにあたって、いろんな企業が開発しているAPIも調べてみたのですが、サンプルを使ってみて一番精度が高かったのが、Web Speech APIでした。HTML5の機能ということもあり、もちろん無料です。日本語の情報もそこそこ多いので”APIによる初見殺し”みたいな状況には陥らないだろうという安心感もありました。
このWeb Speech APIを使い音声をテキスト化し、その後サーバーへ送信します。
3.サーバー上のNode.jsからTwitterAPIにアクセス
今回は、もっとも個人的に慣れているNode.jsを使っています。
サーバーは、AzureじゃなくてもAWSやGCP、herokuでも問題ないですが、最近密かに注目しているAzureを使用しました。
送られてきたテキストをNode.jsで受け取り、TwitterAPIにアクセスしてツイートする処理をします。
4.あらかじめ作成しておいたbotへツイート
Twitterはディベロッパー登録することでbotなどをつくることが可能です。ディベロッパー登録後に発行可能な認証用のキーが必要ですが、数行のプログラムの記述だけで簡単にbotがつくれます。
ディベロッパー登録をしてあらかじめつぶやき専用botアカウントをつくっておきます。今回は、ひとりでブツブツと小言を言っていそうなLIGの社員・紳さんに協力を依頼するため、紳さんbotを作成しました。
ちなみに、TwitterAPIをNode.jsから扱う方法はこちらを参考にどうぞ。
これで、完成です!
実際に試してみる
早速、今回の企画に協力してもらう紳さんの元に向かいます。
人物紹介:紳さん LIGのライター。いつもひとりごとをブツブツ言っていそうな人 |
紳さんには”本当のつぶやきをつぶやけるシステムを作った”ことを説明して協力してもらいました。
装着は完了です。これでペアリングをすれば、つぶやきがツイートされます。周りの音が入らない会議室で試してもらいたいので、会議室を用意しておきました。
あとはTwitter画面を見て、紳さんのつぶやきがつぶやかれるのを待ちます。
・
・
・
「疲れた」
疲れた #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「おしるこ食べたい」
おしるこ食べたい #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「死にたい」
死にたい #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「ライジングストーム」
ライジングストーム #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「あー」
あー #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「早く死にたい」
早く死にたい #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「ちくしょう」
ちくしょう #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「疲れてる」
疲れてる #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「カニカマ」
カニカマ #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「ベッキー」
ベッキー #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
だだ漏れです。
言葉を発するとどんどんツイートされていくので、本当のつぶやきをつぶやけていますね。
外でも試してみる
さらに協力をお願いして、外でも試してもらうことにしました。
「……人多いな」
人おおいな #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「なるほど、なるほど」
なるほどなるほど #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「500円のやつで」
500円のやつで #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「ケバブおいしい」
ケバブおいしい #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
「死にたい死にたい」
死にたい死にたい #shinsan_lig
— 紳さん (@shinsan_lig) 2016年3月18日
やっぱりだだ漏れですね。
無事に、紳さんの「本当のつぶやき」が、次々とツイートされているのを確認できました。
今回、紳さんのTwitterを作成しましたが、紳さんはTwitterをやっていません。これを機にみなさんがフォローをしてくれたらTwitterを始めるかもしれませんので、ぜひフォローしてみてください。
おわりに
いかがでしたでしょうか?
みなさん、これが本当のつぶやきというやつです。
今回の企画は、リアルなつぶやきをTweetするというところが肝でしたが、これには音声認識の精度が重要になります。今までは音声認識の仕組みをつくるって言ったらかなり大掛かりなことだったのですが、Webの知識だけでこんなにカジュアルに実装できるようになっていたのは驚きです。最近はハードウェアやガジェットばかり触ってましたが、Web技術もやっぱり重要ですね。
ちなみに、今回の企画で集音マイクとして使用したのはこちらのBuffaloヘッドセット「BSHSBE34」でした。
このヘッドセットは、本来通話が主な用途ですが、今回は「本当のつぶやきをつぶやくシステム」にちょうど良さそうだったので使ってみました。
この製品は、2つのマイクが搭載されていて、そのうちの1つはノイズをひろってバックグラウンドノイズをカットしてくれるノイズキャンセリング機能がついています。そのため、音声がキレイに拾ってくれるのが最大の特長です。
今回の企画もそうでしたが、これまでハックできていなかったリアルな文化をハックするのは楽しいですね。可能性も感じます。こういう日常のふとした疑問や、気付いていない課題などを発掘していきたいです。
読者の皆さんもこんなことやってほしい、みたいな声があったら教えてください!
それでは。