deviceplus 電子工作マニュアル - rohm co., ltd. · 2 はじめに 第1章...

18
DevicePlus 電子工作マニュアル ~Raspberry Piを活用してみよう(中級編)~ 1日でできる!ラズベリーパイでお手軽デジタルサイネージ端末 声で家電を操作する!?ラズベリーパイでスマートハウス化計画 Vol. 04 http://deviceplus.jp/

Upload: trinhthuan

Post on 27-May-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

DevicePlus 電子工作マニュアル~Raspberry Piを活用してみよう(中級編)~

1日でできる!ラズベリーパイでお手軽デジタルサイネージ端末声で家電を操作する!?ラズベリーパイでスマートハウス化計画

Vol.04

http://deviceplus.jp/

はじめに………………………………………………………………………………………………… 2

第 1章 1日でできる!ラズベリーパイでお手軽デジタルサイネージ端末… ………………… 2 1.1 作るもの・必要なもの 1.2…ラズベリーパイの準備 1.3…TFT モニターを利用するための準備 1.4…Apache/PHP の準備 1.5…Chromiumの準備 1.6…応用編〜実際に PHPでアプリを作成してみる 1.7…まとめ

第 2章 声で家電を操作する!?ラズベリーパイでスマートハウス化計画… ……………… 10 2.1…はじめに 2.2…USB マイクの設定 2.3…Julius の準備 2.4…アプリへの応用 2.5…まとめ

●…所要時間:120分  ●…レベル:★★☆☆☆●…部材費用:約 16,000 円

●…所要時間:90分  ●…レベル:★★★☆☆●…部材費用:約 16,000 円

も く じ

当電子工作マニュアルは、以下の内容で構成しております。1日でできる!ラズベリーパイでお手軽デジタルサイネージ端末~タッチパネルモジュールを利用した RaspberryPi のデバイス制作~

声で家電を操作する!?ラズベリーパイでスマートハウス化計画~音声認識エンジン Julius で操作する RaspberryPi ~

2

は じ め に

第 1 章 1日でできる!ラズベリーパイでお手軽デジタルサイネージ端末

~タッチパネルモジュールを利用した RaspberryPi のデバイス制作~

2015 年 2 月 1 日に Raspberry…Pi…2…Model…B+が発売、2月 3 日にはMicrosoft からは次期OSのWindows10 がラズベリーパイ 2向けに無償提供されることが発表され、ますますラズベリーパイの活躍の場が広がりそうです。Arduino やmbed などをはじめとして、通称「ワンボードマイコン」と呼ばれるなかで、ラズベリーパイを、開発を行うメリットは、Raspbian というLinux ベースのOSで開発ができることが上げられます。オープンソースとして、歴史を積み上げてきた Linux のモジュールやライブラリなどの資産を利用するなど、ビジネス分野でも活用できる点があげられます。Arduino やmbed などは、開発環境として PCにつなぎプログラムを書き込む必要がありますが、ラズベリーパイであればディスプレイ・キーボード・マウスを本体につなげば、そのまますぐ開発ができることも大きなメリットです。

最近、街中を歩いているとたくさんのディスプレイを見るようになりました。地下鉄のコンコースの柱に整然と並ぶ広告を掲載するディスプレイ、デパートなどの案内板としてタッチパネル式のディスプレイなど、ここ数年でこれまでの電飾、ポスターなどに変わり、「デジタルサイネージ」の波が押し寄せているのを感じますね。「デジタルサイネージ」と

書くとなんだか難しそうなシステムで動いている感じがするなぁ、と思われるかもしれませんが、デジタルサイネージ=電子看板と訳されるように、広告や案内などの機能を持つディスプレイを含むシステムは、何でもデジタルサイネージと言えます。今回は、このデジタルサイネージ端末をラズベリーパイで作ってみたいと思います。

Raspberry…Pi…2…Model…B+ は従来モデルの B+と比べて、CPU が Cortex…A7 の 4 コアになり、6倍の高速化、メモリも 512MBから 1GBに倍増しました。その中でも特に注目すべき点は、ビデオ性能が 20 倍以上も高速化された点です。これまでのラズベリーパイでは、Raspbian をWindowsやMac などのようにマウスで操作するGUI(グラフィックユーザーインタフェース)で動作させた場合、処理の重さが問題でしたが、この点も大きく改善されています。

本マニュアルでは、実際にビジネス分野で応用可能な、TFT タッチディスプレイを利用した例と、音声認識によるラズベリーパイの操作を基本的な要点に絞って紹介しています。応用次第でさまざまなシーンで活用することが可能ですので、ぜひ挑戦してください。

写真 1.1 必要な部品

※…参考価格は 2015年 3月現在

表1.1 使用する部品一覧品名 型名・仕様 数量 参考価格(税抜)

Raspberry…Pi…Model…B+ Model…B+ 2 3,847 円Raspberry…Pi 用 2.8 インチ TF Tモニター

