小型Linuxサーバ / GuruPlug Server

この記事は2012年8月8日から2013年7月1日の間に「GuruPlugServer Facebook」で紹介したものです。

#3 中級編 簡単なプログラムを動かしてみよう

#3-1 GuruPlugからメールを送ってみよう

今回はGuruPlugにメールサーバを構築して、自分宛にメールを送ってみましょう。

今回使用するメールサーバソフトは「postfix」です。
postfixは高速で、設定が容易な上に安全性も高いのが特徴です。

早速postfixのインストールを行いましょう。
【apt-get install postfix】を実行します。

インストールが完了し、上記の画面が表示されたら「了解」を選択します。

上記の画面では、「インターネットサイト」を選択しましょう。

次のドメイン名設定では、とりあえずそのままにして了解を押しましょう。

設定はこれで完了です。
早速メールを送ってみましょう。

【mail メールアドレス】を実行して「Subject」を入れます。

続いては本文です。
「How are you?」と記して、「Enter」を押して、本文の終わりを示す「.」を入れます。
次は「Cc:」ですが、今回はなしで送ります。
そして「Enter」を押して、送信します。

届いているかな

届いていません…
送れていないようですね…

ログをチェックしてみましょう!

【cd /var/log】で【tail mail.log】を実行して下さい。
【tail】コマンドは最新のシステムログを表示するために使用するコマンドです。

「ドメインが見つからない」って言われていますね。

調べてみると…
「sheevaplug-debian」のドメイン名のままだと長すぎたようです。

なので今回は「myhostname」を「guruplug.net」に変更してみましょう。
「cd /etc/postfix」で「vi main.ch」で設定ファイルを開きます。

「myhostname」を「guruplug.net」に変更します。
「main.cf」を変更したので、設定を反映させるために、「restart」します。

【/etc/init.d/postfix restart】を実行して下さい。

再度メールを送信してみましょう!

届いています!
成功です^^

【まとめ】
みなさんメールは届きましたか?
メール配信ができれば、GuruPlugとWEBカメラをつなげて外出中の防犯対策装置を作ることもできますね。
#2-2 WEBカメラをつなげてみよう」でインストールした「motion」は動体検知が可能なので、
もし動体検知をしたら、自分宛にメールを送るような設定にしておくことも可能ですね!

#3-2 GuruPlugから添付ファイル付きメールを送ってみよう

今回はGuruPlugから添付ファイル付きメールを送ってみようです。
#3-1 GuruPlugからメールを送ってみよう」で「Postfix」の【mail】コマンドを用いてメールを送信しました。
その際は、簡単にGuruPlugからメールを送ることができました!

しかし添付ファイルを付けて送信となると、一気に難易度が上がってしまいます。
というのも、【mail】コマンドが添付ファイルの送信に対応していないコマンドだからです。
今回は「MIME_MAIL.sh」というシェルスクリプトを作成して画像添付メールをGuruPlugから送信します。

*「#3-1 GuruPlugからメールを送ってみよう」で「Postfix」はインストール済みであることにします。

「MIME_MAIL.sh」はこちらより↓ダウンロードして使用して下さい。
www.jspnet.co.jp/guruplug/download/MIME_MAIL.sh

ダウンロードできたら、「MIME_MAIL.sh」の中を少し変えます。
1. GuruPlugのアドレス記述
2. 宛先アドレス記述
3. Subject記述

4行目~6行目のここです。

from_addr='from@address'

to_addr='to@address'

subject='Subject'

そして早速このシェルスクリプトを使って画像付きメールを送ってみましょう。
今回はGuruPlugの画像を添付して送信します。

シェルの引数に添付画像を付与します。

./MIME_MAIL.sh guruplug.jpg

を実行します。

あれ、なにやらエラーで出てしまいました。
「uuencode:command not found」

しかしメールは届いていますね^^;
画像は送られていません。

【uuencode】コマンドがインストールされていなかったようです。

apt-get install uuencode

でインストールしようとしたら、「パッケージが見つからない」と出てきてしまいました。

調べてみると、【uuencode】コマンドは【sharutils】パッケージに同封されていたようです。

そもそも【uuencode】は、電子メールのような
ASCII文字のテキストデータしかサポートしていないプロトコルを用いて、バイナリデータを送るために使用します。

