2012年10月14日日曜日

インドカレー再び

なんだか無性に食べたくなったので、また行ってきました。ガネーシュ。
今回はお腹を壊してしまったので、ナンのおかわりは自粛・・・
ナンがでかくなってるし。
美味しく頂きました。

RubyでAquesTalkを喋らせてみた。

昨年のPHPカンファレンスで東京に行った時仕入れいた、合成音声LSI AquesTalk
喋らせてみた。

これ、おもしろい!
こんな小さな8bitマイコンで、外付けのROMやRAMがいるわけもなく、電源とシリアルをつないで、
ローマ字を送るとしゃべる。
こんな小さな容量にどうやって詰め込んでいるのか。正に謎の技術。
しゃべるといえば、昔、PC6001というマシンがあって、これがBASICでTALK文という命令を使うと
喋らせることができた。当時画期的で大変未来を感じたものだ。こんな動画もある。
さらに、当時5インチフロッピーな時代に3.5インチフロッピーだったマッキントッシュは喋るのだよ。
衝撃だった。
ディスプレイがカラーになった時や、FM音源がなった時の感動は今でも・・・

っと昔話はおいておいてw
こいつを喋らせるには、音声記号と呼ばれるローマ字にアクセント記号がついたものを送る必要がある。音声記号の仕様についてはここを参照。

で、公式にも日本語を音声記号にするサービスがあるのだが、
サーバー資源に限りがあるため、本サイト以外からのアクセスおよびアプリやスクリプトからの利用を禁じます。
とのことなので、自作してみた。

ソースはここで公開中。お気軽にpull requestやらforkしてね。

仕組みとしては、

  1. TwitterAPIを利用して、特定ハッシュタグのついたつぶやきを取得。
  2. MeCabを利用して形態素解析を行う。
  3. 形態素解析の結果、数字なら数字のタグをつける。英語なら英語のタグをつける。
  4. 形態素解析の結果、記号で読み方がわかるものはそのまま。読めない記号は無視。
  5. 形態素解析の結果、記号で読み方が不明の場合は、人間が読み方の辞書を与える。
  6. 形態素解析の結果、固有名詞の場合は読み方がわからないので、人間が読み方の辞書を与えてやる。
  7. kakasiを使って、読みがなをローマ字に変換する。
  8. シリアルポートへローマ字を流して喋らせる

ざっとこんな感じ。
何気に公式に対抗してみるw
公式より優れているw点

  • 英語タグの解釈が可能
  • 記号の読みにある程度対応(辞書のメンテ次第)
  • intelのような英語固有名詞にある程度対応。(辞書のメンテ次第。公式も一部対応の様子。)
  • 公式ではデータシートにない裏コマンドを生成する?(MODE=DaAってなんだ?)


公式より劣っている点

  • アクセント未対応(アクセント辞書どこかにあるのかなぁ)
  • 公式でも一部対応しているようだが、膨大にある英語よみの辞書を手動メンテしないといけない。(どこかに辞書が落ちていないかなぁ)
  • 数字タグに完全に対応していない。<NUMK VAL=132 COUNTER=enn>のような形式には未対応。数字+円とか数字+時とかだったらみたいにすれば対応可能かな。(追記:第二品詞に”助数詞”とはいるようなので、これを見ればいける気がする)


実装してみての気になる注意点


  • シリアル通信の場合、内部クロックでの動作の影響か、タイミングを取るのが結構シビア。
  • 可能ならI2Cのような別の手段で通信する方がいいとおもう。試してないけど。
  • PCの処理が高速でかつ、シリアルもマイコンにとっては十二分に早いので、適切に待つ必要がある。
  • BUSYが解除されてすぐにデータを送信しても、当然構文解釈するためにある程度の時間がかかるが、そのためのBUSYを返すまでの間に大量データを送信するとバッファが受けきれなくなる。
  • 一回の送信は100Byte程度に抑え、送信後BUSYにかかわらず1秒以上待つほうがいい。
  • BUSY信号は、何かしらの入力をしないと帰ってこない。又BUSY送信時、改行を送らないので、使用するライブラリによっては、ずっと受信中になる。(地味にハマった。)
  • 送信した音声記号中に解釈不可能な文字(記号など)が混ざっていると、送ったデータ全体が無効になる。記号直前まで喋ってくれたりはしない。
  • したがって、喋らないのは、解釈不可能な文字が混入しているか、バッファがOFしたかの判断がつかない。(一応長い文字列を送るとエラーコードを送るようになっているが、そもそもBUSYを発信する前にOFすると、どうやら解釈不可能としてエラーを出さず無効になるようです)

実装してみて、改めて日本語を読み上げるのが大変だと思い知った。
日本語を読み上げるだけでも、漢字、かなだけでなく、ローマ字読みもあれば時として英語読みもある。
MACはなぜエムエーシーではなくマックなのか。
ーはマイナス?ダッシュ?長音記号?
瞬時に文脈を判断し、適切な単語の区切りを見つけて、単語のよみを発声する。
しかもこれにアクセントやイントネーションまであるときたもんだ。
なかなか高度なことを普段やっている。




2012年10月10日水曜日