特別セットRaspberry…Pi 用 2.8 インチ TF Tモニター

特別セット 1 4,600 円

ブレッドボード EIC-301 1 190 円トランジスタ 2SC1740S-R 1 100 円

ジャンパワイヤ(オス - オス) 6… 180 円ジャンパワイヤ(メス - メス) 4 180円

電気スタンド 1 1,000 円

3

1.1 作るもの・必要なもの

ラズベリーパイに、タッチパネル式の液晶ディスプレイを接続して、オリジナルのデジタルサイネージ端末を作成します。また、Apache と PHP などのプログラムとブラウザを利用し、比較的簡単なプログラミングで、ホームコントローラーなどの応用例を紹介します。

必要なもの主に利用する部品は、ラズベリーパイと、タッチパネルモニターになります。ラズベリーパイ用の小型モニターはいろいろな種類が発売されていますが、おおむね、どの小型ディスプレイも 1万円を下回る価格で、タッチパネル機能があり、購入しやすい価格で手に入れられるのは嬉しいですね。

本稿では、テックシェア株式会社より販売している「Raspberry…Pi 用 2.8 インチ…TFT モニター特別セット」を使用しています。こちらの商品には、解説書の代わりに、組み立て方やインストール方法の解説があるWebサイトにアクセスできるカードが入っています。

Raspberry Pi 用 2.8 インチTFT モニター特別セット 商品詳細ページhttp://store.techshare.jp/shopdetail/000000000778/Adafruit/page1/recommend/※一部のページはユーザー登録が必要となります。

また、メーカーである「Adafruit」の公式サイトにも記載されています。

Adafruit 公式サイト(英語)https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/overview

【注意】一度TFTモニターの設定をおこなうと、元に戻すことが困難になりますので、SDカードのバックアップを取ってから作業を行うことをおすすめします。

1.2 ラズベリーパイの準備

今回、利用するディスプレイを使うためにラズベリーパイのOSは「Raspbian」を使用します。Adafruit の公式サイトに、専用のイメージファイルが用意されています。TFTモニターを使用するために必要なソフトはすでに組み込まれていますので、電源を入れるだけですぐにTFTモニターを使用できます。ものすごく手軽にできちゃいますね。

Easy Install | Adafruit PiTFT - 2.8" Touchscreen Display for Raspberry Pi | Adafruit Learning Systemhttps://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/easy-install

図 1.1 必要なOSイメージ

写真 1.2 TFT モニターの取り付け

4

今回は「Raspberry…Pi…Model…B+」を使用しますので、「An…image…buit…on…Raspbian…June…20,…2014.…B+…compatible」というリンクから、Model…B+ 対応版のイメージファイルをダウンロードしましょう。ダウンロードした zip ファイルを解凍し、イメージファイルをmicroSDカードに書き込みます。Windows であれば「Win32…Disk…Imager」が便利です。

Win32 Disk Imagerhttp://sourceforge.jp/projects/sfnet_win32diskimager/

公式サイトのイメージファイルを使用しない場合の導入手順については、「DIY…Installer…script」の項、または「Detailed…Installation」のページを参考にしてください。

【注意】Raspbian のバージョンによって対応していない可能性がありますので、メーカー配布のイメージファイルを使用することをおすすめします。

DIY Installer scripthttps://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/easy-install#diy-installer-script

Detailed Installationhttps://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/software-installation

1.3 TFT モニターを利用するための準備

TFT モニターについてラズベリーパイ対応の 3インチ前後の小型の TFTモニターは数社から販売されています。解像度は240px × 320px 〜 320px × 480px などといった、少し小さめの解像度のものがほとんどです。基本的にこのモニターで文字をたくさん読ませる

というより、ボタンなどを表示してタッチパネルで触れて操作する使い方が一番適していると思います。

ちなみに、このタッチパネルモニターとラズベリーパイを利用して、自作のスマートフォンを制作している猛者も世の中にはいます(気になる人は「ラズベリーパイ スマートフォン」とか「PiPhone」というキーワードで検索してみましょう!)。スマートフォンを自作された方いわく、部品代をすべて計算すると市販されている低価格スマートフォンより高くなってしまったというオチだった、とのこと。それでも、実際に日常生活で私たちが使っているデバイスを、プログラムを書き、回路を設計して「自分の手で作りあげる」ことができるのは、本当にアイデア次第で何でもできてしまうラズベリーパイの凄いところですね。

TFT モニターを取り付ける

本稿では、テックシェア株式会社より販売している「Raspberry…Pi 用 2.8 インチ…TFT モニター特別セット」を使用します。このセットでは、必要な部品は既にはんだ付けされているので、TFTモニターをラズベリーパイのGPIOポートに差し込むだけです。(写真 1.2)のようにGPIOポートの端(ピン番号1番・2番)から、ラズベリーパイ本体を上から覆うように差し込みます。取り付けは、USBポートの高さを考慮しながら、水平になるように設置しましょう。

