Top  上へ  目次

音声認識のその後


 さきほど実装が終わりましたVer.13.1.6.0をリリースしておきました。
 趣旨としては、ほぼ遊びの範疇なので、試しに遊んでみて、感想が頂ければ幸いです。
 作者は、ア▲クサなりクロ●バーなりS◆riなり、□ルタナなり、ほぼ使ってませんので音声認識技術に関する素人です。
 ですから色々指導していただければと思う次第です。
 ・・・まぁ感想が上がってくるのは、あまり期待してないですが。(苦笑)

 音声認識パックといいますか、音声認識を行うためのスクリプトと設定ファイルの詰め合わせはこちらになります。
音声認識パックダウンロード

 このファイルを解凍したら以下の3つのファイルが出てきます。
  1. 「1_音声認識開始」
    音声認識を開始するコマンドを発行するスクリプトなのでランチャーの配下にコピーしてください
  2. 「2_音声認識終了」
    音声認識を停止するコマンドを発行するスクリプトなのでランチャーの配下にコピーしてください
  3. 「VoiceRecognition.xml」
    音声認識の文法ファイルです。
    ユーザー情報の管理ディレクトリの直下においてください。
※正式対応の際には、コマンドはメインメニューに、文法ファイルはインストール時に上書きするか確認する、従来の仕組みの一部に組み込まれる想定です。


 一応、詳しく説明しておきますが、「1」と「2」のファイルは、ランチャーバーを表示させ、歯車アイコンをクリックして表示されるメニュー「このバーの管理ディレクトリを開く」で開いたフォルダーにコピーしてください。
 ファイルの中身はPostmessageコマンドが、1行だけ書いてあるスクリプトなんで、このコマンドIDで開始/停止するものなんだなと考えていただければと思います。

 「3」のファイルは、オプション→その他→起動制御、「現在のユーザー情報の管理ディレクトリを開く」ボタンを押すと、当該のディレクトリがエクスプローラーで開かれるので、こちらにコピーしていただければOKです。

 これで、アプリの方は音声認識コマンドを使用する準備ができました。
 あと忘れがちですが、マイクをつないでPCの方でマイクを認識するように設定しておいてください。
 物理的にマイクが無いと、音が拾えませんからね・・・
 また、マイクのボリュームもOSの設定ではありますが、注意してください。

※音を拾わない、認識しにくい原因として、マイクの故障というのも多々あります
※音声認識を開始した後、文法ファイルの編集、マイクを取り外した場合は音声認識を一旦停止させた上で再度開始してください。




 というわけで、ランチャーから「1_音声認識開始」を実行すると、
 「音声認識を開始します。御用がございましたらお申し付けください。」
 ってしゃべってきたら音声認識が開始されています。
 もちろん終了は「2_音声認識終了」を実行してください。
 「メモ帳、起動」「メモ帳、切り替え」とか発音すると、メモ帳を切り替えたり、前面に表示したりします。
 コマンドはいっぱいあるんで、文法定義ファイルを見てもらってこんな命令があるんですねーという感じで、試してもらえればと思います。


 次に、以下は文法定義ファイル「VoiceRecognition.xml」の説明になります。
 音声認識のキモにあたる部分で、便利になるのもクソになるのも、このxmlでの定義によって大きく変わります。
 あ、説明自体はxmlファイルの中にも同じ内容を書きこんでますが、そっちを見てもらっても構いません。

●文法定義ファイルについて
 日本語を認識させるにはSjisでないとダメなので、本ファイルはSJISで記載してください。
 外国語は作者が話せないため、検証してません。


●音声認識の文法
 音声認識の開始キーワード+コマンド名の組み合わせで命令できます。
 例えば、
 「あすら、属性変更」
 このように発音することで、As/Rに対して属性変更コマンドが発行できます。

 また定義XMLの順序を逆にすることにより
 「主語+動詞」という構成にすることもできます。
 外部コマンドの起動はこちらを使っていますが、数が増えると誤認が多くなる傾向があります。



●xml構造

@.ルールの定義
 現状5つの組み込みルールと、1個の自動判定ルールが存在します。
※音声認識xmlの定義に従って階層を作ることもできますが、説明は割愛します。

<RULE NAME="As/R Command" TOPLEVEL="ACTIVE">
      ↑このルール名の文字列によって、文言解析の動作が分岐します

・「As/R Command」
  COMMANDのVALSTRの値を数値変換し、コマンドIDとしてメインフレームに発行する(As/Rの内部機能の利用)

・「As/R Script」
 COMMANDのVALSTRの値をAs/R用のスクリプトファイル名として認識する

・「Execute Command」
 COMMANDのVALSTRの値をフルパス文字列としてコマンドを実行する

