音声認識のその後
さきほど実装が終わりましたVer.13.1.6.0をリリースしておきました。 趣旨としては、ほぼ遊びの範疇なので、試しに遊んでみて、感想が頂ければ幸いです。 作者は、ア▲クサなりクロ●バーなりS◆riなり、□ルタナなり、ほぼ使ってませんので音声認識技術に関する素人です。 ですから色々指導していただければと思う次第です。 ・・・まぁ感想が上がってくるのは、あまり期待してないですが。(苦笑) 音声認識パックといいますか、音声認識を行うためのスクリプトと設定ファイルの詰め合わせはこちらになります。 音声認識パックダウンロード このファイルを解凍したら以下の3つのファイルが出てきます。●文法定義ファイルについて 日本語を認識させるには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>