HALの起動方法~ SOCKET SERVER 'HAL'

ソケットサーバー「HAL」の起動方法をご紹介します。

HAL は通常、HAL 本体、Julius、voice_client と、3 つのプロセスを起動する必要があります。ここでは 3 つの起動方法をご紹介しますので、状況に合わせて使い分けて下さい。

HAL の起動方法

ここでは、HAL の起動方法について記します。HAL、Julius、voice_client の起動方法はそれぞれ、

sudo php -q (HALディレクトリまでのパス)/system/hal.php
julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -nolog -module
sudo php -q (HALディレクトリまでのパス)/system/voice_client.php

となります。起動はこの順番で行うようにして下さい。

Julius の -nostrip オプションは、Julius の Warning を非表示にするオプションです。

これは Julius のバグだと思うのですが、マイクのセッティングに問題がある時、Julius は膨大な Warning を出力し続けます。どうも、マイクの入力が無かったり音量が 0 の時等に起きるのではないかと思いますが、正しく Julius が動作しない場合は マイクのセッティングを見なおして下さい。

通常、Julius は動作ログを標準出力に出力しますが、 -nolog オプションはをつけるとこれを抑制できます。

バックグラウンド実行

ところで、上記コマンドを Shell で実行すると、コマンドプロンプトが戻ってこないために次のコマンドが入力できません。

この場合は、

sudo php -q (HALディレクトリまでのパス)/system/hal.php &
julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -module &
sudo php -q (HALディレクトリまでのパス)/system/voice_client.php &

のように、最後に & をつけてバックグラウンド実行を行うと 3 つのコマンドを実行できます。また、Linux に詳しい方は、上記を記したシェルスクリプトファイルを作成して、それを用いて起動を行うと良いでしょう。

なお、バックグラウンドで実行した場合は ctrl + c では終了できませんので、

pkill -f 'voice_client.php'
pkill -f 'hal.php'
pkill -f 'julius'

これらのコマンドでプロセスを終了させてください。

ターミナルを複数立ち上げる

また、X windowを使ってターミナルを3つ立ち上げるか、Tera Term 等のターミナルエミュレーターを複数起動し、それぞれのウィンドウで HAL、Julius、voice_client を起動するのも良いでしょう。

TeraTerm 3画面

これであればバックグラウンド実行する必要なく、好きなプロセスを ctrl + c で終了させられます。

初めての時は、この方法がなにかと便利です。

Raspberry Pi 起動時に自動実行

上記の方法で動作を確認し、あなたのアプリケーションが完成したら、最後は Raspberry Pi の起動時に自動実行するように設定します。

方法は、/etc/init.d/ にスクリプトを作成します。以下は、hal というスクリプトを作成していますが、名前は何でも構いません。

sudo vi /etc/init.d/hal

/etc/init.d/hal

#!/bin/sh
#/etc/init.d/hal
# and " su - pi -c 'sudo /etc/init.d/hal start' " in rc.local

case "$1" in
start)
sudo php -q (HALディレクトリまでのパス)/system/hal.php &
julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -nolog -module &
sudo php -q (HALディレクトリまでのパス)/system/voice_client.php &
;;
stop)
pkill -f 'voice_client.php'
pkill -f 'hal.php'
pkill -f 'julius'
;;
esac

exit 0

保存したらこのスクリプトに対して実行権限を与えます。(2016/05/21 追記)

sudo chmod +x /etc/init.d/hal

最後に、

sudo vi /etc/rc.local

で開いた /etc/rc.local ファイルの exit 0 の前に、

/etc/rc.local

sudo service hal start

を記述します。hal は、先ほどのスクリプトファイルの名前です。(Raspbian wheezy ではこれで動作しましたが、jessieでは動作しないようです。)

jessie では、以下の様なコードで自動起動できるかと思います。(2016/05/21)

/etc/rc.local

sudo /etc/init.d/hal start

これで、Raspberry Pi の起動時に HAL、Julius、voice_client が起動するようになります。