・「Task」
 COMMANDのVALSTRの値をプロセス名として認識します。
 操作コマンドは現在2種類用意されています。
 「CHANGE」タスクを切り替え、なるべく前面に表示させます。
 「CLOSE」タスクを閉じる。(対象ウィンドウハンドルにWM_COMMANDを投げる)

・「Special moves」
 必殺技用
 COMMANDのVALSTRの値を読み上げます。

・その他
 数値変換して0にならなければAs/R Command、0になったらExecute Commandと見なします。



A.音声認識のキーワード
 音声認識の発動のキーワードを指定します。
 複数の単語の場合は並べて記載することで使用できます。
 サンプルでは2音節のみ使用していますが、複数音節を使用して誤認を防ぐようにすることもできます。

 (4音節の例:「あすら、コマンド、全選択、実行」で4音節)

	<RULE NAME="test rule" TOPLEVEL="ACTIVE">
		<P>あすら</P>
		<P>コマンド</P>
		<L PROPNAME="COMMAND">
			<P VALSTR="57642">全選択</P>
		</L>
		<P>実行</P>
	</RULE>

 同じ識別語を使用した場合、先に検出した方を優先しますので、なるべく最初の音節でルールが特定できるようにすると誤検出しにくくなります。
 As/Rのように英字で読みにくいものは、平仮名か片仮名にしておくことをお薦めします。orz

※<L>の補足
<RULE NAME="As/R Command" TOPLEVEL="ACTIVE">
	<L>←★候補が複数あるので列挙する("List"の略、候補が1個の場合はPタグをいきなり書いて良い)
		<P>あすら</P>←★この部分と
		<P>あさり</P>←★この部分がOR条件でヒットする
	</L>



B.コマンド定義
 <L PROPNAME="COMMAND">で括られたリストです。
 VALSTRの部分は、ルールの定義で触れられたように動作が変わります。
 音声認識の開始キーワードと同様に、同じ識別語を使用した場合、先に検出した方を優先します。

<L PROPNAME="COMMAND">
	<P VALSTR="42004">属性変更</P>←★この部分「ぞくせいへんこう」と発音すると反応する
	<P VALSTR="35207">削除</P>←★この部分「さくじょ」と発音すると反応する
	            ↑この例だと、コマンドID



C.注意事項
 2個As/Rを起動して両方で音声認識をONにすると、両方が反応しておかしな動作になりますのでご注意ください。


VoiceRecognition.xmlの定義部分