TFT モニターを起動するAdafruit 公式のイメージファイルを使用した場合は、電源を入れると、自動的にTFTモニターがディスプレイとして認識されます。Raspbianが起動するまでは白く光ったままの状態が続きますが、少し待つと黒背景のコンソール画面に切り替わります。

写真 1.3 TFT に画面が表示された様子

写真 1.4タッチパネルの調整のためのキャリブレーション画面

写真 1.5 デスクトップ画面表示例

写真 1.6 画面がとても小さい…

5

初期起動時は、Raspbian のデフォルトユーザー(ユーザー名「pi」、パスワード「raspberry」)でログインできます。通常通り、「startx」コマンドでOSを起動しましょう。

正常に起動すると、デスクトップが表示される前に、(写真 1.4)のようなあまり見慣れない画面が表示されます。真ん中のローディングアニメーションが動いて、そのままにしていると、画面が消えて通常の Raspbian が表示されますね。この画面は、「タッチスクリーン・キャリブレーション」設定を行うための画面です。ディスプレイの上に、敷かれているタッチセンサと、ディスプレイの表示位置にずれがないように調整することを指します。私たちが使っている iPad や Androidのタッチパネルは、このキャリブレーションが実施された状態で出荷されますが、自作の部品を利用する場合、キャリブレーション操作が必要になります。(写真 1.4)では、左上に赤色の十字マークが表示されますので、左上から順番に触れて、四隅の位置を認識させます。タッチせずに放置しておいてもデスクトップ画面は表示されますが、タッチの位置が正確に認識されない場合がありますので、この操作は必ず行ってください。もし、設定しないまま通常のOS設定画面に進んだ場合は、再起動してタッチスクリーン・キャリブレーションを行ってください。

キャリブレーションが終わると、デスクトップ画面が表示されます。マウスカーソルはタッチ操作で動く状態になっていますので、指でなぞってテストしてみましょう。しっかり指でなぞったところにマウスカーソルがついてこればタッチパネルの準備は完了です!

タッチパネルの準備ができたらいよいよソフトウェアの準備に取り掛かりましょう!

1.4. Apache/PHP の準備

ソフトウェアは、Apache/PHP を利用してプログラムを作成します。さっそくApache や PHP パッケージのインストールを進めたいところなのですが、ここで一つ大きな問題に気づきました。

そうです、画面が小さいのです。筆者のラズベリーパイ開発環境は、HDMI ケーブルを通じて 24インチディスプレイで、作業しているので、快適なラズベリーパイ生活を送っています。しかし、この TFTモニターは、解像度が320px × 240px しかないのです。それはもう画面が小さくて小さくて…(写真 1.5)のように、デスクトップにあるアイコンも全部見えないくらい小さいです(笑)。この小さい TFTモニターで動く姿を見ていると、この画面でプログラムをしている姿がなんともギーク感満載でかっこいい、と思ったのですが、

図 1.2 Apache へ接続してウェブ画面の表示

6

そんな夢も開始5分、いや、3分でなくなりました。このままだと開発が一向に進む気がしないので、TFTモニターをつないだままで、快適に作業できる方法を 3つあげますので、みなさんの環境にあった形で設定してください。

パッケージのインストール・設定について1.HDMI 接続のディスプレイを使用ラズベリーパイとディスプレイをHDMI 接続してから起動し、ログイン後に下記のコマンドを実行します。

FRAMEBUFFER=/dev/fb0…startx

TFT モニターの表示が消え、ディスプレイにタッチパネル用のキャリブレーション画面が表示されるので、マウスクリックで位置を指定します。その後、デスクトップ画面が表示されます。なお、HDMI ディスプレイ表示の設定は次回起動時も有効になってしまうため、TFTモニター表示に切り替えるには、下記のコマンドを実行してください。

FRAMEBUFFER=/dev/fb1…startx

この方法は、Adafruit 公式サイトの FAQで紹介されています。

https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/faq

2.SSH 接続によるリモート操作「Tera…Term」などのソフトを使用して、SSH接続でコマンド操作をおこないます。デスクトップ画面は表示できませんが、初期設定はパッケージのインストールが主な作業なので、問題なく進められます。

3. リモートデスクトップ接続による操作Raspberry…Pi に「xrdp」パッケージをインストールしておくと、リモートデスクトップ接続による操作が可能です。HDMI 接続したディスプレイに表示した状態と同じ高解像度の画面が表示されます。SSH接続とは違い、デスクトップ画面で操作できるのでとても便利です。下記のインストールコマンドを、LX…Terminal から実行します。

sudo…apt-get…install…xrdp

Raspbian にログインすると、デスクトップ画面が表示されます。HDMI ディスプレイ使用時と同様