さて添付ファイルを送信するために【sharutils】パッケージをインストールします。

apt-get install sharutils

これで準備OKだと思います!

再度

./MIME_MAIL.sh guruplug.sh

を実行します。

メール届いているかな。

届いていますね!
ちゃんとGuruPlugの画像も添付されていますね!
成功です^^

GuruPlugから添付ファイル付きメールを送ることができれば、
例えば外出中に、お家でお留守番しているペットの画像を携帯に送信することもできそうですね!
ぜひペットの見守りにGuruplugを使ってみて下さい。

#3-3 GuruPlugでJavaプログラムを動かしてみよう

今回は、GuruPlug上でJavaプログラムを動かしてみます。

手順は次のとおりです。
【手順1】 GuruPlugにARM版のJRE(Java Runtime Environment)をインストールする。
【手順2】 GuruPlug上で動かすJavaプログラムを用意する。
【手順3】 用意したJavaプログラムをGuruPlugに配置して動かす。

3つの手順です。簡単ですね^^b
では、はじめましょう!

まずは、今回の記事に登場するGuruPlugやJREといった、ハードウェアとソフトウェアをまとめます。
これらが揃っていると、スムーズに作業できますよ。
「そんな細かな説明、私には不要よ!」という方は、ほどよく本記事を参照して、作業してみてください。

ハードウェアとして次の方々が登場します。
・GuruPlug
・作業用パソコン

作業用パソコンには、SSHクライアントをインストールしておきます。
今回の説明ではTeraTermを使用しています。
本シリーズの愛読されている方は、TeraTermはインストール済みですよね♪

作業用パソコンから、GuruPlugにSSHでログインして、JREのインストール等を行います。
また、GuruPlug上で動作させるJavaプログラムのコンパイルにも、この作業用パソコンを使用します。

ソフトウェアとしては次の方々が登場します。
・ARM版のJRE(Java Runtime Environment)
・Javaプログラム作成のためのJDK(Java Development Kit)
・SSHクライアントのTeraTerm
・SFTPクライアントのFileZilla
・Javaプログラムのソースを書く際に使用する使い慣れたエディタ

本記事では、ARM版のJREのダウンロードとインストールについては説明させてもらいます。
JDK、TeraTerm、FileZilla、エディタの用意については、、、
ごめんなさい割愛させていただきます。

長々と書いていますが、簡単です、ご安心を^^b
ではでは、先に説明した手順1からスタートです。

【手順1】GuruPlugにARM版のJRE(Java Runtime Environment)をインストールする。
まずは、ARM版のJREをORACLEのWEBサイトからダウンロードします。
GuruPlug上でwgetコマンドを使用して、ダウンロードしようと試みましたが、ダメでした。
何かをダウンロードする時に見かける、「同意してダウンロード!」的な操作をしなければ、ダウンロードできませんでした。
なので、作業用パソコンでORACLEのWEBサイトにアクセスして、所望のARM版のJREをダウンロードします。
なお、ダウンロードには、ORACLEのアカウントが必要です。。。

「面倒だなぁ!w」とつぶやかれましたか?
そうです、面倒なんです。。。
「私がダウンロードしたARM版のJREを使用してください!」というのもよろしくないので、面倒ですが、各自ダウンロードしましょう。
私からは、ダウンロード時のWEBサイトのURLとダウンロードするファイルをお伝えします。
読者の方、ORACLEのアカウントのご用意を。

ORACLEアカウント、ご用意されましたね!?
では、下記のURLのWEBサイトをWEBブラウザで開いてください。
http://www.oracle.com/technetwork/java/embedded/downloads/javase/index.html

英語のページですね。少し抵抗がある方もいらっしゃるかもしれませんが、下図を参考に次のファイルをダウンロードしてください。

ダウンロードするファイル
ejre-7u6-fcs-b24-linux-arm-sflt-headless-10_aug_2012.tar.gz

作業用パソコンの適当な場所にダウンロードしてください。
次にダウンロードしたファイルをGuruPlugに配置しましょう。
配置は、SFTPクライアントのFileZillaを使用して行います。
作業用パソコンでFileZillaを起動して、ダウンロードしたファイルをSFTPでGuruPlugに配置しましょう。

申し訳ない!詳細手順は割愛させていただきます。
ダウンロードしたファイルを、rootユーザでGuruPlugの「/usr」ディレクトリに配置しています。