LUbuntu12.4でMozcを使う。

諸般の事情により、このところLUbuntuを使っていますが、漢字変換が大分マシになったとは言え、
あまりよろしくないので、Mozcを入れて見ました。
インストール自体はパッケージマネージャで検索し、インストールなのですが、何故か切り替わらない
単に設定が悪かっただけでした。

  1. システムツールー>ibusを開く。
  2. インプットメソッドのタブを開く。

ここにある「使用するインプットメソッドをカスタマイズ」にチェックを入れないと有効にならない!
ちなみにMozcの追加方法は、「インプットメソッドの選択」ー>「日本語」で選択し、横にある「追加」ボタンで追加できます。削除してしまっても、これで再度追加できます。


次に、パネルに表示されない問題。
ここを参考に、パッケージマネージャで「glade」を検索し、出てきたインストール済みのものをすべて再インストール(私の場合は2つ出てきました)後、再起動したら出てきました。


2012年10月6日土曜日

うーん

友人より、取引先の人で、米の乾燥機が壊れているので修理に行ってね。という
またまた訳のわからんことを言われて、車で拉致られる。

いや、これ直せるんですか・・・・
症状は電源は入るが、動かない。と聞いていたので、まぁ年数的にもモータの進相コンデンサのパンクと踏んでいたが、
実際の症状はボイラーが点火せずとの事。
業者に見てもらったところ、コントロール基板不良らしい。
が、もう部品がないので買い換えてね♪という。まぁ商売だしねぇ。

で試しに動かしてもらうと・・・・案の定動く(笑)
まぁそんなもんですよ。
だが、それを最後に動かなくなる。
進相コンデンサの容量をチェック。以外にも問題なし。
となると、業者が言うようにコントロール基板不良かぁ。
コントロール基板を見てみる。

・・・うわぁ。2SC1815やら74HCのロジックやらリレーやらすっごく身近な部品しかないw

経験的にリレーが多少怪しいが、こいつらは少々じゃぁ壊れん!!
しかし、確認しようにもボイラーの隣に基板があって、テスター当てているときに万一火がついたら
危険だし、電源200vだしで確認が取れず。
しかも明日の朝までに直せとのこと(友人より)なので、不本意ではあるが、全ての部品を交換する。
ついでに、すべての部品について不良品チェックを行う。
リレーがもう廃止品で、同等のものが既に市販されていなかったが、偶然ジャンク屋に同じメーカの使えそうなリレーがあったので購入。
ピンもそのままで、機能差がある接点は使われていなかったのでセーフ。
一番大変だったのは、回路図もない状態で、部品が実装されたまま、抵抗、コンデンサの値を読み取り、漏れ無く購入することだった。
(やっぱり2つばかし抵抗に漏れがあった)
トランス、サイリスタ、コネクタ以外特殊部品がなかったので全て揃った。
もしこれで本当に制御基板が悪かったとして、部品がないから修理不可能って・・・
普通に揃ったぞ。
(しめて2千円弱。それでも広島は部品が高い。買えるだけ有難いのだが。)
 これから、非常に地味な作業が待っている。
部品点数は50点を超える。
 ロジックICの論理チェックも行う。
 ひとつひとつ部品を外してはチェック。
途中で抵抗のカラーコードをメモし忘れたり、勘違いしてメモしたために、4本ほどどこにあったか
不明な抵抗を出してしまい、小一時間悩む。
回路図も無いので、該当の周辺回路図を解析し、最終的には感と経験により値を決めた。

完全徹夜で組み上げる。
結果リレーも含めて問題なし。


現地で実装。試運転するもやはり動かず。
よく見ると、大元のマイコンが入っている箱につながる線がネズミに食い荒らされてる!!
多分原因はネズミが線をかじって、どこかが半断線しているのだろう。
しかも金属ケースなので、剥き出しになった線がケースとショートしているのも考えられる。

一応念の為ネズミの糞まみれなマイコン箱の中を開けてみたが、特にコンデンサのパンクの形跡はなかった。まぁ容量は減っているだろうから、交換したほうがいいだろうけど、直接の原因では恐らくないでしょう。
こっちが壊れると修理不可能だしなぁ。
今時NECなマイコンとかPLDとか入手無理だし。そもそも中のロジックわからないし。
中にもリレーが大量にあったので、もしかしたら不良かもだけど、割といいものが使われていたので、配線がくさい。
配線なら直せるかもとのことなので、今回は撤収。
何気に元本業な人じゃないか疑惑があったのですが、真相はいかほど?

2012年10月3日水曜日

ルータを頂きました。

友人より平日昼間から連絡。
何事かと仕事帰りに合流すると・・・
 ルータを頂きました。
しかもコードレスで色々揃っている奴一式!
100均で買ったヤワなもんじゃありません。ヤッター

っとただでくれる訳もなく。
友人が持っているレーダ探知機のSDカードが刺さらない。正確にはロックされず、
出てくるのを修理して欲しいとのこと。
はいはい。それくらい直しますよ。

原因は上にある三角形になっている板バネが弱っていた。
精密マイナスドライバで少し曲げてやったら直りました。
楽勝!!