に、TFTモニター表示にもどすときには、ログイン後に下記コマンドを実行します。

FRAMEBUFFER=/dev/fb1…startx

これで、TFTモニターにつないだままでも快適な作業環境ができましたので、作業を進めていきます。

Apache・PHP・Chromium のインストール・設定LX…Terminal から、Apache と…php のパッケージのインストールコマンドを実行します。

sudo…apt-get…updatesudo…apt-get…upgradesudo…apt-get…install…apache2…php5…chromium

メニュー一覧の「internet」から「Chromiun…Web…Browser」を選択します。「…http://localhost/…」に接続できればパッケージの準備は完了です。初期画面はこのようになります。

【注意】Chromiumは、root ユーザーでは実行できない仕様となっています。

1.5. Chromium の準備

簡単デジタルサイネージを実現させるために、なんといっても欠かせないのがこのChromium( クロミウム )です。Chromiumは、オープンソースのウェブブラウザのプロジェクト名で、Google…ChromeもこのChromiumのソースコードを使って開発されたブラウザです。このChromiumは、起動時のオプションとして全画面で表示ができるKiosk( キオスク )モードが存在します。これを使うことで、手軽にデジタルサイネージが実現できるのです。

図 1.3 システム構成

7

Kiosk モードとは?Kiosk モードは、ユーザーの閲覧・操作を制限することで、PCであることを感じさせず、専用端末のように使うモードのことです。使用例として、飲食店のメニュー一覧と注文機能を兼ね備えたタブレット端末や、ショッピングモールなどに設置されているタッチパネルの館内案内端末などが挙げられます。

Kiosk モードの起動・終了設定Kiosk モードを使用するには、コマンドラインからChromiumを起動する際に、「--kiosk」オプションを付加します。たとえば、ローカルホストのトップページを呼び出す場合は以下のようになります。

chromium…--kiosk…http://localhost/

デスクトップ画面で表示する場合は、一度Chromiumを終了させてから実行してください。既存のウインドウがある場合は、Kiosk モードが適用されない場合がありますので注意しましょう。

Kiosk モードを終了するには、キーボードから[Ctrl]+[F4]キーを入力します。この操作は、リモートデスクトップで接続している場合でも有効です。ロード途中でChromiumを終了してしまった場合など、前回のキャッシュが残った状態で起動すると、エラーが表示されることがあります。プログラムからChromiumを起動する場合は、起動前にキャッシュを削除しておくと良いでしょう。

rm…-f…./catch/chromium

Chromiumのキャッシュデータは、ユーザーフォルダ直下の「.catch」フォルダ内にあります。隠しフォルダのため、デフォルトでは表示されていませんが、右クリックメニューの中から「Show…Hidden」をオンにすると、ファイルを直接確認できます。

1.6. 応用編~実際に PHP でアプリを作成してみる

一通りデジタルサイネージを構成する準備ができたところで、実際に表示するコンテンツを考えていきます。せっかくタッチパネル機能がついているので、今回は、部屋の壁などに設置して、照明をオン・オフできるようなホームコントローラーを作ってみたいと思います。ちなみに、タッチパネル機能を使わないで、街中でよく見かけるデジタルサイネージのような使い方をしたいのであれば、Kiosk モードで全画面表示するコンテンツに JavaScript や、Adobe…Flash…Player( デジタルサイネージのコンテンツでは、まだまだ Flash…Player 使われています )や、動画などが流れるようにするだけで、すぐ利用ができます。

ホームコントローラー ~照明のオン・オフ今回は、作例として、TFTモニターからのタッチ操作によって、デスクライトの電源のオン・オフを切り替えるアプリを作成しました。このアプリでは、2つのラズベリーパイ端末を使用します。1つは TFTモニターの制御用、もう 1つはデスクライトのスイッチの制御用です。全体的なシステム構成は(図 1.3)のようになります。

入力側となる(図 1.3)のラズベリーパイAでTFTモニターでオン・オフができるようなHTML画面(PHP)を作成します。そして、TFTモニターにタッチした時にApache…/…PHP を通じて、ラズベリーパイ B側のApache…/…PHP にアクセスを行います。ラズベリーパイ B側では、PHPを通じてwiringPi で GPIOを制御して電子回路を通じて電気スタンドをオン・オフします。

図 1.4 電気スタンド制御回路※ LEDが電気スタンドの代わりになります。

写真 1.7 スイッチのオン・オフ画面

写真 1.8 ラズベリーパイと回路をつなぐ

8

TFT モニターのメニュー画面/var/www/light.php<?phpif(isset($_GET['on'])){………$on…=…$_GET['on'];………if($on=="0"…||…$on=="1"){……… …@fi…le_get_contents("http://192.168.0.50/light/?on=".$on);………}}?><html><head><meta…name="viewport"…content="width=device-width"></head><body><form>………<button…type="button"…onclick="location.href='./light.php?on=1'">ON</button>………<button…type="button"…onclick="location.href='./light.php?on=0'">OFF</button></form></body></html>