<?xml version="1.0" encoding="Shift_JIS"?> <GRAMMAR> <!-- As/R本体のメインフレームに投げる組み込みのコマンドID 「あすら、すべて選択」のように発声します。 --> <RULE NAME="As/R Command" TOPLEVEL="ACTIVE"> <<L> <P>あすら</P> <P>あさり</P> <P>えーえすあーる</P> <P>あずあーる</P> </L> <L PROPNAME="COMMAND"> <P VALSTR="42004">属性変更</P> <P VALSTR="35207">削除<</P> <P VALSTR="42005">エディタ</P> <P VALSTR="35512">検索</P> <P VALSTR="35801">前のタブ</P> <P VALSTR="35800">次のタブ</P> <P VALSTR="57600">新しいタブ</P> <P VALSTR="42007">圧縮</P> <P VALSTR="42012">リネーム</P> <P VALSTR="40003">ビューア</P> <P VALSTR="57634">コピー</P> <P VALSTR="57637">貼り付け</P> <P VALSTR="57635">切り取り</P> <P VALSTR="35515">ヘルプ</P> <P VALSTR="42017">フォルダ作成</P> <P VALSTR="42023">フォルダ移動</P> <P VALSTR="33010">解凍</P> <P VALSTR="33301">更新</P> <P VALSTR="57640">アンドゥ</P> <!-- 言葉を間違えそうなものは複数登録しておく例 --> <P VALSTR="57642">すべて選択</P> <P VALSTR="57642">全選択</P> </L> </RULE> <!-- As/R用のスクリプトコマンドの実行、スクリプト名はフルパスで指定します。(組み込み置換マクロが使えます) IDを振らなくてもスクリプトが実行できる強力な機能ですが、恩恵を受ける人は限られるでしょう。 「スクリプト実行、エディタ」のように発声します。 --> <RULE NAME="As/R Script" TOPLEVEL="ACTIVE"> <P>スクリプト実行</P> <L PROPNAME="COMMAND"> <P VALSTR="%Script_dir%\Editor.txt">エディタ</P> <P VALSTR="%Script_dir%\Viewer.txt">ビューア</P> </L> </RULE> <!-- 外部のexeなどを実行、いわゆるシェル実行 「メモ帳、起動」のように発声します --> <RULE NAME="Execute Command" TOPLEVEL="ACTIVE"> <L PROPNAME="COMMAND"> <P VALSTR="notepad.exe">メモ帳</P> <P VALSTR="mspaint.exe">ペイント</P> <P VALSTR="calc.exe">電卓</P> <P VALSTR="Taskmgr.exe">タスクマネージャ</P> <P VALSTR="regedit.exe">レジストリエディタ</P> <P VALSTR="explorer.exe">エクスプローラー</P> <!-- 秀丸の標準インストール先、変更していたり所有していない場合は流用できません--> <P VALSTR="%ProgramFiles%\Hidemaru\Hidemaru.exe">秀丸</P> <!-- 64ビット版のChromeをインストールしている場合は%ProgramFiles%かもしれません--> <P VALSTR="%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe">Chrome</P> <P VALSTR="%ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe">Edge</P> <P VALSTR="%ProgramFiles%\Mozilla Firefox\firefox.exe">FireFox</P> <!-- 作者のインストール先、ほぼ間違いなく流用できません--> <P VALSTR="D:\tool\Editor\Mery-x64\Mery\Mery.exe">Mery</P> <P VALSTR="D:\tool\FileTool\ffftp\FFFTP.exe">FFFTP</P> <!-- 作者がツールのショートカットをとりあえず放り込んでるディレクトリ、間違いなく流用できません--> <P VALSTR="%USERPROFILE%\Desktop\tool">ツールディレクトリ</P> <P VALSTR="https://www.google.com/?hl=ja">Google検索</P> <P VALSTR="https://translate.google.co.jp/?hl=ja">Google翻訳</P> <P VALSTR="https://www.deepl.com/ja/translator">DeepL翻訳</P><!-- でぃーぷえるほんやく--> <!-- MS OFficeがインストールされていない環境では動作しません--> <P VALSTR="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Excel.lnk">Excel</P> <P VALSTR="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Word.lnk">Word</P> </L> <L> <P>開く</P> <P>ひらけ</P> <P>起動</P> </L> </RULE> <!-- タスク切り替え Execute Commandと似ていますが、こちらはexe名のみの指定です。 複数のウィンドウが見つかった場合、Zオーダー順で先に見つけた方を前面に表示します。 また「電卓」のようにexe名が一致しないものや、「タスクマネージャ」などのように権限昇格が必要なものは操作できません。 「メモ帳、切り替え」のように発声します。 --> <RULE NAME="Task" TOPLEVEL="ACTIVE"> <L PROPNAME="COMMAND"> <P VALSTR="notepad.exe">メモ帳</P> <P VALSTR="mspaint.exe">ペイント</P> <P VALSTR="explorer.exe">エクスプローラー</P> <P VALSTR="Hidemaru.exe">秀丸</P> <P VALSTR="Mery.exe">Mery</P> <P VALSTR="FFFTP.exe">FFFTP</P> <P VALSTR="chrome.exe">Chrome</P> <P VALSTR="msedge.exe">Edge</P> <P VALSTR="firefox.exe">FireFox</P> <P VALSTR="EXCEL.EXE">Excel</P> <P VALSTR="WINWORD.EXE">Word</P> </L> <L PROPNAME="ACTION"> <P VALSTR="CHANGE">切り替え</P> <P VALSTR="CHANGE">チェンジ</P> <P VALSTR="CHANGE">あるとたぶ</P> <P VALSTR="CLOSE">閉じる</P> <P VALSTR="CLOSE">クローズ</P> </L> </RULE> <!-- ネタ枠です 「かーめー、深淵よりいでしもの」のような組み合わせで発声するのは自重ください。 --> <RULE NAME="Special moves" TOPLEVEL="ACTIVE"> <L> <P>かーめー</P> <P>闇よりくらき</P> <P>黒より黒く</P> </L> <L PROPNAME="COMMAND"> <P VALSTR="はぁぁぁぁー">はーめー</P> <P VALSTR="科学の光が落とす影">深淵よりいでしもの</P> <P VALSTR="イクスプロぉぉぉぉジョン">闇よりくらき漆黒に</P> </L> </RULE> </GRAMMAR>



●既に上がってきている意見
・「As/R Command」と「As/R Script」はくっつけて数字か否かでスクリプト実行した方が良いと思われる
・「Task」のActionにUP,Down,Left,Rightで対象アプリのウィンドウを動かしたい
・iPhoneとiPadとMacが一斉に反応するので、複数のPCでそれぞれ自分が呼ばれたというのを認識して欲しいね
→文法ファイルの設定で、PCを見分けるキーワードを入れれば可能なはず
・普段使わないアプリとか設定だと音声認識使うかな
→設定を充実させる必要アリ
 まとめて自動設定するとか・・・でも使えるキーワードが埋もれて使い方が難しいという方向になるかも
・「バルス」って唱えたら全てを終わらせるよね