- ■ はじめに
-
- このページは、私がCTIシステムを開発した時の体験記です。
- CTIシステムを作るには、音声ボード探しから始まり、CTI用ミドルウェア探しに音声合成エンジン探しと、とにかく探しまくりでした。知らなかったんですから。
- このプロジェクトで最大の成果は”オープンソースでCTIシステムが作成できる! ”ということです。
- そして、このページをご覧いただくあなたに、わたしの経験を役立ててもらいたいので、あえて日本や米国のHPで得られた情報、開発中に発生した問題点などを公開します。
- この情報がCTIシステム開発の手助けになれば幸いです。CTIに関する情報は少ないですからね。
- 株式会社オープンコム 与那嶺
弘
-----------------------------------------------------------------------------------------------------------
- ■ 私の苦労は社長の一言からはじまった
-
- 社長:
- 「これからCTIシステムは、大、中、小企業を問わず必ず導入されていく。IP電話の出現によってインターネット&CTIシステムは融合するだろう。その為には、インターネット同様に安く作れなければ駄目。○百万もするのも駄目!とにかく安く作る方法を考えろ!!」
- また始まった。社長の壮大な夢ものがたり。
- 当社の社長の夢はいつもでかい。だが会社は小さい...トホホ
- 「CTIシステムを安くで作れ!」なんて言われてもCTIは高いのだから仕方が無いんじゃない!と思いつつCTIが本当に安くで作れるなら結構面白いかも。社長が言っているのもまんざら嘘ではなさそうだ。まー何事も当たってくだけろだ。
- ■ CTIシステム要件(夢のことです)
-
- 開発にかけていい時間は3ヶ月。もちろんお前1名。できなければクビ!
- 出来ればLinuxで動くCTI。そうすればライセンス料はかからないだろ!
- 金は10万しかださない。(後で追加された要件。後でその理由が書いてある)
- おいおい時間はない!人付けない!できなきゃクビ!おまけにLinuxで動く!勘弁してくれよ〜。
- ■ まずはCTIソフト探し
-
- 社長の紹介でアバール長崎(音声ボードメーカ)を紹介してもらい、アバール長崎の情報を元にCTIシステムに必要なミドルウェアを探しはじめた。
- アバール長崎は、蝶理情報システムのCTplusと相性が良いらしくCTplusを進められた。
- アバール長崎のサイトに他社の製品情報もあったので調べてみました。参考までに。
- これはあくまでも開発キット。ランタイム売りが可能、調べた製品と特徴を直ぐに社長に報告した。
- わたし:「どれも高いじゃないか!」とお怒りの様子。
- 社長:「どれも高いじゃないか!」とお怒りの様子。
- 社長:「うちにそんな金はない。お前もよく知っているだろ! 他に安いボードないのか!!」
- 答えは予測できてはいたのだが。やはりだめだった。結果として、金がない理由からアバール長崎はボツとなった。アバール長崎さん、ごめんなさい。しかし、無いものは無い。盗んでくるわけにもいかないので、気を取り直して違う路線で探してみる。
- アバール長崎が駄目なので残るはVBVoiceのみ。対応ボードは、"ダイアロジック、ブルックトラウト"そこで早速ネットで検索してみる。
- ダイアロジックに関する記事を見つけ読んでみると、CTの世界では、ダイアロジック社は老舗らしい。実は、この時までダイアロジック社の存在をしらなかった。そこから一気に方向転換してダイアロジックのボードを探すことになった。
- ■ ダイアロジックボード探し
-
- ダイアロジックを調べている中で分かったことだか、ダイアロジック社は1999年にインテル社に買収されており、現在はインテルの製品として売られている。
- ダイアロジックボードについて調べていくとSDKが無償提供であることが分かった。他の音声ボードはSDKを20万〜30万程で提供している。しかしダイアロジックは無償だ。これは美味しい。しかもLinuxをサポートしている。もうボードはダイアロジックで決定だ。
- 価格を調べるためインターネットでアメリカのサイトを検索してみる。
- ダイアロジックのラインナップで一番ロースペックのD/4PCIを見つけた。送料や関税手続き等の諸費用込みで円に換算して10万くらいだ。
- 早速、社長に報告。
- わたし:
- 「安いボードを見つけました。ボード10万+ミドル25万+ライセンス6万=40万です。しかもSDKは無償です。」
- またまたお怒り。
- 社長:
- 「40万どこからもってくるんだ。ボード代は仕方ないがダイアロジックのSDKは無償だろ。SDKがあるんだから作ればいいじゃないか。かりにミドルを買ったとしても製品化を検討した場合にWindowsOS代+ミドルライセンス料金+開発費用なのでコストがかさんでしまう。それにCTIを業務系で使用する場合はデータベースも必要だよ。PostgreSQLならLinux上での実績はかなり報告されている。Windowsはやめて全てLinuxで開発を進めてくれ、頼む。」
- まじかよ、一から作ったらいったいいつまで終電帰りの日が続くんだよ。まいったなー。
- ■ ボードの購入
-
- ミドルウェアの購入計画がもろくも崩れ去った。(-_-;) 自前で作るの????しかも、ボードのことを良く分かっていないので直接海外で買うのは気が進まない。しかしあたって砕けろ!!の精神でアメリカから買うことにする。早速いつもハードを購入しているショップにお願いしてアメリカから買ってもらう。
- 1週間後にはボードが届いた。意外と感動!!プラスチックのケースに入っていて、なんだかおもちゃを与えられた子供のように、うれしくなった
- ■ SDKをダウンロード
-
- ボードが到着したので、早速SDKをダウンロードしてみる。
- だが...インテルのサイトは取り扱い製品が多いこともあり、SDKはおろかダイアロジックボードのページにたどり着けないよ。まいったな。どこにあるんだ。
- いろいろ探してみるが一向に見つからない。残り少ない時間を考えるとのんびりしていられない。かと言って聞ける相手もいないし、頼りはネットだけだ。けっこう探しまくってやっとたどり着けた。
- それにしても、こう毎日コンピュータにむかってばかりだと、人恋しくなるよ。まぁ、愚痴を言っても始まらない!!とりあえずSDKが見つかってよかった、よかった。
- ■ いざインストールだ!(Windows編)
-
- WindowsのSDKをダウンロードし早速インストールしてみる。以外とすんなりインストールができた。早速動作確認のため、付属のサンプルプログラムを動かしてみる。FAXで使っている電話線をボードに差し込んで、会社の電話からFAX番号をダイヤルしてみる。
- 「ピッポッパッ」 「トゥルルルー」 「ガチャ」 「@*?#$%」
- なにやら英語のアナウンスが流れて意味は分からないが、とにかく電話を受けてアナウンスを流せることは確認できた。
- いやー、ここまでたどり着くのに時間がかかりました。それもあってか、かなり感動しました。
- 今度は別のサンプルプログラムを動かして、電話をかけてみる。会社の電話番号をダイヤルすると、すんなり電話がかかる。
- CTI、思ったより簡単なのだろうか。これならアプリケーションを作るのは割と楽かもしれないな。そう考えながら終電に揺られる。
- ■ アプリケーションの開発
-
- ダイアロジックのボードが到着し、後はアプリケーションの開発を残すのみとなった。SDKのマニュアルと付属のサンプルアプリケーションのソースを参考に、まずは基本動作を検証してみることにする。
- サンプルアプリケーションはC言語で組まれているので、それのソースから電話の着信を感知して受話器をあげることを抜粋し検証してみる。
- 「ピッポッパッ」 「トゥルルルー」 「ガチャ」
- 実際に動作しているサンプルのコードなので、もちろんだが動作する。
- 電話の着信を手始めとして、サンプルコードを参考に、音声アナウンスの再生、受けた電話の録音DTMF(ピッポッパッ)の取得等を検証していく。
- 順調に動作し検証はスムーズに進んでいるが、ここである疑問が湧いてきた。
- 「C言語で組んだら、CTIを導入するユーザ毎にアプリケーション開発が必要ではないか、このままでは導入費用が膨らんでしまい、社長の要求は満たせないな。短期間でのCTIシステムの構築も無理だな。」
- この問題をCTIミドルウェアはどう解決しているのか、再び調査をしてみる。VBVoiceはVBのコンポーネントなので、言語の違いはあれどスタンスとしては現在と同じでユーザ毎の開発が発生する。VBVoice以外の多くのCTIミドルウェアでは、スクリプトでコールフローを実現しているみたいだ。この方法ならソース=実行形式となるし、スクリプトなので開発期間の短縮も可能になるだろう。ただ、スクリプトは独自形式の構文のようで、各社オリジナルの言語のように思える。我々は新たなスクリプトエンジンを作る余裕はない。どうすればいいかと考えた結果、実力&実績のあるPerlを使うことにした。
- 具体的には、PerlからダイアロジックのAPIを呼びだす。そうすれば、電話を受けてアナウンスを再生する等の個々の要件毎の仕様をPerlスクリプトで柔軟に対応できる。
- Perlを使う&Linux環境を考慮し、WindowsにSygwinをインストールし、擬似Linux環境で開発を行うことにした。
- まずは、PerlからCライブラリをコールするためのお勉強。手始めにネットで情報収集。PerlからCライブラリをコールすることはできるが、具体的にどうすればいいか、詳細な情報が探しきれない。うーん、マニアックなページだ。読者はかなりの知識があることを前提としている内容だ。
- 更に情報を求めてキーワードを変えつつ検索を続けると、オライリーの動物シリーズ本に情報があることをつきとめた。
- 「Perlクックブック Perlの鉄人が送るレシピ集」Perlクックブックの表紙は羊でした。
- 早速Amazonで注文。Amazonを利用し始めてから、本屋にめっきり足を運ばなくなりました。みなさんはAmazonを利用しますか?話しを元にもどして、早速PerlからダイアロジックのAPIが呼び出せるよう、C言語でスタブを作成し実験してみる。
- またまた、動かないんですよ。コンパイルに失敗するんです。しかも、エラーの内容が分からない。
- Perlクックブックにもヒントらしきものが見つけられない。オライリーのサイトからサンプルコードをダウンロードし、サンプルコードを解析するとtypemapというファイルに、PerlとC言語のインターフェース、いわゆる引数とリターンバリューの型定義が必要だという情報にたどり着いた。サンプルコードを参考にtypemapに型定義をしていきます。
- 何度かエラーが出つつも、やっとコンパイル成功。
- やっと動きました。引数やリターンバリューの受け渡しも問題なくできるようになりました。これでPerlとCライブラリとのインターフェースの問題は解消されました。
- 後は、受話器をあげる、受話器をさげる、ダイヤルする等コマンド単位でAPIをコールするスタブを作成するだけだ。
- 当面の目標として
- 電話の着信を感知し
- 受話器をあげる
- WELLCOMEアナウンス&メニューを再生(音声ファイルの再生)
- 利用者が押した番号を認識する(DTMFの取得)
- 番号に割り当てた処理を実行する(1なら「ようこそ」とアナウンスする処理を実行する等)
- 結果を音声合成を使って読み上げる(1が押されました)の実現に向けて開発を進めました。
- 電話の着信やアナウンスの再生、DTMF(ピッポッパッ)の取得が問題なくできるようになりました。
- 当面の目標をクリアしたので、追加して
- 利用者の声を録音
- 利用者が複数桁のダイヤルを押しても認識できる(4桁のユーザIDのダイヤル)
- 複数桁ダイヤルの値を認識してデータベースの検索を行う(ユーザマスタの存在チェック)も確認しました。
- 問題なく動作します。
- これでVBと比べて、お客様毎の開発負荷を減らすことができるはずです。
- ■ 電話代を押えるため、何か手を打たなければ
-
- アプリケーションの開発は順調に進んできたが、動作確認でいつまでも外線を使うのはまずい。FAXが使えないし、電話代もかかる。それはまずいので、社長に擬似交換機を買ってもらう。
- 「いつまでもFAXが使えない状態はまずいので、擬似交換機を買ってもらえませんか」以外な答え。
- 「それを待っていたよ、いつまでもこの状態はまずいからな。ただし、分かっているよな。」
- インターネットで検索。
- 「分かっているよな」安いものを探せでしょう。
- 株式会社ハウの製品が安かったので問い合わせをしてみる。電話で問い合わせたところ貸し出ししてくれるとのことなので、早速申し込みをする。
- しばらくして擬似交換機が届き、早速使ってみる。
- これがまた、動かないんですよ。テスト用の電話機からダイヤルすると、プログラムで電話が鳴っていることは認識できたのですが、その後受話器をあげると、勝手に切れるんですよ。まいりました。こまったあげく、購入先に電話で問合せをしました。
- わたし:
- 「擬似交換機にテスト用の電話機と音声ボードの2つをつないで、電話機から電話をかけました。電話が鳴っていることまでは認識でき正常なのですが、受話器をあげると勝手に切れます。どうしてでしょうか?」
- 技術の方:「その時、ピーガーと、FAXの着信があったときのような音がしませんか?」
- わたし:「しました。」
- 技術の方:「その電話機と音声ボードは、ナンバーディスプレイに対応していますか?」
- わたし:「していません。」
- 技術の方:「では、擬似交換機のナンバーディスプレイのスイッチがONになっていますか?」
- わたし:「なっています。」
- 技術の方:
- 「擬似交換機のナンバーディスプレイのスイッチがONになっているのが原因です。ナンバーディスプレイは、受話器を上げたときに機器どうしが番号情報をたりとりするんですよ。それでピーガー音がするんです。お客様の状況では、機器はナンバーディスプレイに対応していないが擬似交換機には対応しているとしてスイッチをONにしている。擬似交換機はその番号情報のやりとりを期待して待っていて、それがないのでタイムアウトで回線が切れているんですよ。擬似交換機のナンバーディスプレイのスイッチをOFFにすると回線が切れる現象はでないと思います。試してみてください。」
- わたし:「ありがとうございます。早速試してみます。」
- 技術のかたの言うとおり、スイッチをOFFにすると通話ができるようになりました。これで電話代等を気にせずテストができる。これはいい。
- 早速電話し注文を行う。
- ■ 音声認識にチャレンジ
- 社長が知り合いより音声認識分野がおもしろいとの情報を仕入れてきました。
- 社長:
- 「音声認識がけっこうおもしろそうだ。CTIと組み合わせれば使い勝手の良いシステムが組めるぞ。音声認識はカーナビの行き先指示やおもちゃ系のロボットとの会話、小田急電鉄のチケット予約等で使われだしている。」
- わたし:
- 「カーナビの行き先指示は知っていましたが、チケット予約は知りませんでした。ちなみに、どこが発売しているものですか?」
- 社長:
- 「いくつかあるが、ニュアンスコミュニケーションズ、KDDI、アドバンストメディア等が有名らしい。オムロンはニュアンスコミュニケーションズのエンジンを使用していて、音声認識デモサイトも立ち上げている。デモの中に航空券の予約デモがある早速電話してみたよ。出発地、到着地の空港名を喋ると、それを認識して結果を読み上げるんだ。例えば、出発地を『はねだ』と喋るとシステムが『出発地は羽田ですか』と認識結果を読み上げる。そこで『はい』というと『到着地をどうぞ』と進むんだ。自分が話した言葉をコンピュータが認識すること、これは驚きだよ。しかもCTIで使えば、かなり便利になるはずだ。」
- わたし:「音声認識はかなり進化しているんですね。試してみる価値はありますね。」
- このようなやり取りが続き、この日からしばらくして。
- 社長:
- 「旭化成も音声認識エンジンを発売している。まずは、旭化成の音声認識エンジンを使って音声認識がCTIで使えるものか試して行こう。恐らく使えるとは思うが、実際に使ってみないと分からないからな。頼んだよ」
- こうして、わたしの音声認識への取り組みが始まったのです。旭化成よりインストールCDが届き、早速インストールを開始。まずは、サンプルコードを元に、音声認識のプログラムの習得に入ります。
- ■ 地名認識にチャレンジ
-
- 身近な地名を辞書に登録し、マイクに向かって話した地名を認識して、認識結果を画面に表示するサンプルを作成してみることにします。身近な地名は、横浜や川崎など10箇所にしました。辞書登録をして音声認識エンジンにデータを渡すためのバイナリ形式にコンバートを行います。バイナリ形式のデータのことを語彙ネットワークといいます。
- ここまでがプログラムを作成する前準備で、いよいよプログラム作成に入ります。語彙ネットワークをエンジンに渡す等の前準備をし、発声を待ちます。マイクに向かって発声すると、それをマイクのデバイスから読み込んでメモリにおきエンジンに渡して認識処理を行います。認識結果はエンジンから返されるので、認識されていれば結果を、駄目なら認識できなかった旨のメッセージを画面に表示します。完成したところで早速テスト。どうも認識率が悪い。辞書の中身やプログラムを見直してもよく分からない。
- そこで、マイクのデバイスから読み込んだ音声データそのものが悪いのではないかとうたがってみる。音声データをファイルに保存しスピーカーを通して聞いてみました。とても小さな声になっていて、何を喋ったか聞こえないのです。
- そうです、マイクのボリュームが低かったのです。マイクのボリュームをあげると認識されたのは、言うまでもありません。しかし、実際に試してみて、わたしの声は認識されが、他の人は認識されない。しかも、今回は認識されたが、次は駄目だったなど。人間の声という、不確定なものを扱う音声認識に完璧な精度を求めるものではないと言われています。音声認識のアプリケーションについてイメージがつかめたところで、音声認識は一旦ここで中断します。
- ■ いざインストールだ!(Linux編)
-
- ここまでは、Windowsに構築した擬似Linux環境で開発を進めましたが、いよいよLinux環境に移行します。擬似Linux環境を構築するタイミングで移行すれば良かったのですが、Windowsと擬似Linuxの2つが同時に使えるメリットがあったので、Linux環境への移行は先送りにしていました。2つ同時に使えるので、先に確認したWindowsのサンプルをVisualC++のデバッグモードでAPIの動作を詳細に確認しつつ、Linux環境での開発ができたのです。これはかなり使いやすかったです。
- Windows環境も残しておきたかったので、もう1つ別の中古PCを調達しそれにダイアロジックボードを装着後、Redhat Linuxのインストールを開始する。この時点でLinux環境への移行は楽勝と思っていた。SDKはLinux対応だしアプリケーションもPerlで作っている。
- Redhat Linuxが順調にインストールでき、今度はダイアロジックのSDKをインストールします。Windowsと違ってLinuxでは、LinuxStreamというプロダクトが必要らしい。まずはLinuxStramのインストール。続けてダイアロジックSDKのインストール。どちらもすんなりインストールができた。
- 順調に進んだのもここまで。悪夢の始まりはここからなのです。なんと、SDKに付属のサンプルアプリケーションがエラーを返し動作しないのです。何度実行してもエラーがでて動作しません。
- エラーを良く見ると、ダイアロジックボードを認識していないのです。参りました。SDKはインストールできたんですよ。それを認識できないって、なんでやねん。
|
| TOPへ |
|
| Home | CTI | Download | What's New | Profile | Address |
株式会社オープンコム
〒102-0072 東京都千代田区飯田橋4-8-13 山商ビル9階
TEL: 03-3263-7885 FAX: 03-3263-7889
お問合せは webinfo@opencom.co.jp まで。 |
最新更新日:
|
|
| (c) Copyright 2003 OC, Inc. All right reserved |
|
 |
「Linuxの新しい活用方法を発見」
このレポートの内容は以下になります。このレポートを無料で差し上げます。資料請求はこちら
■ はじめに
■ なぜLinux+Bayonneか
■ 弊社が提供するCTI構築
サービス
■ コスト削減が実現できるか
■ どういった使い方ができる
のか
■ 苦労しました
■ 弊社が提供するもの
■ 課題
■ お問い合わせ |
HOMEへ |