以下、本発明を具体化した一実施の形態について、図面を参照して説明する。なお、参照する図面は、本発明が採用しうる技術的特徴を説明するために用いられるものである。図示された装置の構成等は、その形態のみに限定する趣旨ではなく、単なる説明例である。
図1に示すように、本発明に係る画像表示装置(以下、「ヘッドマウントディスプレイ」または「HMD」という。)1は、投影装置(以下、「ヘッドディスプレイ」または「HD」という。)10と制御装置(以下、「コントロールボックス」または「CB」という。)50を備える。作業者は、HD10を頭部に装着し、CB50を腰ベルトや腕等に装着してHMD1を使用する。HMD1は、指示者が利用し、作業者に対する指示の情報をHMD1に送信するパーソナルコンピュータ(以下、「PC」という。図2参照)80と、無線通信または有線通信を介して接続し、システムを構成する。以下の説明において、図1の上方、下方、右斜め下方、左斜め上方、右斜め上方および左斜め下方がそれぞれ、HMD1の上方、下方、前方、後方、右方および左方である。
HD10は専用の装着具である眼鏡5に装着して使用する。HD10は、作業者が日常的に使用する眼鏡、ヘルメット、ヘッドホンなど、他の装着具に取り付けてもよい。HD10は、作業者の眼に画像光を照射する。HD10はハーネス7を介してCB50と着脱可能に接続する。CB50は、HD10を制御する。
HD10の構成について説明する。HD10は筐体2を備える。筐体2は、作業者側から見て右端側(図1における左側)にハーフミラー3を備える。ハーフミラー3は、作業者がHD10を頭部に装着したとき、作業者の眼(例えば左眼)の前方に配置される。HD10は、筐体2の内部に、画像表示部14(図2参照)と接眼光学系(図示略)を備える。画像表示部14は、CB50からハーネス7を介して送信される映像信号に基づいて画像を表示する。画像表示部14は、例えば、液晶素子等の空間変調素子および光源である。画像表示部14は、画像信号に応じた強度のレーザ光を2次元走査して画像表示を行う網膜走査型表示部や、有機EL(Organic Electro-luminescence)素子等であってもよい。
接眼光学系は、画像表示部14に表示された画像を示す画像光を、作業者の眼に導くために集光する。接眼光学系から射出された画像光は、筐体2の左側に設けられたハーフミラー3によって少なくとも一部(例えば半分)が反射され、作業者の一方(例えば左)の眼球(図示略)に入射する。ハーフミラー3は外界の実像からの光の少なくとも一部を透過するので、作業者は、自己の視野において実像(外界の風景)に重畳して画像を見ることができる。
眼鏡5は、HD10を作業者の頭部に保持するための構成である。眼鏡5は、フレーム6において、左眼用レンズを支えるリム部の上面右端(作業者から見て上面左端)に、支持部4を備える。支持部4は、HD10の筐体2を保持し、眼鏡5に取り付ける。支持部4は、筐体2の保持位置を上下方向および左右方向に調整することができる。作業者は、眼球の位置に合わせた位置にハーフミラー3を配置することができる。
眼鏡5は、フレーム6において、右耳に掛けるテンプル部に、マイク17およびイヤホン18を内蔵するヘッドセット16を備える。詳細は後述するが、作業者は、HMD1の各種操作等の実行命令(コマンド)としてあらかじめ登録された登録コマンドに対応する操作ワードをヘッドセット16のマイク17へ向けて発声することによって、使用時における各種操作等を行うことが可能である。ヘッドセット16には骨伝導型のものを用いてもよい。なお、眼鏡5自体の形状は通常の眼鏡に類似のため、詳細な説明は省略する。
CB50の構成について説明する。CB50は、略直方体状で縁部を丸めた箱型の筐体を有する。CB50は電源ランプ63を内蔵する電源スイッチ62を含む操作部61を備える。作業者は、電源スイッチ62を操作し、HMD1の電源をオンまたはオフにすることができる。作業者は、HD10における各種設定や、使用時における各種操作等を、操作部61を介して行うことが可能である。
CB50は、公知の無線通信を介してPC80と接続し、PC80との間で音データや画像データを含む各種データの送受信を行う。CB50は有線通信のインターフェイスを備え、通信ケーブルを用いてネットワーク9(図2参照)に接続し、PC80と接続してもよい。あるいはCB50は、USBインターフェイスを備え、USBケーブルを用い、PC80に接続してもよい。なお、後述するPC80は、パーソナルコンピュータであるが、スマートフォンやタブレット型携帯端末など、その他の機器であってもよい。
図2を参照し、HMD1の電気的構成について説明する。HD10は、HD10全体の制御を司るCPU11を備える。CPU11は、RAM12、プログラムROM13、画像表示部14、インターフェイス15、および接続コントローラ19と電気的に接続する。CPU11は、インターフェイス15を介してヘッドセット16と電気的に接続する。RAM12は、各種データを一時的に記憶する。プログラムROM13は、CPU11が実行する各種プログラム等を記憶する。各種プログラムは、HD10の出荷時にプログラムROM13に記憶される。なおCPU11は、後述するCB50のフラッシュROM54に記憶されたプログラムも実行することができる。
画像表示部14は前述の通り、映像信号に基づいて画像を表示する。インターフェイス15はヘッドセット16に接続し、信号の入出力を制御する。接続コントローラ19は、ハーネス7を介してCB50の接続コントローラ58に接続し、有線通信を行う。ヘッドセット16はマイク17およびイヤホン18を備える。ヘッドセット16はマイク17が受け取るアナログの音をデジタルの音データに変換し、インターフェイス15を介してCPU11に送信する。ヘッドセット16はインターフェイス15を介してCPU11から受信するデジタルの音データをアナログの音に変換し、イヤホン18から出力する。なお、HD10は、ヘッドセット16の代わりに、筐体2にマイクとスピーカを内蔵してもよい。
CB50の電気的構成について説明する。CB50は、CB50全体の制御を司るCPU51を備える。CPU51は、RAM52、プログラムROM53、フラッシュROM54、インターフェイス55、ビデオRAM56、画像処理部57、接続コントローラ58、および無線通信部59と電気的に接続する。
RAM52は、各種フラグ、各種データ等を一時的に記憶する。後述する音声認識プログラムの実行において、CPU51は、RAM52に、ローカル音データ記憶エリア65と、リモート音データ記憶エリア66の記憶領域を確保する。ローカル音データ記憶エリア65は、HD10のマイク17が収音する音をデジタル変換した音データ(以下、「ローカル音データ」という。)を所定の記憶容量分、FIFO処理で記憶する。リモート音データ記憶エリア66は、無線通信部59を介してPC80から受信する音データ(以下、「リモート音データ」という。)を所定の記憶容量分、FIFO処理で記憶する。なお、本実施形態では、音をデータ化したものを「音データ」といい、ヒトの発声する音声をデータ化したものを「音声データ」という。よって、音声データは音データに含まれる。
プログラムROM53は、CPU51が実行する各種プログラム、各種プログラムが使用するフラグやデータの初期値等を記憶する。プログラムROM53は、少なくとも、メインプログラム記憶エリア67と、音声認識プログラム記憶エリアの記憶領域を確保している。メインプログラム記憶エリア67は、CPU51がHMD1の各種動作を制御するために実行するメインプログラムを記憶する。なお、メインプログラムはマルチタスク型の基本ソフト(OS)であり、音声認識プログラムを含む各種プログラムを並列処理によって実行する。音声認識プログラム記憶エリア68は、CPU51が、作業者の発声する音声に基づいてHMD1の各種操作等を行うための音声認識プログラム(後述)を記憶する。音声認識プログラムは、メインプログラムに従ってCPU51が実行する各種プログラムのうちの一つである。メインプログラムおよび音声認識プログラムを含む各種プログラムは、HMD1の出荷時にプログラムROM53に記憶される。なおCPU51は、フラッシュROM54に記憶されたプログラムも実行可能である。
フラッシュROM54は、CB50の出荷後にインストールされた各種プログラム、各種プログラムが使用するフラグやデータの設定値等を記憶する。インターフェイス55は電源スイッチ62および電源ランプ63を含む操作部61に接続し、作業者による操作の入力信号やランプの点灯信号等の入出力を行う。画像処理部57は、HD10の画像表示部14に表示する画像を形成する処理を行う。ビデオRAM56は、画像処理部57が形成した画像を画像表示部14に表示するための映像信号を生成するため、画像を仮想的に表示した仮想画面を記憶領域内に形成する。接続コントローラ58は、ハーネス7を介してHD10の接続コントローラ19に接続し、有線通信を行う。無線通信部59は、ネットワーク9のアクセスポイント(図示略)へ無線で接続し、ネットワーク9に接続する他の機器(本実施形態ではPC80)と通信を行う。なお、無線通信部59はネットワーク9を介さずに、直接PC80と無線による接続を行ってもよい。
PC80は、指示者が使用する公知のパーソナルコンピュータである。PC80は、PC80全体の制御を司るCPU81を備える。CPU81は、データバスを介してROM82、RAM83、および入出力バス(以下、「I/Oバス」という。)85と電気的に接続する。ROM82は、CPU81が実行するBIOS等のプログラムを記憶する読出し専用の記憶装置である。RAM83は、データを一時的に記憶する読み書き可能な記憶装置である。
I/Oバス85には、ハードディスクドライブ(以下、「HDD」という。)84、通信部86、音声制御部87、および表示制御部88が接続されている。HDD84は、OSやプログラム等がインストールされる記憶装置である。通信部86は、有線通信、またはアクセスポイント(図示略)を介して無線通信でネットワーク9へ接続する。音声制御部87はマイク90およびイヤホン91を内蔵するヘッドセット89に接続し、PC80を利用する指示者の音声の入出力を制御する。表示制御部88は、画像等をディスプレイ92に表示するための描画処理を行う。また、図示しないが、I/Oバス85にはマウスやキーボード等の入力デバイスも接続されている。
図3〜図9を参照し、音声認識プログラムについて説明する。HMD1は、上記したように、あらかじめプログラムROM53に音声認識プログラムを記憶した状態で出荷される。音声認識プログラムは、HMD1のCB50のCPU51が実行するプログラムである。音声認識プログラムを実行したCPU51は、作業者が発声した音声の認識処理を行う。CPU51は、作業者がHMD1の各種操作等の登録コマンド(後述)に対応する操作ワードを発声した場合、登録コマンドに応じたHMD1の各種操作等を実行する。音声認識プログラムは、本実施形態では6つのプログラムモジュールによって構成される。具体的には、音声認識プログラムは、ローカル音データ分析処理、リモート音データ分析処理、音声認識処理、会話検出処理、重畳判定処理、およびコマンド検出処理(図3〜図8参照)によって構成される。CPU51は、各プログラムモジュールを並列処理によって実行する。
音声認識プログラムで使用する各種フラグおよびタイマーについて説明する。「第一発声フラグ」は、HD10のマイク17によって収音されたローカル音データに含まれる音声データが、作業者の発声した音声に基づく音声データである場合に成立し、オンとなるフラグである。第一発声フラグは、ローカル音データから作業者の音声データを切り出して音声認識を行う音声認識処理(図5参照)を実行するトリガーとして使用される。また第一発声フラグは、会話検出処理(図6参照)や重畳判定処理(図7参照)において、各種処理の判断条件としても使用される。
「第二発声フラグ」は、HD10のマイク17によって収音されたローカル音データに含まれる音声データが、作業者ではない他者(指示者もしくは第三者)の発声した音声に基づく音声データである場合に成立し、オンとなるフラグである。第二発声フラグは、会話検出処理(図6参照)や重畳判定処理(図7参照)において、各種処理の判断条件として使用される。なお、第二発声フラグが成立する状況として、例えば、作業者の近くで作業者と他者(指示者もしくは第三者)とが会話し、作業者と他者の音声がマイク17に収音され、ローカル音データが生成される場合がある。音声認識プログラムにおいて、CPU51は、声紋認識を行い、ローカル音データに基づく音声を発声した発話者が作業者ではないと認識した場合に、第二発声フラグをオンにする。
「第三発声フラグ」は、ネットワーク9を介して無線通信部59が受信したリモート音データに音声データが含まれる場合に成立し、オンとなるフラグである。第三発声フラグは、上記同様、会話検出処理(図6参照)や重畳判定処理(図7参照)において、各種処理の判断条件として使用される。なお、リモート音データに含まれる音声データは、指示者もしくは第三者が発声した音声に基づく音声データであり、作業者ではない。
このようにCPU51は、音声認識プログラムにおいて、音データに含まれる音声データに基づく音声を発声した者が作業者であるか否かによって異なる発声フラグの成立を行っている。作業者ではない他者には指示者も含まれるため、以下では便宜上、作業者を「第一ユーザ」とし、指示者を含む他者を「第二ユーザ」として、音声認識プログラムの説明を行う。
「認識結果取得フラグ」は、第一ユーザの発声に区切りがつき、CPU51が、ローカル音データから第一ユーザの音声データを切り出して音声認識を行った場合に成立し、オンとなるフラグである。認識結果取得フラグは、音声データの認識結果に基づき登録コマンド(後述)の検出を行うコマンド検出処理(図8参照)の実行におけるトリガーとして使用される。なお、ローカル音データに基づく第一ユーザの音声が連続する2回の無声期間に挟まれた場合に、CPU51は、第一ユーザの発声に区切りがついたものと判断する。無声期間とは、音データに基づく音の周波数にヒトの発声する音声の周波数帯が含まれていない期間をいう。また、第一ユーザと第二ユーザとが同時に発声しており無声期間が生じていない場合においても、第一ユーザの発声が途切れた場合に、CPU51は、第一ユーザの発声に区切りがついたものと判断する。
「会話フラグ」は、CPU51が、第一ユーザと第二ユーザとが会話を行っていると判断した場合に成立し、オンとなるフラグである。会話フラグは、コマンド検出処理において、コマンドの実行に係る判断処理の判断条件として使用される。
「会話検出タイマーT1」は、会話検出処理(図6参照)において、会話フラグをオフにする条件として、第一ユーザと第二ユーザとが行う会話の途切れの検出に用いられる。CPU51は、第一ユーザまたは第二ユーザの発声に区切りがつくと会話検出タイマーT1をスタートし、あらかじめ設定された会話検出時間βが経過する前に第二ユーザまたは第一ユーザが発声した場合、会話が継続すると判断する。
「発声重畳タイマーT2」は、重畳判定処理(図7参照)において、第一ユーザの発声と第二ユーザの発声とが重畳した場合に、その重畳が、会話における発声の語尾と語頭との単なる重なりであるか否かを判定するのに用いられる。CPU51は、第一ユーザと第二ユーザの発声が重なると発声重畳タイマーT2をスタートする。例えば会話中に、第一ユーザの発声と第二ユーザの発声とが一部被っただけであれば、第一ユーザと第二ユーザの発声の重畳は、あらかじめ設定された重畳許容時間γが経過する前に解消する。発声重畳タイマーT2による判定処理は、重畳許容時間γが経過しても発声の重なりが続く場合、第一ユーザと第二ユーザとがもはや会話を行っていないとみなし、CPU51が会話フラグをオフにするために行われる。
「再発話タイマーT3」は、コマンド検出処理(図8参照)において、第一ユーザと第二ユーザとが会話中に、第一ユーザの発声した単語が操作ワードであった場合に、第二ユーザとの会話の流れでたまたま発声した単語であるか否か判定するために用いられる。CPU51は、登録コマンド(後述)の検出時に会話中であった場合、再発話タイマーT3をスタートし、あらかじめ設定された再発話受付時間αが経過する前に同一の登録コマンドが検出された場合に、第一ユーザが操作ワードを発声したと判断する。再発話タイマーT3による判定処理は、操作ワードを発声したにも関わらず登録コマンドが実行されなかった場合、第一ユーザが、同じ操作ワードを再度発声する可能性があるため行われる。
「登録コマンド」は、HMD1の各種操作等を実行する制御信号を表す制御コードに対応付けられた実行命令(コマンド)であり、あらかじめ登録されたコマンドである。HMD1の各種操作等の例として、画像表示部14に表示する画像の切り換え(ファイルオープン、ページめくり等)、拡大、縮小、スクロール、回転、輝度変更などが挙げられる。登録コマンドは、例えば上記例にそれぞれ対応付けられたコマンドである。本実施形態のCPU51は、第一ユーザの音声データをテキスト変換し、登録コマンドと比較する。本実施形態における登録コマンドは、あらかじめコマンド辞書に登録したテキストデータであり、コマンドを実行するために他の制御プログラム(図示略)に対して出力する制御信号を表す制御コードと対応付けられている。なお、登録コマンドは、音声データであってもよい。
前述したように、メインプログラムはマルチタスク型のOSであり、音声認識プログラムを含む各種プログラムを並列処理によって実行する。上記したフラグやタイマー等は、各プログラムモジュール間で共有して利用される。図3〜図8に示す各プログラムモジュールのフローチャート中には省略するが、CPU51は、割込みを禁止または解除したり、データをスタックへ退避または復帰したりする処理等、排他制御を行っている。なお、メインプログラムがマルチタスク型のOSでない場合、各プログラムモジュールは、例えば音声入力などハードウェアからのイベント割込みで駆動してもよい。
次に、音声認識プログラムの実行に伴いCPU51が行う処理について説明する。第一ユーザ(作業者)がHMD1のCB50に設けられた電源スイッチ62を操作すると、CPU51は起動時における所定の動作をメインプログラムの実行に従って行う。CPU51は無線通信部59を稼働させ、ネットワーク9に接続する。CPU51は、音声認識プログラムを含む各種プログラムを実行する。
音声認識プログラムにおいて、CPU51は、起動時に行う初期設定処理(図示略)を行う。CPU51は、RAM52に記憶するフラグやデータを初期化し、プログラムROM53に記憶されているフラグやデータの初期値と、フラッシュROM54に記憶されているフラグやデータの設定値をRAM52に書き込む。CPU51は音声認識プログラムの初回実行時にフラッシュROM54にコマンド辞書を構築する。CPU51はRAM52に、ローカル音データ記憶エリア65とリモート音データ記憶エリア66の記憶領域を確保する。本実施形態では、第一ユーザは音声認識プログラムの実行中に、音声認識プログラムの動作をカスタマイズする各種設定を設定画面(図示略)で行うことができる。例えば、第一ユーザは任意のコマンドを制御コードに対応付けてコマンド辞書に登録することができる。また、第一ユーザは、後述する声紋認識処理(図示略)の有効化または無効化を設定することができ、有効化する場合、あらかじめ第一ユーザの声紋を登録することができる。CPU51は、設定内容をRAM52のフラグやデータに反映し、フラッシュROM54に設定値として記憶する。CPU51は、ネットワーク9を介してPC80と接続する。CPU51は、ヘッドセット16のマイク17で収音した音の音データ(ローカル音データ)を、ネットワーク9を介してPC80に送信する処理を開始する。CPU51は、ネットワーク9を介してPC80から受信した音データ(リモート音データ)を、ヘッドセット16のイヤホン18から出力する処理を開始する。
CPU51は上記の初期設定処理が終了すると、音声認識プログラムを構成する6つのプログラムモジュールを並行して実行する。図3を参照し、ローカル音データ分析処理について説明する。ローカル音データ分析処理において、CPU51は、ヘッドセット16からローカル音データを受信し、RAM52のローカル音データ記憶エリア65に保存する処理を開始する(S11)。CPU51は、RAM52に記憶したローカル音データを分析する。CPU51は音の分析処理を行う公知のプログラムモジュール(図示略)を実行し、ローカル音データが表す音の周波数を検出する(S13)。CPU51は、分析したローカル音データが表す音の周波数に、ヒトの発声する音声の周波数帯が含まれない場合、マイク17への音声入力はないと判断し(S15:NO)、S35に処理を進める。CPU51は、第一ユーザが電源スイッチ62を操作した場合に実行するシステム終了処理(図示略)の実行が開始されていなければ(S35:NO)、S13に処理を戻し、RAM52に保存された新たなローカル音データの分析を行う。
S13における音の分析処理の結果、ローカル音データが表す音の周波数に音声の周波数帯が含まれる場合、CPU51は、マイク17への音声入力があると判断し(S15:YES)、S17に処理を進める。初期設定において声紋認識処理(図示略)が無効化されている場合(S17:NO)、CPU51は、ローカル音データに基づく音声が第一ユーザ(作業者)の発声した音声であるとみなし、第一発声フラグをオンにし(S19)、第二発声フラグをオフにして(S21)、S29に処理を進める。声紋認識処理が有効化されている場合(S17:YES)、CPU51は、声紋認識処理を行う公知のプログラムモジュール(図示略)を実行する。CPU51は、ローカル音データに基づく音声の声紋が、あらかじめ登録された第一ユーザの音声の声紋と一致するか否か判断する(S23)。ローカル音データに基づく音声の声紋が第一ユーザの音声の声紋と一致する場合(S23:YES)、CPU51は、第一発声フラグをオンにし(S19)、第二発声フラグをオフにして(S21)、S29に処理を進める。一方、ローカル音データに基づく音声の声紋が第一ユーザの音声の声紋と一致しない場合(S23:NO)、CPU51は、第一ユーザの近くで第二ユーザ(指示者もしくは第三者)が発声し、マイク17が収音した音声であるとみなす。CPU51は、第一発声フラグをオフにし(S25)、第二発声フラグをオンにして(S27)、S29に処理を進める。
S29において、CPU51は、上記した音の分析処理を行うプログラムモジュールを実行し、ローカル音データが表す音の周波数を検出する(S31)。CPU51は、分析したローカル音データが表す音の周波数に、ヒトの音声の周波数帯が含まれる場合、第一ユーザまたは第二ユーザが発声中であると判断し(S31:NO)、S17に処理を戻す。CPU51は、第一ユーザまたは第二ユーザが発声している間、S17〜S31の処理を繰り返して実行し、第一ユーザの発声に対応する第一発声フラグと、ローカルでの第二ユーザの発声に対応する第二発声フラグのオン・オフを行う。
ローカル音データが表す音の周波数に、ヒトの音声の周波数帯が含まれない場合、CPU51は、第一ユーザおよび第二ユーザが発声を終了し、発声のない無声期間であると判断し(S31:YES)、S33に処理を進める。CPU51は、第一発声フラグおよび第二発声フラグをそれぞれオフにして(S33)、S35に処理を進める。CPU51は、システム終了処理が実行されていなければ(S35:NO)、上記同様、S13〜S35の処理を繰り返して実行し、新たに保存されたローカル音データの分析結果に基づいて、第一発声フラグおよび第二発声フラグのオン・オフを行う。S35において、システム終了処理が実行されている場合(S35:YES)、CPU51は、ヘッドセット16から受信するローカル音データの保存処理を終了し(S37)、ローカル音データ分析処理の実行を終了する。
図4を参照し、リモート音データ分析処理について説明する。リモート音データ分析処理において、CPU51は、ネットワーク9を介して無線通信部59がPC80から受信するリモート音データを、RAM52のリモート音データ記憶エリア66に保存する処理を開始する(S41)。CPU51は、RAM52に記憶したリモート音データの分析を、上記同様、音の分析処理を行うプログラムモジュールを実行して行い、リモート音データが表す音の周波数を検出する(S43)。CPU51は、分析したリモート音データが表す音の周波数に、ヒトの発声する音声の周波数帯が含まれない場合、PC80から受信したリモート音データに第二ユーザの音声は含まれないと判断し(S45:NO)、S55に処理を進める。CPU51は、システム終了処理(図示略)の実行が開始されていなければ(S55:NO)、S43に処理を戻し、RAM52に保存された新たなリモート音データの分析を行う。
S43における音の分析処理の結果、リモート音データが表す音の周波数に音声の周波数帯が含まれる場合、CPU51は、第二ユーザの音声がリモート音データに含まれると判断し(S45:YES)、S47に処理を進める。リモート音データに基づく音声は第二ユーザ(指示者もしくは第三者)の発声した音声であるので、CPU51は、第三発声フラグをオンにする(S47)。CPU51は、音の分析処理を行うプログラムモジュールを実行し、リモート音データが表す音の周波数を検出する(S49)。CPU51は、分析したローカル音データが表す音の周波数に、ヒトの音声の周波数帯が含まれる場合、第二ユーザが発声中であると判断し(S51:NO)、S77に処理を戻す。CPU51は、第二ユーザが発声している間、S47〜S51の処理を繰り返して実行し、リモートでの第二ユーザの発声に対応する第三発声フラグがオンの状態を維持する。
リモート音データが表す音の周波数に、ヒトの音声の周波数帯が含まれない場合、CPU51は、リモートの第二ユーザが発声を終了し、発声のない無声期間であると判断し(S51:YES)、S53に処理を進める。CPU51は、第三発声フラグをオフにする(S53)。CPU51は、システム終了処理が実行されていなければ(S55:NO)、上記同様、S13〜S35の処理を繰り返して実行し、新たに保存されたリモート音データの分析結果に基づいて、第三発声フラグのオン・オフを行う。S55において、システム終了処理が実行されている場合(S55:YES)、CPU51は、PC80から受信するリモート音データの保存処理を終了し(S57)、リモート音データ分析処理の実行を終了する。
図5を参照し、音声認識処理について説明する。音声認識処理において、CPU51は、第一ユーザの発声に基づく第一発声フラグがオンであるか否か判断し、オフである場合には(S61:NO)、S73に処理を進める。CPU51は、システム終了処理が実行されていなければ(S73:NO)、S61に処理を戻す。ローカル音データ分析処理(図3参照)で第一発声フラグがオンになると(S61:YES)、CPU51は、第一ユーザの音声入力が開始されたものして、このタイミングを入力期間の開始時期に設定する。CPU51は、第一発声フラグがオフであるか否か判断するS63の処理を繰り返して行い(S63:NO)、第一発声フラグが再びオフになるのを待つ。ローカル音データ分析処理で第一発声フラグがオフになると(S63:YES)、CPU51は、第一ユーザの音声入力が終了したものして、このタイミングを入力期間の終了時期に設定する。
CPU51は、RAM52のローカル音データ記憶エリア65に保存されたローカル音データから、入力期間(すなわち第一発声フラグがオンであった期間)の音データを切り出して(S65)、RAM52の作業用の記憶領域(ワークエリア)に保存する。CPU51は、音声認識処理を行う公知のプログラムモジュール(図示略)を実行し、切り出した音データ、すなわち第一ユーザの音声データに対する音声認識を行う(S67)。音声認識処理において、CPU51は、認識した音声データをテキストデータに変換して出力する。CPU51は、変換したテキストデータをRAM52のワークエリアに保存し(S69)、後述するコマンド検出処理に対して第一ユーザの音声に対する認識がなされたことを報せる認識結果取得フラグをオンにする(S71)。CPU51は、システム終了処理が実行されていなければ(S73:NO)、上記同様、S61〜S73の処理を繰り返して実行し、入力期間ごと、すなわち第一ユーザの発声に区切りがつくごとに、第一ユーザの音声データに対する音声認識を行う。S73において、システム終了処理が実行されている場合(S73:YES)、CPU51は、音声認識処理の実行を終了する。
図6を参照し、会話検出処理について説明する。会話検出処理において、CPU51は、会話フラグをオフにして初期状態にする(S81)。CPU51は、第一発声フラグ、第二発声フラグ、第三発声フラグのうちのいずれかの発声フラグがオンであるか判断する(S83)。第一発声フラグ、第二発声フラグおよび第三発声フラグがいずれもオフである場合(S83:NO)、CPU51はS107に処理を進める。CPU51は、システム終了処理が実行されていなければ(S107:NO)、S83に処理を戻し、いずれかの発声フラグがオンになるのを待つ。
いずれかの発声フラグがオンになると(S83:YES)、CPU51は、オンになった発声フラグが第一発声フラグ、第二発声フラグおよび第三発声フラグのうちのいずれの発声フラグであるかを示す情報を、RAM52に記憶する。すなわちCPU51は、現在発声を行っている発話者に関する情報として、オンになった発声フラグの情報を取得する(S85)。CPU51は、取得した発声フラグがオンである間、その発声フラグがオフになったか否か判断するS87の処理を繰り返して行い(S87:NO)、現在の発話者が発声を終了するのを待つ。取得した発声フラグがオフになると(S87:YES)、CPU51は、発話者による発声が終了したものして、会話検出タイマーT1を0にセットして、計時をスタートする(S89)。
CPU51は、再度、第一発声フラグ、第二発声フラグ、第三発声フラグのうちのいずれかの発声フラグがオンであるか判断する(S91)。第一発声フラグ、第二発声フラグおよび第三発声フラグがいずれもオフである場合(S91:NO)、CPU51は、会話検出タイマーT1の値が会話検出時間βより小さいか否か判断する(S93)。T1がβよりも小さい場合(S93:YES)、CPU51は、システム終了処理の実行の有無を判断する(S95)。システム終了処理が実行されていなければ(S95:NO)、CPU51は処理をS91に戻し、次の発話者が発声を開始することによって、いずれかの発声フラグがオンになるのを待つ。
S91〜S95の処理を繰り返して実行する間に、いずれかの発声フラグがオンになった場合(S91:YES)、CPU51は、次の発話者が発声を開始したものとして、S85で行った処理と同様に、オンになった発声フラグの情報を取得する(S97)。CPU51は、今回取得した発声フラグの情報が、前回取得した発声フラグの情報とは異なる情報であるか否か判断する(S99)。今回取得した発声フラグの情報が、前回取得した発声フラグの情報と異なる場合とは、前回の発話者が発声を終了し、会話検出時間βが経過する前に異なる発話者が発声を開始した場合である。具体的に、例えば図9に示すように、P1時に第一ユーザが発声を開始し、P2時に発声を終了してから、会話検出時間βが経過するP4時よりも前のP3時に、第二ユーザが発声を開始した場合である。図6に示すように、この場合(S99:YES)、CPU51は、後述するコマンド検出処理に対して第一ユーザと第二ユーザとが会話中であることを報せる会話フラグをオンにして(S101)、S87に処理を戻す。一方、今回取得した発声フラグの情報が、前回取得した発声フラグの情報と同じである場合(S99:NO)、CPU51は、同じ発話者が続けざまに発声しているものとして、そのままS87に処理を戻す。
CPU51は、上記同様、今回取得した発声フラグの情報に基づき発話者の発声終了を待ち(S87:NO)、発声が終了すると(S87:YES)、会話検出タイマーT1を再スタートする(S89)。そして、S91〜S95の処理を繰り返して実行する間に、会話検出タイマーT1の計時が進み、T1がβ以上となった場合(S93:NO)、CPU51は、会話フラグをオフにする(S103)。T1がβ以上となる場合とは、発話者の発声終了後、会話検出時間βが経過しても、次の発話者による発声が開始されず、第一ユーザと第二ユーザの会話が終了したとみなされる場合である。具体的に、例えば図9に示すように、P5時に第二ユーザの発声が終了した後、会話検出時間βが経過するP6時までに、第一ユーザもしくは第二ユーザが発声を開始せず、会話が途切れた場合である。図6に示すように、CPU51は、会話検出タイマーT1の計時をストップし、S107に処理を進める。上記同様、システム終了処理が実行されていなければ(S107:NO)、CPU51はS83に処理を戻す。いずれかの発声フラグがオンになるのを待つ間に、S95またはS107において、システム終了処理が実行されている場合(S95:YESまたはS107:YES)、CPU51は、会話検出処理の実行を終了する。
図7を参照し、重畳判定処理について説明する。重畳判定処理において、CPU51は、第一発声フラグがオンであり、且つ、第二発声フラグまたは第三発声フラグの少なくとも一方がオンであるか否か判断する(S111)。第一発声フラグがオフである場合、または、第二発声フラグおよび第三発声フラグが共にオフである場合(S111:NO)、CPU51はS123に処理を進める。CPU51は、システム終了処理が実行されていなければ(S123:NO)、S111に処理を戻し、発声フラグの状態に基づく判断処理を行う。
例えば、第一ユーザと第二ユーザとが会話を行っており、第一ユーザの発声が終了する前に第二ユーザが発声を開始し、第一ユーザと第二ユーザの発声が被る場合がある。この場合、第一発声フラグはオンとなり、且つ、第二発声フラグおよび第三発声フラグの少なくとも一方がオンとなる(S111:YES)。CPU51は、第一ユーザと第二ユーザとが同時に発声しているものとして、発声重畳タイマーT2を0にセットして、計時をスタートする(S113)。
CPU51は、発声重畳タイマーT2の値が重畳許容時間γより小さいか否か判断する(S115)。T2がγよりも小さい場合(S115:YES)、CPU51は、第一発声フラグがオンであり、且つ、第二発声フラグまたは第三発声フラグの少なくとも一方がオンであるか否か判断する(S117)。すなわち、S117において、CPU51は、第一ユーザと第二ユーザの発声が被った状態が継続しているか否か、発声フラグの状態に基づく判断処理を行う。第一発声フラグがオンであり、且つ、第二発声フラグまたは第三発声フラグの少なくとも一方がオンであって、第一ユーザと第二ユーザの発声が被った状態が継続している場合(S117:YES)、CPU51はS115に処理を戻す。
重畳許容時間γが経過する前に、第一発声フラグがオフとなるか、第二発声フラグおよび第三発声フラグが共にオフとなった場合(S117:NO)、CPU51はS121に処理を進める。第一ユーザと第二ユーザの発声の被りは、重畳許容時間γ内に終了したことから、会話において発話者が切り替わる場合に生じ得る発声の被りであったものとみなすことができる。具体的に、例えば図9に示すように、P7時に第一ユーザが発声を開始し、発声を終了する前のP8時に第二ユーザが発声を開始すると、第一発声フラグと第二または第三発声フラグとが共にオンになり、CPU51は発声重畳タイマーT2をスタートする。第一ユーザはP8時より後のP9時に発声を終了するが、この時点で第二ユーザが発声を行っているので、CPU51は会話検出処理(図6参照)のS101での処理で会話フラグをオンにする。重畳許容時間γが経過するP10時よりも前のP9時に第一ユーザが発声を終了すると、会話における発声が被りであるとみなされ、CPU51は、P10時以降も発声フラグをオンの状態に維持する。図7に示すように、CPU51は、発声重畳タイマーT2の計時をストップし(S121)、S123に処理を進め、上記同様、システム終了処理が実行されていなければ(S123:NO)、S111に処理を戻す。
S115、S117の処理を繰り返して実行する間に、発声重畳タイマーT2の計時が進み、T2がγ以上となった場合(S115:NO)、CPU51は、会話フラグをオフにして(S119)、S121に処理を進める。例えば、第一ユーザと第二ユーザとがそれぞれ任意に発声を行っており、会話として成り立っていない場合がある。このような場合であっても、CPU51は、会話検出処理(図6参照)において、第一ユーザと第二ユーザとが会話中であると判断し、会話フラグをオンにする場合がある。CPU51は、重畳許容時間γが経過しても第一ユーザと第二ユーザの発声が被った状態が継続する場合、もはや会話が行われていないとみなし、会話フラグをオフにする。具体的に、例えば図9に示すように、P16時に第一ユーザが発声を開始し、P17時に第二ユーザも発声を開始すると、第一発声フラグと第二または第三発声フラグとが共にオンになり、CPU51は発声重畳タイマーT2をスタートする。重畳許容時間γが経過するP18時においても第一発声フラグと第二または第三発声フラグとが共にオンの状態が維持されていれば、CPU51は、会話フラグをオフにする。図7に示すように、S111、S123の処理を繰り返して実行する間に、S123において、システム終了処理が実行されている場合(S123:YES)、CPU51は、重畳判定処理の実行を終了する。
図8を参照し、コマンド検出処理について説明する。コマンド検出処理において、CPU51は、認識結果フラグがオンであるか否か判断する(S131)。音声認識処理(図5参照)において、第一ユーザの音声データに対する音声認識がまだ行われておらず、認識結果取得フラグがオフである場合(S131:NO)、CPU51は、S133に処理を進める。CPU51は、再発話タイマーT3が作動中であるか否か判断し、作動中でなければ(S133:NO)、S137に処理を進める。CPU51は、CPU51は、システム終了処理が実行されていなければ(S137:NO)、S131に処理を戻し、S131、S133、S137の処理を繰り返して実行し、認識結果取得フラグがオンになるのを待つ。
S131において、認識結果取得フラグがオンであった場合(S131:YES)、CPU51は、認識結果取得フラグをオフにして(S141)、S143に処理を進める。CPU51は、再発話タイマーT3が作動中でなければ(S143:NO)、音声認識処理(図5参照)においてRAM52のワークエリアに保存されたテキストデータを、単語Aとして取得する(S145)。CPU51は、単語Aを、フラッシュROM54に構築したコマンド辞書に登録された登録コマンドと比較する(S147)。単語Aが登録コマンドに含まれない場合(S149:NO)、第一ユーザは操作ワードを発声しておらず、CPU51は処理をS131に戻す。単語Aが登録コマンドに含まれる場合(S149:YES)、CPU51は、会話フラグがオンであるか否か判断する(S151)。会話フラグがオフである場合(S151:NO)、CPU51は、第一ユーザが操作ワードを発声したと判断し、単語Aに対応するコマンドを実行してコマンドに応じた制御信号を出力した後(S163)、S131に処理を戻す。
S151において、会話フラグがオンであった場合(S151:YES)、CPU51は、現在、第二ユーザが発声中であるかについて、第二発声フラグまたは第三発声フラグの少なくとも一方がオンであるか否かによって判断する(S153)。第二発声フラグまたは第三発声フラグの少なくとも一方がオンであり、第二ユーザが発声中であれば(S153:YES)、CPU51は、処理をS163に進め、単語Aに対応するコマンドを実行する(S163)。第一ユーザは、第二ユーザと会話中であっても、操作ワードを発声してHMD1の操作を行いたい場合がある。操作ワードは通常、単語であるため、本実施形態では、重畳許容時間γは、操作ワードの発声にかかる時間よりも長く設定されており、重畳判定処理(図7参照)において会話フラグはオンの状態に維持される。具体的に、例えば図9に示すように、第二ユーザがP8時からP15時まで発声を行い、その発声中であるP12時に、第一ユーザが操作ワードを発声すると、CPU51は発声重畳タイマーT2をスタートする。操作ワードの発声時間が短く、重畳許容時間γが経過するP14時よりも前のP13時に終了すると、CPU51は会話フラグをオフにしない。故に、図8に示すように、CPU51は、会話中であり(S151:YES)、第二ユーザの発声中に(S153:YES)、第一ユーザが操作ワードを発声した場合、対応するコマンドを実行することができる(S163)。
第一ユーザが操作ワードを発声し、登録コマンドが検出されたときに(S149:YES)、会話中であり(S151:YES)、第二ユーザが発声していなければ(S153:NO)、CPU51は、ワークエリアに単語Aを記憶する(S155)。第二ユーザとの会話の流れで第一ユーザが発声した単語がたまたま操作ワードと同じ単語であった可能性があるため、CPU51は、第一ユーザが同じ操作ワードを発声し、同じ登録コマンドを再度検出するため、単語Aを記憶する。CPU51は、再発話タイマーT3を0にセットして、計時をスタートし(S157)、処理をS131に戻す。
CPU51は、S133において、再発話タイマーT3が作動中であるので(S133:YES)、再発話タイマーT3の値が再発話受付時間αより小さいか否か判断する(S135)。T3がαよりも小さい場合(S135:YES)、システム終了処理が実行されていなければ(S137:NO)、CPU51は処理をS131に戻し、認識結果取得フラグがオンになるか、再発話受付時間αが経過するまで待つ。第一ユーザが同じ操作ワードを発声せず、認識結果取得フラグがオンになる前に再発話受付時間αが経過した場合(S135:NO)、CPU51は再発話タイマーT3の計時をストップし、S131に処理を戻す。
再発話受付時間αが経過する前に第一ユーザが発声し、認識結果取得フラグがオンになると(S131:YES)、CPU51は、S143において、再発話タイマーT3が作動中であるので(S143:YES)、処理をS159に進める。CPU51は、音声認識処理(図5参照)においてRAM52のワークエリアに新たに保存されたテキストデータを単語Bとして取得し(S159)、単語Aと単語Bとを比較する(S161)。単語Aと単語Bとが同じ単語でない場合(S161:NO)、CPU51は、第一ユーザが操作ワードを発声しなかったとして、処理をS131に戻す。単語Aと単語Bとが同じ単語である場合(S161:YES)、CPU51は、第一ユーザが操作ワードを言い直すために再度発声したとして、S163に処理を進め、単語Aに対応するコマンドを実行する(S163)。CPU51は処理をS131に戻し、第一ユーザの次回の発声に基づいて、認識結果取得フラグがオンになるのを待つ。S137において、システム終了処理が実行されている場合(S137:YES)、CPU51は、コマンド検出処理の実行を終了する。
以上説明したように、CPU51は、第一ユーザが操作ワードを発声したとき、第一ユーザが第二ユーザと会話中であれば、登録コマンドを検出しても制御信号を出力しないので、第一ユーザが第二ユーザとの会話の流れでたまたま操作ワードと同じ単語を発声した場合に誤作動することがない。したがって、CPU51は、第一ユーザの意図する通りに第一ユーザの発声する音声に基づくHMD1の制御を行うことができる。また、CPU51は、第一ユーザが第二ユーザと会話中であっても、第一ユーザが操作ワードを複数回発声すれば、制御信号を出力することができる。したがって第一ユーザは、たとえ会話中であっても、手などを用いた操作ではなく、発声によってHMD1を操作することができる。また、CPU51は、第一ユーザが第二ユーザと会話中であっても、第二ユーザが発声中であれば、第一ユーザの発声する操作ワードに基づいて制御信号を出力することができる。したがって第一ユーザは、第二ユーザとの会話を継続しながらも、手などを用いた操作ではなく、発声によって、HMD1を操作することができる。
第一音声データから直接登録コマンドを検出する場合、発音やイントネーションがユーザによって異なるため、一種類の登録コマンドに対し、第一音声データと比較する複数パターンの音声データを用意する必要がある。CPU51は、音声認識処理を行う公知のプログラムモジュールを用いて、第一音声データをテキストデータに変換することができるので、テキストデータをコマンド辞書で比較するという単純な処理によって、登録コマンドの検出を容易かつ確実に行うことができる。
CPU51は、ネットワーク9を介して第二ユーザの第二音声データを取得する場合、登録コマンドの検出をマイク17を介して取得した第一音声データのみを対象として行えばよく、容易かつ確実に登録コマンドを検出することができる。また、CPU51は、マイク17が第一ユーザの音声だけでなく、第二ユーザの音声を収音してしまっても、声紋認識処理を行う公知のプログラムモジュールを用いることで、収音した音声データから第一音声データを決定することができる。ゆえに、CPU51は、第一音声データを対象として登録コマンドの検出を行えばよく、容易かつ確実に登録コマンドを検出することができる。
なお、本発明は上記実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内において、種々変更を加え得ることが可能である。コマンド検出処理において、CPU51は、単語Aとして記憶した登録コマンドを、第一ユーザが次回に発声した単語Bと比較して、同じ単語であれば、単語Aに対応するコマンドを実行したが、単語Aを複数回分の単語と比較して、それぞれ同じ単語であれば、単語Aに対応するコマンドを実行してもよい。あるいは、単語Aを複数回分の単語と比較し、一つでも同じ単語があれば、単語Aに対応するコマンドを実行してもよい。
CB50は、HD10を制御する専用コントローラの例として説明したが、HD10に接続する機器は専用コントローラに限るものではない。例えば、スマートフォン、タブレット型端末、ノート型パーソナルコンピュータなど汎用のコンピュータ機器に、音声認識プログラムに相当する専用のプログラムをインストールしてHD10と接続し、本発明に係る画像形成装置を構成してもよい。
本実施形態では、メインプログラムおよび音声認識プログラムを含む各種プログラムは、HMD1の出荷時にプログラムROM53に記憶されるものとしたが、必ずしもプログラムROM53に記憶された状態で出荷されなくともよい。例えば、CB50が記憶媒体(光学メディア、メモリカードなど)の読取手段を備え、CPU51が、各種プログラムを記憶した記憶媒体から各種プログラムを読み出してフラッシュROM54にインストールしてもよい。あるいは、CPU51は、無線通信部59を介して、ダウンロードサーバのHDDなど外部の記憶部に保存された各種プログラムをダウンロードして、フラッシュROM54にインストールしてもよい。なお、メインプログラムも含めて各種プログラムをフラッシュROM54にインストールしてHMD1の駆動を行えば、プログラムROM53はなくともよい。
ヘッドセット16は、公知のノイズキャンセリング機能を搭載したものであってもよい。HMD1は、有線通信によってネットワーク9と接続し、PC80と通信してもよい。また、HMD1は、無線通信部59を有さず、第二ユーザの音声がマイク17を介してのみ収音されるものであってもよい。
また、RAM52は、第二発声フラグと第三発声フラグとを統括した第四発声フラグを有してもよい。この場合、第四発声フラグは、第二発声フラグおよび第三発声フラグの少なくとも一方がオンであればオンとなり、第二発声フラグおよび第三発声フラグが共にオフの場合にオフとなるようにすればよい。重畳判定処理のS111およびS117において、CPU51は、第一発声フラグがオンであり、且つ、第四発声フラグがオンである場合にYESに処理を進め、第一発声フラグまたは第四発声フラグがオフの場合にNOに処理を進めればよい。
なお、本実施形態において、登録コマンドの検出対象となる単語Aは、入力期間中の音データに基づく音声データを音声認識したテキストデータを一つの単語として扱うものである。入力期間中の音声の一部に登録コマンドと同じ単語が含まれていても、その単語を抜き出して、登録コマンドとして扱うものではない。
なお、本実施の形態においては、HMD1が本発明の「画像表示装置」に相当する。S11で、ローカル音データをRAM52に保存し、S41で、リモート音データをRAM52に保存するCPU51が、「取得手段」に相当する。S19で、第一発声フラグをオンにするCPU51が、「第一決定手段」に相当する。S25、S47で第二または第三発声フラグをオンにするCPU51が、「第二決定手段」に相当する。S151で、会話フラグがオンであるか否か判断するCPU51が、「第一判断手段」に相当する。登録コマンドが「指示データ」に相当する。コマンド辞書との比較結果に基づき、S149で、単語Aが登録コマンドであると判断するCPU51が、「検出手段」に相当する。S149およびS151における判断処理の結果に基づいて、S163で、単語Aに対応するコマンドを実行し、もしくはS163の処理を行わず、コマンドを実行しないCPU51が、「制御信号出力手段」に相当する。
S161で、第一ユーザが発声した単語Bが、登録コマンドである単語Aと同じ単語であるか否か判断するCPU51が、「第二判断手段」に相当する。S153で、第二ユーザが発話中であるか否か判断するCPU51が、「第三判断手段」に相当する。S67で、第一音声データをテキストデータに変換するCPU51が、「変換手段」に相当する。マイク17が、「収音装置」に相当する。無線通信部59が、「通信装置」に相当する。S23で、声紋認識により音声データが第一ユーザが発声した第一音声データであるか否か判断するCPU51が、「決定手段」に相当する。