さぁ、GuruPlugにJREをインストールしましょう。
今度は作業用パソコンでTeraTermを操作してGuruPlugにSSHでログインします。
本シリーズを愛読されている方は、SSH接続も手馴れたものですね。♪

先ほど「/usr」ディレクトリに配置したファイルを使用して、JREを「/usr/java」にインストールします。
まずは、インストール先のディレクトリを作成します。
# mkdir /usr/java

次に、インストール先のディレクトリ「/usr/java」に移動してインストール作業を行います。
# cd /usr/java

インストールといっても、ダウンロードしたファイルをtarおよびunzipコマンドを使用して、解凍するだけです。
gunzip /usr/ejre-7u6-fcs-b24-linux-arm-sflt-headless-10_aug_2012.gz
tar xvf /usr/ejre-7u6-fcs-b24-linux-arm-sflt-headless-10_aug_2012.tar

お疲れ様でした。インストール完了です!!
Javaに慣れている方は、「JAVA_HOMEの環境変数設定は?パスの設定は?」と思われたことでしょう。
今回は、環境変数の設定もパスの設定も行わずに進めます!!
Javaプログラムを実行する際は、絶対パスでjavaコマンドを実行したいと思います。

コーヒーでも飲んでちょっと休憩しましょう♪

【手順2】 GuruPlug上で動かすJavaプログラムを用意する。
先の手順でGuruPlugにJREがインストールできました。
では、GuruPlugで動作させるJavaプログラムを用意しましょう。

public class Hello {
  public static void main(String[] args) {
    // Hello!と出力するだけ。
    System.out.println("Hello!");
  }
}

作業用パソコンのエディタで上記のjavaソースを作成して、JDKでコンパイルしましょう。
(先に断らせて頂いたとおりで、JDKのインストール手順は割愛しています。)

クラスファイル「Hello.class」が生成されます。
さぁ、クラスファイルをGuruPlugに配置して動かしましょう!
もう一息です。

【手順3】 用意したJavaプログラムをGuruPlugに配置して動かす。
先の手順で作成したクラスファイルをFileZillaでGuruPlugに配置します。
rootユーザでGuruPlugの「/usr」ディレクトリに配置しています。

さぁ、実行します。

出ましたね、「Hello!」
・・・。
うぅ~ん、マンダムw

思わず脱力してしまうような成果ですが、
何しろGuruPlugでJavaプログラムが動きましたね!

JREのインストールは、少し大変(手順が多かった)ですが、Javaプログラムを動かすこと自体は簡単でしたね!
大変だったJREのインストールも完了したので、今度はJavaプログラムを動かすことに注力してみますかね。
「Hello!」だけでは寂しいので、Javaで開発されているOSGiフレームワークでも動かしてみるかな・・・。

#3-4 GuruPlugでOSGiを使ってみよう

今回は、GuruPlugでOSGiを使ってみよう!です。

#3-3 GuruPlugでJavaプログラムを動かしてみよう」でGuruPlugにJRE(Java Runtime Environment)をインストールして、
Javaプログラムを動作させるネタを記事にさせてもらいました。
Javaプログラムといっても「Hello!」と出力するだけの「初めてのJava」といった感じのプログラムでした。

今回は、Javaで実装されたフレームワークである、OSGiフレームワークをGuruPlug上で動かしてみたいと思います。

本記事の全体の流れを説明いたします。
【セクション1】そもそもOSGiって何?
【セクション2】GuruPlug + OSGiフレームワーク
【セクション3】GuruPlug + OSGiフレームワーク + OSGiバンドル

今回のゴールは、GuruPlug上でOSGiフレームワークを動かし、OSGiフレームワークの上でOSGiバンドルを動かすことです。

まずは、読者の方とゴールのイメージを共有したいと思います。
こんな感じです。

現在は、GuruPlugにJREがインストールされている状態です。

今回は、JREで動作するOSGiフレームワークをインストールします。
インストールすると、こんな感じです。

そして、インストールしたOSGiフレームワーク上でOSGiバンドルというものを動かします。

写真で黄色いブロックの上に座っているお人形さんが、OSGiバンドルです。
OSGiの特徴は、OSGiバンドルの抜き差しができるという点です。
しかも、OSGiフレームワークは動作させたまま(JREが動作したまま)、動的な抜き差しが可能です。

