今回はOrcaについて調べたことです。
OrcaはLinuxにおける視覚障碍者のためのスクリーンリーダーを含む支援技術です。Orcaを設定し起動させておくと、選択しているメニューやキー入力など、コンピュータに対する操作をいろいろと読み上げてくれるようになります。しかし、残念なことに現在Orcaは日本語には対応していません。
(追記)
日本語をしゃべらせることに成功しました。詳しくは、下記のエントリー。
GNOME Orca で MBROLA と mecab を使って日本語をしゃべらせる方法
(追記終わり)
本当に残念です。残念なので、どうして日本語がしゃべれないのか調べてみました。試してみたディストリビューションはUbuntu9.10(デスクトップ32ビット版)です。
UbuntuではOrcaは既にインストールされていますが、有効にはなっていません。Orcaでデスクトップを読み上げてくれるようにするには有効にしなくてはいけません。システム>設定>支援技術で、「支援技術の設定」ウィンドウを出して、「支援技術を有効にする」をチェックし、その上にある「お気に入りのアプリ」ボタンを押して、「アクセシビリティ」シートの視覚支援でOrcaを選び、起動時に実行をチェックします。「支援技術の設定」ウィンドウに戻り、画面下の段の真ん中の「閉じてログアウト」を押し、いったんログアウトします。再度ログインすると勝手に「orca スクリーンリーダと拡大鏡」というウィンドウが出現します。設定ボタンを押して、細かな設定を行います。
「Orcaの設定」ウィンドウでは、「読み上げ」タブを選び、最初にある読み上げを有効にするを選びます。そして、その下の項目を決めていきます。
初期状態では、「Speechシステム」では「Speechディスパッチャ」のみです。また「Speechのシンセサイザ」では実質espeakのみです。espeakは多言語対応の音声合成なので、音声の人物で様々な言語を選べます。残念ながら現在日本語には対応していません。この音声聞き覚えがあるかもしれませんが、これはWindowsのスクリーンリーダNVDAのディフォルトの音声としても使われています。
UbuntuのOrcaで使える音声合成はespeakだけではありません。Festivalという音声合成も使えます。ただ初期状態では使えないので、少なくとも2つのパッケージのインストール作業をします。Festivalのインストール時に音声データなど最低限必要なパッケージもインストールされます。
インストールには端末から次の2つのコマンドを実行します。
sudo apt-get install festivalこのとき音声データの一つもインストールされますが、他にも欲しいときは festvox-kdlpc16k という音声もインストールします。
sudo apt-get install libgnome-speech7
こうやって、追加パッケージをインストールすると、Orcaの読み上げ音声としてFestivalも使えるようになります。
読み上げタブを選んで、次のように設定します。
Speechシステム:GNOME Speech サービス
Speechのシンセサイザ:Festival GNOME Speech Driver
音声の人物:kal_diphone(english)
GNOME Speech サービスでは、espeakの音声も選ぶことができます。
そのときは次のような設定にします。
Speechシステム:GNOME Speech サービス
Speechのシンセサイザ:eSpeak GNOME Speech Driver
音声の人物:default(en)
しかし日本語文字列の読み方を知りませんから、ほとんどの項目を読んでくれません。espeakの英語を選ぶと日本語の文字は文字コードとして読み上げているように聞こえます。またFestivalでは読めない文字は何もしません。そのため「システム」メニューの「GNOMEについて」などのような英語から始まる項目をポイントしたりすると、読み上げがうまくいっていることが分かります。
さて、日本語文字列は読み上げてくれないので、これではうまく働いているのかがよくわかりません。そのためにデスクトップ環境を英語にしてみます。メニューなどの文字列を英語にしてみるわけです。
ログアウトし、言語を英語にして再度ログインします。ログイン画面の左下で英語に切り替えた後、ログインします。最初は英語の項目はその他の中に入っているはずです。なお、言語を変えてログインすると、ホームディレクトリのフォルダの名前を変えるかどうかきいてきます。ターミナルをよく使うときは、日本語で利用するときもフォルダ名は英語にしていたほうが何かと便利なのですが、とりあえず今回は名前を変えないよう「Keep Old Names」を選択します。
ALT+F1がWindowsでのウィンドウズキーでスタートメニューを開く操作に相当します。矢印キーで移動させメニューの項目を読ませたり、テキストエディタを起動させ、文字を書いたり、FirefoxやOpenOfficeを起動させたりして、いろいろ試してみます。
音声はしっかり出ています。個人的にはFestivalの音声が聞き取りやすいです。これを使いこなすには、合成音声に慣れて、その英語の意味が分かる必要があるので、誰にでもということはできません。もちろんショートカットキーも覚えなくてはいけません。いろいろハードルは高いかもしれませんが、Orcaは十分使えるのではないかと思います。
英語で使えるというのは分かりました。では、日本語はやっぱりできないのだろうかと、デスクトップの言語を日本語に戻し、調べてみました。
いろいろ試してみた結果、一つ面白いことが確認できました。実用的ではありませんが、可能性がちょっとだけ見えてきました。それは文字列の置き換えを使う方法です。「Orcaの設定」画面には右から二番目のタブを開くと、置換する文字列のリストがあります。ここに日本語とその読みを登録します。
デスクトップにある項目や、仮名文字の読みをローマ字や日本語の発音になるような英語のつづりで書いていきます。そうすると、ちゃんと読み上げてくれます。
これは日本語の文字がしっかり内部で認識されているということの証拠でもあります。活用は処理してくれませんし、漢字の複数の読み方にも対応できません。仮名を一文字ずつというのもやってみましたが、それはちょっと上手くいかないようです。それでもこれはいい兆候です。
このテーブルに一つ一つ登録するのは面倒なので、この文字列の置換を行っているプログラムの箇所を探してみると、それはホームディレクトリにある不可視フォルダ.orcaフォルダにある user-settings.py でした。
orca.pronunciation_dict.pronunciation_dict={}
この行の直後に、次のような行を追加していきます。
orca.pronunciation_dict.setPronunciation(u'点字', 'ten gee')
orca.pronunciation_dict.setPronunciation(u'発音', 'hats on')
メニューなど出現する可能性がある日本語について、英語の音声合成の発音規則を考慮しながらここにいくつもの読みを教える行を加えていきます。これが実用的かどうかは僕自身疑問に思いますが、現在できる一番わかりやすい解決法だと思います。
なお、一度「Orcaの設定」が開かれ設定が新たに保存されると、この行はユニコードの16進数文字列に変換されます。
もう一つ面白い現象がありました。次の設定です。
Speechシステム:GNOME Speech サービス
Speechのシンセサイザ:eSpeak GNOME Speech Driver
音声の人物:Mandarin(zh)
Mandarinというのは台湾語のことです。このように設定すると漢字を中国語読みで読み上げてくれます。とはいってもその発音は中国語で合っているのかわかりませんよね。確認のため、geditで「一二三四五六七八九十」と書いて読ませると、ちゃんと中国語らしく読んでくれます。これが同じeSpeakなのに、GNOME Speech サービスの方でしかできません。この違いが何かのヒントなのかもしれません。
この漢字の読みはどうやって実現しているのかeSpeakのソース(zh_listx)で確認してみると、21561文字の単漢字と9392語の熟語の、大規模な読みと声調の対応リストがありました。日本語と違って、中国語は原則文字の読みは一意に決まりますから、例外のあるものは熟語で対応すれば、このように漢字の読みができるのでしょう。日本語では活用が複雑なのでこの方式では完全な日本語の読みには対応はできませんが、この方式ならば仮名の読みには対応できるでしょうから、上記のorcaのスクリプトで対応する方法よりか、よくなるでしょう。eSpeakでは、MBROLAが使えますからjp2データベースを利用すれば上記の外人さんの日本語よりも聴きやすくなるでしょう。さらにeSpeakのコードを改造してMeCabを組み込むことができれば、もっとよくなるはずです。
eSpeakもMBROLAが使えますが、Orcaで使えるもう一方の音声合成であるFestivalでもMBROLAが使えます。ソースコードの改造はFestivalについても考えても、面白いかもしれません。
まとめると、こうなります。
日本語を解釈する処理が入っていない。日本語を発音する音声合成が組み込まれていない。
その改善策として考えられるのは:
・今すぐできることとして、Orcaの読み辞書を利用すれば、外人さんの片言の日本語っぽい簡易的な日本語読みができる。ただし固定されたメニューの読みなどに限定され、実用的とは言えないだろう。
・eSpeakのMandarinを参考にして、漢字の熟語や仮名文字などの一覧表を作成すれば日本語の読みが可能かもしれない。さらにeSpeakのMBROLA接続を利用してJp2などの音声データベースを使って発音させることができるかもしれない。また、eSpeakの内部の処理を日本語向けに多少修正してMeCabの処理を組み込めば、日本語の活用にも対応できるようになるかもしれない。
・同様に、FestivalのMBROLA対応を利用して、内部で日本語に対応した処理を追加すれば可能かもしれない。なお、上記には書いていないが、Festivalはhts_engine_APIにも対応している。hts_engine_APIはOpen_Jtalkでも使われているので、この部分を取っ掛かりに何かできないだろうか。
・OrcaシステムはPythonで書かれている。ということは、先日書いたmbttsとは親和性が高そうだ。直接OrcaのSpeechシステムとして組み込む方法も何かあるかもしれない。組み込むための要件が足りなければ改造すればいいだけの話。
ただ、どちらにしても、今回触れなかった漢字入力の音声読み上げも大きな課題として残るでしょう。
でも、まず日本語による音声読み上げができなければ、何も変わりません。これを実現して大きく環境を変えましょう。
参考リンク:
・Orca - GNOME Live!
・Orca on Ubuntu Karmic Koala (Ubuntu 9.10)
・eSpeak: Speech Synthesizer
・The Festival Speech Synthesis System
・hts_engine API
・Open JTalk
・Ubuntu上で簡単Orca体験
・eSpeakと日本語