(2016/06/04 追記)

上記で jessie 対応すると、Raspberry Pi 起動時に iconCube Loader の読み込みが間に合わず HAL の実行エラーが発生してしまうようです。

簡単な対策としては、

sudo vi /etc/init.d/hal

/etc/init.d/hal

#!/bin/sh
#/etc/init.d/hal
# and " su - pi -c 'sudo /etc/init.d/hal start' " in rc.local

case "$1" in
start)
sleep 5

sudo php -q (HALディレクトリまでのパス)/system/hal.php &
julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -nostrip -nolog -module &
sudo php -q (HALディレクトリまでのパス)/system/voice_client.php &
;;
stop)
pkill -f 'voice_client.php'
pkill -f 'hal.php'
pkill -f 'julius'
;;
esac

exit 0

のように、start) に sleep 5 のような weit を設けて HAL の実行を遅延させると良いようです。この場合、/etc/init.d/hal が呼ばれてから HAL 実行まで 5 秒間待つことになります。

恐らく、もっと適切な方法があるのでしょうが、とりあえずの解決策として記述しておきます。今後、良い解決策が見つかったらこのページに追記します。


ご購入

ソケットサーバー「HAL」は以下のオンラインショップでご購入いただけます。ご購入に先立っては、ぜひ、体験版で動作の確認をお願いいたします。

体験版

ソケットサーバー「HAL」の体験版をダウンロード
hal_trial version 1.5
試用期限 2016/11/30 まで
※ sudo wget -O hal_trial_1_5.tar.gz 'http://feijoa.jp/getFile/?place=products&filename=hal_trial_1_5.tar.gz' でもダウンロードできます。
HAL の IP アドレス制限を解除してライセンス制に変更しました。お好きな IP アドレスで HAL をお試しいただけます。なお、ライセンスされていない製品では起動から 40 時間後に HAL は自動終了します。

この記事へのコメント

※現在コメントはMarkdown記法が強制です。>>Markdown の書き方


HALの起動方法を教えて下さい

お名前:62ki

2016-11-22 15:37:11

こんにちは。 いつも参考にさせて頂いています。HALを起動するとエラーになってしまいます。 簡単セットアップを全て同じ手順で終わらせた状態です。 Ver1.4.1です。 宜しくお願い致します。

お名前:管理者

2016-11-22 15:45:21

こんにちは62kiさん。 データベース・アクセスライブラリ(PDO)のエラーですね。 データベースのセットアップはされていらっしゃるでしょうか? データベースはまだ使わないということでしたら、 /HAL/setting/HALSetting.php の const USE_DATABASE = true; を const USE_DATABASE = false; に書き換えてみて下さい。 データベースをご利用になる場合は、 /HAL/setting/DBSetting.php で、ご利用になるデータベースの設定を行う必要があります。 なお余談ですが、今月中に、インストール作業やアプリケーション構築をより便利にしたHAL v2.0をリリースする予定となっております。

お名前:62ki

2016-11-22 18:47:28

早速のご連絡、ありがとうございます。 ご指摘のとうり、DBのセットアップをしていませんでした。セットアップ後に確認します。 Ver2.0、楽しみですね。ちなみに私はVer1.0を購入しましたが、その後メールで新Verのお知らせが届いています。今後も新Verをダウンロードさせて頂けるのでしょうか?

お名前:管理者

2016-11-22 19:55:51

62kiさん > その後メールで新Verのお知らせが届いています。今後も新Verをダウンロードさせて頂けるのでしょうか? はい、特に追加料金等無く、ご利用いただけるようにする予定です。 旧バージョンではIPアドレスの制限がありましたが、現在はそれをなくしてRaspberry Pi毎のライセンス制に変更を行っていますので、v2.0をご利用頂く場合は、当WEBサイトでライセンスを登録して頂くようになる予定です。 お手数ですが、よろしくお願いいたします。

この記事に返信

このコメントに返信