/home/pi/light.sh#!/bin/bashrm…-rf….cache/chromiumchromium…--kiosk…http://localhost/light.phpexit…0

ブラウザに表示するフロント画面は PHP、それを呼び出す処理はシェルスクリプトで作成しました。「ON」・「OFF」ボタンをタップすると、照明のオン・オフを制御するプログラムが呼び出される仕組みです。

LX…Terminal より「light.sh」を実行すると、画面いっぱいにChromiumブラウザ画面が表示されま

す。Kioskモードのため操作が制限され、ONボタン・OFFボタンのタップしかできない状態になります。終了するには、キーボードから [Ctrl]+[F4] キーを入力してください。

照明の制御送信側の端末準備ができたら、次に受信側である電気スタンドの制御を行います。せっかくなので、こちらもラズベリーパイを利用して電気スタンドのオン・オフを制御してみます。DevicePlus「IT 女子のラズベリーパイ入門奮闘記」の連載で以前、取り上げたように実装することはとても簡単で、いわゆる「Lチカ」です。GPIOピンの出力をオン・オフするだけとなります。スイッチのオン・オフはトランジスタのスイッチ回路を利用しています。スイッチ回路の詳しい説明はDevicePlus「はじめての電子工作超マニュアル 第11回…Arduino でモーターを制御する!(その1)モーターの基本を勉強してみる。」(http://deviceplus.jp/hobby/entry011/)に詳細をまとめています。Arduino とラズベリーパイの違いはありますが、仕組みとしては同じですので、記事を参考にしてください。…

写真 1.9 バルサ板を使って自作ケースを作成

写真 1.10 自作ケースにラズベリーパイを格納!

9

両方とも準備ができたので、さっそくタッチパネルを触って電気スタンドがオン・オフできるかどうか試してみます。

参考動画http://youtu.be/t9-NSlgCZvM

1.7. まとめ

今回 TFTモニターをコントローラーとして、比較的簡単な回路やプログラミングでホームコントローラーを作成しました。TFTモニターに表示される PHPのデザインやプログラム改良し、受信側も電気スタンド以外の機器やプログラムを操作するように改変するなど、工夫次第で可能性が無限大に広がると思います。

(写真 1.9)のようにホームセンターなどで市販されているバルサ板などを使ってケースを自作しました。また、3DプリンターやCNCフライス盤を用いることで本格的なケースの作成も可能です。ソフトウェア、ハードウェアどちらも改良する楽しみがあると思いますので、自分なりのデジタルサイネージシステムを挑戦してください。

写真 2.1 iPhoneの Siri(左)とAndroid(右)の音声認識

10

第1章ではTFTタッチパネルを利用してホームコントローラーを紹介しました。タッチパネル操作ができると、ラズベリーパイにはマウスやキーボードを接続しなくても、操作が可能になりホームコントローラーとして役に立ちそうですね。でも、ちょっと考えてみると、部屋の壁にホームコントローラーがあって、タッチパネルで操作する…あれ、これって別にスイッチのオン・オフ一つくらいの機能だけだったら、最初から部屋についているパチパチ切り替えるスイッチでいいのでは!?もっと、ラズベリーパイを使って部屋中の家電を自由自在に扱うことができる、夢のスマートハウスを目指すためには、やはり何かに「触って操作する」という旧世代のインタフェースを捨ててみましょう。近未来映画のように「声」で操作することに挑戦してみたいと思います。

今回は、ラズベリーパイと一緒に音声認識エンジンJulius(ユリウス )を利用して、音声でラズベリーパイを操作する方法を紹介します。第 1章で紹介したデジタルサイネージ端末用のラズベリーパイに実装することで、タッチパネルでも、音声でもどちらでも操作できるホームコントローラーを応用例として紹介します。

2.1. はじめに

「声」で操作、そんなことができるのでしょうか?最近の技術の発展の恩恵を受けて iPhone やAndroid など、スマートフォンの普及で皆さんも、一度は、音声認識機能を利用したことがあるかと思います。スマートフォンの音声認識は、音声信号をAppleやGoogleなどのサーバー上に送信し、

サーバー側で認識処理を行い、音声に応じた結果を返すような仕組みになっています。話した単語はサーバーの向こう側でスーパーコンピューターが処理して結果をすぐ返してくれる仕組みです。例えば、周りのみんなが知らないような新しいアーティストの名前もばっちり認識してくれますね。

音声認識処理を行うことができるライブラリは、これまで有償無償問わずいくつか存在しています。今回は、国内の大学や研究機関が、主となって開発を行っているオープンソースの高性能な音声認識を可能とする「Julius(ユリウス)」…(http://julius.sourceforge.jp/) を、ラズベリーパイで利用します。合言葉でラズベリーパイを操作する方法を紹介します。

第 2 章 声で家電を操作する!?ラズベリーパイでスマートハウス化計画

~音声認識エンジン Julius で操作する RaspberryPi ~

図 2.1 Julius のウェブサイト

写真 2.2 必要な部品

図 2.3 システムの流れ

品名 型名・仕様 数量 参 考 価 格(税抜)

R a s p b e r r y … P i…Model…B Model…B 1 3,847 円

USBマイクSANWA… SUPPLY…MM -MCUS B 1 6…USB マイクロホン

1 1,800 円

表 2.1 使用する部品一覧

※…参考価格は、2015年 3月現在※…電気スタンド側は、第1章「ラズベリーパイを使ってタッチパネルKiosk端末を作ろう」の内容を参照してください。

※…Raspberry…Pi はシリーズ Bであれば B+、2でも大丈夫です(ライブラリのパスなど、一部変更しなければいけない点がある場合があります)。

※…マイクはUSB形式で Raspberry…Pi で利用できるマイクであれば特にメーカーの指定はありません。

図 2.2 システム構成

11

【注意】今回ご紹介する内容では、家電の操作や制御は、コンセントから供給される大きな電力を扱うものとなります。実際に試したり応用したり場合は、自己の責任もと、十分気をつけたうえで、製作を楽しんでください。

作るもの・必要なもの システム全体の構成今回作成するシステム全体の構成は、(図 2.2)のようになります。マイクから入力した音声を、ラズベリーパイA上で動いている Julius で音声認識処理を行い、登録されている音声の辞書と合致した場合に、プログラムを起動します。プログラムの例として、第 1章のホームコントローラーでも利用した電気スタンドのオン・オフを行うプログラムを起動して、音声で電気スタンドのオン・オフを制御に挑戦しましょう。…また、システムの大まかな流れは(図 2.3)のようになります。

写真 2.3 ラズベリーパイにUSBマイクを取り付け

写真 2.4 USBマイクの認識確認

写真 2.5 USBマイクの優先度を変更

12

2.2 USB マイクの設定

USB マイクの取り付けUSB マイクをラズベリーパイにつなげます。ラズベリーパイは、パソコンなどに比べて電源から供給される電力が弱いため、USB 機器のなかで、消費電力の激しいデバイスをつけているとOSやデバイスの動作が不安定になることがあります。今回は、USB にはマイク、WiFi を利用する場合は、インターフェースカードなど接続する程度なので、電力不足にはなりません。

USBマイクが正常に認識されているか確認するため、コマンドを入力します。

lsusb

ラズベリーパイに、接続されているUSB デバイスが、表示されています。今回利用しているUSB マイクは「C-Media…Electronics,… Inc.」と表示されていればOKです。次に、Julius でこのUSB マイクで、音声認識を利用するために、ラズベリーパイのUSB オーディオアダプタの優先度を 1番にします。

cat…/proc/asound/modules

snd_usb_audio が 0 で は な い 場 合、alsa-base.conf を編集してUSBオーディオアダプタの優先度を変更します。「sudo…–s」などでルート権限に移った後、alsa-base.conf の該当部分を編集します。

nano…/etc/modprobe.d/alsa-base.conf

「options…snd-usb-audio…index=-2」などとなっている部分を「options…snd-usb-audio…index=0」として、優先度を変更します。

ファイルの編集が完了したら、ラズベリーパイを再起動します。再起動がした後、再度「cat…/porc/

図 2.5 Julius ウェブサイトの右側にソースのダウンロードリンクが設置されています

13

asound/modules」コマンドを実行し、USBマイクの優先度が、変更されていればOKです。

録音・再生テストUSBデバイスの準備が完了したら、音声を録音し、再生できるか試してみます。録音、再生は下記のコマンドで実行が可能です。

マイクの入力音量を調整するamixer…sset…Mic…60

10 秒間録音して test.wav に保存するarecord…-d…10…test.wav

test.wav を再生するaplay…test.wav

トラブルシューティングHDMI ディスプレイが音の再生に対応していないなど、音の再生がうまくいかない場合があります。「aplay…-l」を実行すると再生で利用できるオーディオデバイス一覧が表示されますので、「aplay…-D…hw:0,0…test.wav」(0,0 はカード番号 , デバイス番号)でデバイスを指定して再生を試してみてください。それでも音が出ない場合、デバイスの認識がされていない可能性があります。「arecord…-l」コマンドで、デバイスが正しく認識されているか確認します。また、「sudo…raspi-confi…g」の設定画面で「9.Advanced…Options」の Audio 設定で出力が、「HDMI」か「ステレオジャック」のどちらが選択されているかなども確認します。

マイクの準備ができたら、いよいよ音声認識の準備をしていきます。

2.3 Julius の準備

音声認識・Julius とは音声認識とは、音声が持つ音の特徴点を認識して、識別する技術です。冒頭にも説明したように、現在ではスマートフォンをはじめとしてさまざまな場面で活用されています。Julius は国内の大学や研究機関などが、中心となって開発が進められているオープンソースの音声認識エンジンです。

大語彙連続音声認識エンジン Juliushttp://julius.sourceforge.jp/

高性能な汎用大語彙連続音声認識エンジンです。…数万語彙の連続音声認識を一般の PC上でほぼ実時

間で実行できます。また、高い汎用性を持ち、発音辞書や言語モデル・音響モデルなどの音声認識の各モジュールを組み替えることで、様々な幅広い用途に応用できます。

Julius のウェブサイトにもあるように、高性能で汎用性も高いので、アイデア次第でいろいろな活用ができそうです。

Julius のインストール・設定さっそくインストールと設定しましょう。最初にJulius のプログラム本体をウェブサイトからダウンロードしてきます。wget コマンドでダウンロードするか、または raspbian の GUI で、ブラウザから必要なファイルをダウンロードしてください。

ダウンロードするファイルJulius 本体 (version4.3.1)ディクテーションキット (version4.3.1)文法認識キット (version4.1)※バージョンは、2015年 3月現在

ダウンロードが完了したら、Julius をビルドしインストールします。インストールのあと、設定ファイルなどを設置するため、ディレクトリを作成してファイルをコピーします。

Julius のビルド / インストールtar…zxvf…julius-4.3.1.tar.gzcd…julius-4.3.1/./confi…guremakesudo…make…install

設定ファイルなどをおくディレクトリを作成後、ディクテーションキットファイルをコピーします。

sudo…mkdir…/etc/julius/sudo…mkdir…/var/lib/julius/

写真 2.3 ラズベリーパイにUSBマイクを取り付け

14

ディクテーションキットの解凍・コピーtar…zxvf…dictation-kit-v4.3.1-linux.tgzcd…dictation-kit-v4.3.1-linux/sudo…cp…model/lang_m/bccwj.60k.htkdic…/var/lib/julius/sudo…cp…model/phone_m/jnas-tri-3k16-gid.binhmm…/var/lib/julius/sudo…cp…model/phone_m/logicalTri…/var/lib/julius/

文法認識キットの解凍・コピーcd…../tar…zxvf…grammar-kit-v4.1.tar.gz

次 に、Julius 実 行時に必要な snd-pcm-oss モジュールを組み込みます。

sudo…sh…-c…"echo…snd-pcm-oss…>>…/etc/modules"

Julius の実行準備がひととおりできたところで、下記のコマンドで Julius を実行します。このコマンドは、文法認識キットを利用して、Julius を実行するコマンドです。

julius…-C…./grammar-kit-v4.1/testmic.jconf…-charconv…EUC-JP…UTF-8

「<<<please…speak>>>」の文字が画面に表示されて、マイクに向かって話したときにテキストが表示されたら成功です。表示されるテキストには、0.84 などのような認識精度の数字が表示されます。

登録辞書の作成マイクに向かって話すとさまざまな単語が認識されたと思います。Julius の標準の辞書を利用した

ので、そこに登録されている単語が認識されます。今回は、特定の単語を認識して、機器を動作させるために単語の制限を行います。Julius では、認識できる語句を制限するために、辞書を作成して単語を登録できます。辞書の書き方は基本的に「“登録名称”…Tab…“実際の発音”」として記述を行います。

では、さっそく辞書にスイッチオン・オフさせるための魔法の合言葉を登録しましょう!日常的にこのホームコントローラーを利用する場合、TVやラジオからの音声でご認識しやすい単語や、他の人がいるときでも、声に出して恥ずかしくないような単語にすることをお奨めします。今回は、下記のような合言葉にしました。

nano…~/test.yomi

--test.yomi--おはよう… おはようバルス…… ばるす

「バルス」は、みなさんおなじみアニメ「天空の城ラピュタ」のセリフです。オンとオフの差が激しいのは気にせずいきましょう。単語を記述したファイルの作成が完了したら、次に Julius で利用できる形式に変換します。

cd…~/julius-4.3.1/gramtools/yomi2voca/…iconv…-f…utf8…-t…eucjp…~/test.yomi…|…./yomi2voca.pl…>…~/julius-kits/dictation-kit-v4.3.1/test.dic

変換した辞書を、実行する設定ファイルを作成します。

nano…~/julius-kits/dictation-kit-v4.3.1/test.jconf

-w…test.dic-v…model/lang_m/bccwj.60k.htkdic-h…model/phone_m/jnas-tri-3k16-gid.binhmm-hlist…model/phone_m/logicalTri-n…5-output…1-input…mic-zmeanframe-rejectshort…800-charconv…EUC-JP…UTF-8

※詳しい引数の使い方はウェブサイトを参照 (http://julius.sourceforge.jp/) してください。

図 2.7 システムの流れ

写真 2.6 実際のシステム構成

15

設定ファイルが作成できたら、作成したファイルを指定して再度 Julius を実行して認識できるか、試してください。

julius…-C…~/julius-kits/dictation-kit-v4.3.1/test.jconf

これで、辞書に登録した単語で音声認識ができるようになりましたね。

2.4 アプリへの応用

音声認識で照明のオン・オフJulius が使えるようになったので、実際にアプリと連携させます。Julius はラズベリーパイ上で動いているOS(Raspbian) のモジュールとして動作させることができる (http://julius.sourceforge.jp/juliusbook/ja/desc_module.html) ため、他のプログラムと TCP 通信が利用できます。ここでは、Julius をモジュール版で動作させて、perl プログラムから Julius を監視し、特定の音声が認識できた場合、別の処理を実行させてみます。下記のプログラムではキーワードに「おはよう」または「バルス」が認識された場合、電気スタンドのオン・オフのプログラムを実行してみます。

Julius をモジュール版で起動する場合、「-module」を引数につける

julius…-C…~/julius-kits/dictation-kit-v4.3.1/test.jconf…-module

次に Julius を監視して、「switchon」や「switchoff…」などの特定の単語が発音された場合に電気スタンドを動かすプログラムを作成します。

プログラム名:controller.pl#!/usr/bin/env…perluse…utf8;use…strict;use…warnings;use…5.10.0;use…Encode;use…IO::Socket;…#Julius へソケット接続my…$socket…=…IO::Socket::INET->new(…………PeerAddr…=>…'localhost',……#…接続先…………PeerPort…=>…10500,……………………#…Port…番号…………Proto…………=>…'tcp',……………………#…Protocol…………TimeOut……=>…10…………………………………#…タイムアウト時間);

die("Could…not…create…socket:…$!")…unless($socket);

while(1){…………my…$msg…=…$socket->getline();…………my…($word,…$cm)…=…&get_parameter($msg);……………if($word…eq…"switchon"…&&…$cm…>=…0.95){

写真 2.7 「電気スタンド点灯テスト

16

… system("sudo…wget…-O…-…http://192.168.0.50/light/?on=1");…………}

…………if($word…eq…"switchoff"…&&…$cm…>=…0.95){… system("sudo…wget…-O…-…http://192.168.0.50/light/?on=0");…………}}

sub…get_parameter(){…………my…$msg…=…shift;……………my…$text…=…decode_utf8($msg);……………if($text…=~…/.+WORD="(\S+)".+CM="(\S+)"/){……………………return…($1,…$2);…………}else{……………………return…("",……0);…………}}

…[参考ビデオ]http://rohmweb.wistia.com/medias/mm8fy4g39r

ビデオでは、スイッチオン・スイッチオフどちらもうまく動いてますね。特に「バルス!」でスイッチがオフになるのは実際に体感してみるとちょっと非日常を感じることができます。ただし短い合言葉の場合、作業中ラジオや他の音が出ていると、誤認識してしまうケースがあります。そのような場合は、プログラムの赤文字の部分を変更して認識精度の数値を変更してお試しください。指定する単語や実際に利用する人の発音にもよりますが、比較的短く認識しやすい単語であれば 1.00 で指定しても認識します。実用化する場合は、認識精度の調整のほかに、誤認識しても回避できるような仕組みが必要です。音声もスタンバイモードにするためのキーワードをはじめに認識させ、それが認識してから、機器

に指令を出すキーワードの認識を受け付けるようにするという、2段階のステップを設けるといった工夫が良いでしょう。…また、青文字部分で、wget コマンドを利用して実際に処理を行うラズベリーパイへリクエストを送信していますので、別の制御回路を作った場合には、この行を改良し他のデバイスの制御なども可能になりますね。

参考文書:…ORBIT…SPACE(http://www.orsx.net/blog/archives/4938)

2.5 まとめ

今回、比較的手軽に音声認識エンジンを利用して簡単な音声認識の使い方と応用方法を紹介しました。今回は電気スタンドの制御もラズベリーパイを利用して実現していますが、リモコン操作が可能な家電などであれば、リモコン信号をラズベリーパイに学習させて、音声でリモコン信号を送信する方式にすると、いったような応用も可能です。音声認識のメリットを活かすならば、手を使わず操作できる点があげられますので、両手がふさがっていることの多いキッチンにこの端末を置いて、合言葉をかけると手元を照らすというのは、どうでしょうか。音声端末ならではのアイデアを考えてみるのも楽しいですね。ぜひ、音声認識エンジンを活用して、次世代のスマートなお部屋を実現させてみてください!

お問い合わせ[email protected]

掲載記事利用上のご注意掲載された回路、技術、プログラムなどを利用して生じた

全ての不利益、損害、事故などDevicePlus編集部・ローム株式会社は責任を負いかねます。