そろそろ始めますね^^
まずは、OSGiの説明からです。

【セクション1】そもそもOSGiって何?
本記事で語りだすと、本記事が長くなってしまうので、下記のURLのページをご覧ください。
https://www.jspnet.co.jp/solution/osgi/osgiOverview.html

弊社のOSGi技術者(愛好者?)が作ったOSGiの説明ページです。
弊社ホームページには、この他にもOSGiの関する記載がございますので、
ご興味のある方は、弊社ホームページもご参照ください。

簡単ではありますが、弊社ホームページでOSGiというものを理解いただけたでしょうか?
では・・・次に、OSGiフレームワークをインストールしてみましょう。

【セクション2】GuruPlug + OSGiフレームワーク
OSGiフレームワークとは、OSGi Allianceが定義した仕様をもとに実装されたOSGiフレームワークです。
実装は、ApacheのFelix、EclipseのEquinoxなどがあります。
今回は、FelixをApache FelixのWEBサイトからダウンロードしてインストールします。
http://felix.apache.org/

下記のURLのWEBサイトをWEBブラウザで開いてください。
http://felix.apache.org/downloads.cgi

「Felix Framework Distribution」のセクションからtar.gzファイルをGuruPlugにダウンロードして、
インストール作業を行います。

まず、作業用パソコンでTeraTermを操作してGuruPlugにSSHでログインします。

まずは、GuruPlugにFelixのインストールディレクトリを作成します。

# mkdir /usr/felix

次に、「/usr/felix」ディレクトリにFelixが格納されたtar.gzファイルをダウンロードします。
今回は、以前の記事で登場した「wget」コマンドを使用してダウンロードします。

# cd /usr/felix
# wget http://archive.apache.org/dist/felix/org.apache.felix.main.distribution-4.0.3.tar.gz

※Tera Term画面内のURLは上記URLに置き換えてお読みください。

GuruPlugが外部ネットワークと接続されていない環境の場合は、
「wget」によるダウンロードを「WEBブラウザ」によるダウンロードに読み替えて対応してください。
WEBブラウザでダウンロードし、ダウンロードしたファイルをSFTPクライアントでGuruPlugにアップすれば、
wgetと同じ操作になりますね。

次に、「/usr/felix」ディレクトリにダウンロードしたtar.gzファイルを解凍します。

# tar xvfz org.apache.felix.main.distribution-4.0.3.tar.gz

解凍すると、「/usr/felix/felix-framework-4.0.3」というディレクトリが現れます。

さぁ、OSGiフレームワーク(Felix)を動かします。

「java」コマンドの引数にFelixの実装(classファイル)が包含されたJARファイルを指定して、
「java」コマンドを実行することでOSGiフレームワーク(Felix)を動かしてみましょう。

# cd /usr/felix/felix-framework-4.0.3
# /usr/java/ejre1.7.0_06/bin/java -jar bin/felix.jar

Felix(OSGiフレームワーク)が起動すると、「Gogo Shell」と呼ばれる対話式のシェルが登場します。
この状態が、Felix(OSGiフレームワーク)が起動した状態です。

「へー・・・」という状態だと思いますが、Felix(OSGiフレームワーク)が起動した状態のまま、
次のセクションに進みましょう。

【セクション3】GuruPlug + OSGiフレームワーク + OSGiバンドル
先にも説明したとおり、前セクションの手順を終えた状態で、OSGiフレームワークが起動した状態です。
「Gogo Shell」を少し操作して、現在OSGiフレームワーク上で動作しているOSGiバンドルを確認してみましょう。
OSGiバンドルとは、冒頭の写真のお人形さんのことです。
OSGiフレームワーク上にどんなOSGiバンドル(お人形さん)が動作しているのか確認するということです。
「Gogo Shell」で「lb」というコマンドを実行してみます。

「ID」、「State」等の一覧が表示されましたね。
この一覧は、OSGiフレームワーク上で動作しているOSGiバンドルを表しています。
ID-0からID-4が表示されています。ID-0は、OSGiフレームワーク本体(Felix本体)を表す特別なものです。
このID-0以外の4つが、OSGiフレームワーク上で動作しているOSGiバンドルを表します。
OSGiフレームワーク上で4つのOSGiバンドルが動作しているということです。
この一覧で「Gogo Shell」という文字が確認できると思いますが、
いま操作している「Gogo Shell」もOSGiバンドルで実装されているのです。
OSGiフレームワークで「Gogo Shell」を実装したOSGiバンドルが動作しているので、
いま「Gogo Shell」が使えているのです。

「Foo機能を実装したOSGiバンドル動作させれば、OSGiフレームワークでFoo機能が使える。」
「Bar機能を実装したOSGiバンドル動作させれば、OSGiフレームワークでBar機能が使える。」
これがOSGiの特徴です!

では、OSGiフレームワークに新たなOSGiバンドルを追加してみましょう。
今回は、HTTPサーバ機能を実装したOSGiバンドルを追加してみます。
OSGiフレームワークがHTTPサーバ機能を具備するということです。

「Gogo Shell」の操作で使用しているTeraTermはそのままにして、
新たにTeraTermを立ち上げて、GuruPlugにSSHでログインしましょう。
新たにログインしたターミナルでHTTPサーバ機能を実装したOSGiバンドルをダウンロードした後、
「Gogo Shell」を操作してダウンロードしたOSGiバンドルを起動してみます。
そして、最後にOSGiフレームワークに追加されたHTTPサーバにWEBブラウザからアクセスしてみましょう。
ちょっと大変そうですが、やってみましょう!
^^b

新たにTeraTermを立ち上げて、GuruPlugにSSHでログインします。
「/usr/felix/felix-framework-4.0.3/bundle」ディレクトリにHTTPサーバ機能を具備したOSGiバンドルをダウンロードします。
まず、ダウンロードディレクトリを作りましょう。
「/usr/felix/dl_bundles」というディレクトリを作成します。

# mkdir /usr/felix/dl_bundles

そして、このディレクトリにOSGiバンドルをダウンロードします。

# cd /usr/felix/dl_bundles
# wget http://archive.apache.org/dist/felix/org.apache.felix.http.api-2.2.0.jar
# wget http://archive.apache.org/dist/felix/org.apache.felix.http.base-2.2.0.jar
# wget http://archive.apache.org/dist/felix/org.apache.felix.http.bundle-2.2.0.jar
# wget http://archive.apache.org/dist/felix/org.apache.felix.http.jetty-2.2.0.jar
# wget https://www.jspnet.co.jp/osgi/bundle/sample/jp.co.jspnet.osgi.bundle.sample.webui_1.0.0.jar
(※2016/08/18追記:「jp.co.jspnet.osgi.bundle.sample.webui_1.0.0.jar」は移動しました。https://www.jspnet.co.jp/download/guruplug/jp.co.jspnet.osgi.bundle.sample.webui_1.0.0.jarからダウンロードをお願いします。)

いまの状態では、OSGiバンドルをGuruPlugにダウンロードしただけです。
OSGiフレームワーク上では動作していません。
「Gogo Shell」を操作して、ダウンロードしたOSGiバンドルをOSGiフレームワーク上で動作させましょう。
「Gogo Shell」で次のコマンドを実行してください。

# install file:/usr/felix/dl_bundles/org.apache.felix.http.api-2.2.0.jar
# install file:/usr/felix/dl_bundles/org.apache.felix.http.base-2.2.0.jar
# install file:/usr/felix/dl_bundles/org.apache.felix.http.bundle-2.2.0.jar
# install file:/usr/felix/dl_bundles/org.apache.felix.http.jetty-2.2.0.jar
# install file:/usr/felix/dl_bundles/jp.co.jspnet.osgi.bundle.sample.webui_1.0.0.jar

ここまでで、ダウンロードしたOSGiバンドルをOSGiフレームワークにインストールした状態です。
インストールされたOSGiバンドルはスタートされることで、動き始めます。

「Gogo Shell」で次のコマンドを実行して、スタートしましょう。

# start 5
# start 6
# start 7
# start 8
# start 9

ほとんど「おまじない?」といった感じで作業を進めてきましたね^^;
まとめますと、HTTPサーバ機能を具備したOSGiバンドルをOSGiフレームワークにインストールして、
インストールしたOSGiバンドルをスタートした状態です。
HTTPサーバにサンプルのWEB画面を登録するOSGiバンドルも動かしているので、
登録したWEB画面が表示されることを確認しましょう。
これで最後です!感動の一瞬!

WEBブラウザで下記のURLを開いてください。
http://192.168.123.1:8080/sample/webui/index.html
(「192.168.123.1」部分は使用されているGuruPlugのIPアドレスに合わせて変更してくださいね!)

上図の画面が表示されましたでしょうか?
ちょっと疲れましたね^^;
なお、Felixは、「Gogo Shell」で「stop 0」とコマンドを実行すると停止します。

今回は、GuruPlugでOSGiフレームワークを動かしてみました。
機会がありましたら、新しいOSGiバンドルを動かしてみたいと思います。

#3-5 Juliusで音声認識してみよう パート1

今日は「Juliusで音声認識してみよう」です。

そもそもJuliusとは、フリーで利用できる高性能音声認識ソフトウェアです。
数万語の語彙を対象とした文章発声の認識を行う能力を持っています。

今回はNTTアドバンステクノロジ株式会社様製の「RealTalk」をスピーカとマイク代わりにします。
RealTalkは会議用マイクスピーカーです。
電話機にRealTalkをつなげるだけで、遠隔地からでも会議に参加できます!
ジェイエスピーは販売代理店なので、もし質問等ありましたら、お問い合わせ下さい。

今回はRealTalkをマイク代わりにしてGuruPlugをつなげて音声認識させてみたいと思います。

さっそく始めましょう^^
まずはRealTalkを接続して、ドライバインストールを行います。

【apt-get install libftdi1 libftdi-dev】
【apt-get install libusb-0.1-4 libusb-dev】
【apt-get install pcscd】
【apt-get install libpcsclite-dev libpcsclite1 libccid】
上記のパッケージをインストールします。

GuruPlugとRealTalkをUSBを使用してつなげてみましょう!
RealTalkを正しく認識しているか確認します。

【arecord -l】実行して下さい。
上記のリストが出力されたらデバイスを正しく認識しています。

続いては【arecord】コマンド動作確認に入ります。
下記のコマンドを実行して下さい。
【arecord】コマンドはALSAを使用したサウンドの録音に使用します。
オプションの【-t】はファイルタイプの指定です。
指定がない場合は、waveフォーマットを使用します。
【-f】はフォーマットです。
【-d】で指定した値秒だけ録音します。
【arecord -t wav -f S16_LE -d 5 -D hw:0 rec_tmp.wav】

*hw:0の0は【arecord -l】を実行した際に出力されたカード番号を記載します。

*もしGuruPlugで【arecord】コマンドが見つからない場合は、
 下記の「alsa-unils」パッケージをインストールして下さい。
【apt-get install alsa-utils】

【arecord】が正しく実行できれば、すぐさま録音に入ります。

RealTalkに「あー」と喋りかけてみましょう!
録音ができているか確かめてみます。

ALSAを使用したサウンドの再生には【aplay】コマンドを使用します。
下記のコマンドを実行しましょう。
【aplay -D hw:0 rec_tmp.wav】
*hw:0の0は先程同じカード番号です。

「チャンネル数が使用不可能」と出てきてしまいました!

調べてみると…
RealTalkからの録音時に作成されるwavファイルは8ビットモノラルとなります。
しかし16ビットステレオでないと上記のようなエラーになるため、【sox】コマンドを使って変換する必要があるようです。

下記のコマンドを実行します。
【sox rec_tmp.wav -b 16 out.wav channels 2】
rec_tmp.wavを16ビットステレオに変換したものout.wavにします。
【sox】コマンドがインストールされていなければ【apt-get install sox】を実行しましょう。

そして、16ビットステレオにしたout.wavを再生しましょう。

【aplay -D hw:0 out.wav】を実行します。

「あー」
喋っていますー!
成功ですね^^
今回はここまでです。

【まとめ】
今回はRealTalkを使用しましたが、ALSAが提供しているサウンドドライバに対応しているマイクとスピーカならば、
上記のコマンド【arecord】【aplay】で録音・再生ができるのでぜひ挑戦してみて下さい。

#3-6 Juliusで音声認識してみよう パート2

今回は「Juliusで音声認識してみよう_パート2」になります。

パート2は「Julius」をインストールして、
GuruPlugで音声認識してくれるのか試したいと思います!

うまく認識してくれるといいですね^^

早速「Julius」のインストールを行います。

【cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/julius co julius4】
【cvs】はバージョン管理システムです。
現在の「Subversion」に当たるものですね。

続いて、依存関係により必要となる追加パッケージのインストールです。
【apt-get install flex libasound2-dev libesd0-dev】

インストールされた「julius4」のディレクトリに移動して、コンパイルします。
【cd /root/julius4】
【./configure --with-mictype=alsa】
【make】
今回は、マイク入力で使用するAPIのデフォルトを
「ALSA」にするため、【configure】オプションで追加します。

そして【make install】でインストールします。
【/usr/local/incluse】以下に「julius」がインストールされました。

これでJuliusの起動テストをしてみよう!
と思ったら、Juliusを動かすためには「Juliusディクテーションキット」のダウンロードも必要なようです。
ディクテーションキットには、日本語の自動口述筆記に必要なモデルとJulius の実行バイナリが含まれています。

【wget "http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fjulius%2F51158%2Fdictation-kit-v4.1.tar.gz" -O dictation-kit-v4.1.tar.gz】
【wget】コマンドでファイルの取得を行い、
オプション【-o】でファイル名を決めます。

「ディクテーションキット」をダウンロードしたら、解凍しましょう。
【tar xzf dictation-kit-v4.1.tar.gz】

【cd /usr/local/dictation-kit-v4.1】で移動してJuliusの動作確認を行いましょう!

動作確認の際、ALSAデバイス名を環境変数「ALSADEV」で指定しておく必要があるので下記を実行します。

【set ALSADEV hw:0】
【export ALSADEV=hw:0】
「hw」は前回行った、【arecord -l】の実行で出力された「カード番号」です。

環境変数の設定方法は「csh(tcsh)系」と「bash(sh)系」では異なるようです。
「bash(sh)系」では【set】と【export】で環境変数を設定すれば良いのですが、
「csh(tcsh)系」の場合【setenv】コマンドを使用する必要があります。

やっと動作確認に入れますね^^

【cd /usr/local/dictation-kit-v4.1】で移動して
【julius -C fast.jconf -input mic -charconv EUC-JP UTF-8】
を実行します。

あ!「please speak」の文字が出ましたね!
RealTalkに向かって喋ってみます。

「こんにちは」
「こんにちは」
「さようなら」
「おはようございます」
「こんばんは」
と喋ってみた結果が以下のように出力されました!

全然正しく認識されていませんね…
でも「おはよう」だけはちゃんと取れていますよ!

成功としましょう^^
今回はここまでです。

【まとめ】
Juliusのインストールと動作確認は正しく行えましたか?
実際に自分が発した言葉を認識してくれると嬉しいですね。

#3-7 OpenJTalkでGuruPlugに話をさせよう

今回はOpenJTalkで音声合成して日本語テキストの読み上げに挑戦してみます!

そもそもOpenJTalkはフリーで利用できる日本語音声合成エンジンです。
日本語テキストデータを音声データに変換して出力できます。
今回は、前回から引き続き「RealTalk」をスピーカ代わりに処理結果を音声で出力できるか試したいと思います。

さっそく始めましょう!

まずOpenJTalkをビルドするために必要なbuild-essentialパッケージのインストールをします。

【apt-get install build-essential】を実行します。

build-essentialパッケージのインストールが完了したら、ソースコード類を入手しましょう。

「hts_engine API」から
【wget http://downloads.sourceforge.net/hts-engine/hts_engine_API-1.06.tar.gz

「OpenJTalk」から
本体
【wget http://downloads.sourceforge.net/open-jtalk/open_jtalk-1.05.tar.gz

OpenJTalk用辞書
【wget http://downloads.sourceforge.net/open-jtalk/open_jtalk_dic_utf_8-1.05.tar.gz

OpenJTalk用HTSボイス
【wget http://downloads.sourceforge.net/open-jtalk/hts_voice_nitech_jp_atr503_m001-1.04.tar.gz

さらに、MMDAgentのサンプルスクリプト
【wget http://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.3/MMDAgent_Example-1.3.zip/download

hts_engine_API-1.06.tar.gzを作業用ディレクトリに置いて、解凍、コンパイル、インストールを行います。
【tar zxvf hts_engine_API-1.06.tar.gz】
【cd ./hts_engine_API-1.06】
【./configure】
【make】
【make install】
を実行して下さい。

*今気がついたのですが、今まで【/tmp】の下で上記のインストールを行っていました。
 【tmp】ディレクトリは再起動するとディレクトリの中が空っぽになってしまいます…
 再度【cd /usr/local】の下に移動して始めからインストールし直します!

続いてはOpenJTalkのビルドとインストールに入ります。

解凍し「open_jtalk-dic_utf_8-1.05.tar.gz」を作業用ディレクトリに置きましょう。
【tar zxvf open_jtalk-dic_utf_8-1.05.tar.gz】
【mv ./open_jtalk_dic_utf_8-1.05 /usr/local/share/open_jtalk】

コンパイルしインストールです。
【./configure --with-charset=UTF-8】
【make】
【make install】

続いて辞書とHTSボイスの配置です。

「open_jtalk_dic_utf_8-1.05.tar.gz」を解凍して出来たディレクトリを【mv】コマンドで
「/usr/local/share/open_jtalk/」へ配置しましょう。
【tar zxvf open_jtalk_dic_utf_8-1.05.tar.gz】
【mkdir /usr/local/share/open_jtalk】
【mv ./open_jtalk_dic_utf_8-1.05 /usr/local/share/open_jtalk/】

また「hts_voice_nitech_jp_atr503_m001-1.04.tar.gz」を作業用ディレクトリに置いて解凍し、
出来たディレクトリを「/usr/local/share/hts_voice」へ配置しましょう。
【tar zxvf hts_voice_nitech_jp_atr503_m001-1.04.tar.gz】
【mkdir /usr/local/share/hts_voice】
【mv ./hts_voice_nitech_jp_atr503_m001-1.04 /usr/local/share/hts_voice/】

さらに「MMDAgent_Example-1.3.zip」を解凍して「/usr/local/share/hts_voice」へ配置します。
zipファイルの解凍には【unzip】コマンドを使用します。
【unzip MMDAgent_Example-1.3.zip】
【sudo mv ./MMDAgent_Example-1.3/Voice/mei_normal /usr/local/share/hts_voice/】

*この段階で非常に容量を取ってしまいます。
 【df -h】コマンドで使用可能容量を確かめてみて下さい。
 もし容量がぎりぎりでしたら、今までの圧縮ファイル等はもう使用しないので【rm】コマンドで削除しても大丈夫です。

OpenJTalkのインストールは大変ですね。
やっとこれでOpenJTalkが使用できそうです。

引数に何も与えないで、【open_jtalk】を実行してみましょう。

実行してみるとOpenJtalkの簡単な使い方が表示されました。
コマンドのオプションがたくさんあって少し複雑そうです。

なので今回は「動かしてみる-OpenJTalk」
(http://ja.nishimotz.com/open-jtalk#%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)
を参考にOpenJTalk動作確認用Perlスクリプトを作成します。

Perlスクリプトに関しては、今後のウォールで取り上げたいと思います。

上記のperlスクリプト「ojt_mei.pl」を作成します。
たくさんのオプションを指定していますね。
話す速度や声質などなど。

また動作確認用シェル「OJTK.sh」を作成します。
(シェルについては「第5・6回 GuruPlugによるLinux学習」をご覧ください)
このシェルを実行することで、音声を読み上げます。
このシェルでは、perlスクリプトファイルで各OpenJTalkオプションを実行後、
wavファイルを【sox】コマンドで8ビットモノラルから16ビットステレオに変換しています。
また【aplay】でデバイス指定を行っています。

これで動作確認の準備は整いました。
早速音声を出してみましょう!

音声ファイルを作成するには、「open_jtalk-1.05」ディレクトリ下で
【./OJTK.sh “しゃべりたい言葉”】を実行しましょう。

【./OJTK.sh “こんにちは”】

…「こんにちは」!!
でましたね。
女の方の声でやさしい感じの発音でした。

少し長めの言葉も試してみましょう。
【./OJTK.sh “お疲れ様です”】

…「お疲れ様です」
なんとかわかります!

成功ですね^^

【まとめ】
OpenJTalkのインストールは大変でしたね。
話す速さ・声質・抑揚などOpenJTalkのオプションで操作できそうです。
これでJuliusとOpenJTalkの動作確認はバッチリですね。