2013年5月17日金曜日

ラリーコンピュータ → スマホ → コマ図連携機能

ラリーコンピュータに新機能を追加できないかと、いろいろ思いを巡らせていました。最近の流行りはスマホなので、なにかスマホ連携できたら面白いなと。まだ実験中ですので実用化はほど遠いですが、ご紹介まで。未来のラリーコンピュータを想像してください。

1.ラリーコンピュータに通信機能を追加
  ブルートゥースでスマホとペアリング、走行距離やボタンの押下状態をスマホに送信する。

2.スマホに走行距離を表示
  スマホの画面には、送られてきた車両の走行距離や速度が表示される。操作はリモコンでも、画面のタップでもOK。

3.スマホにコマ図を表示
  スマホにはあらかじめ登録されていたコマ図が表示されていて、走行距離とリンクして自動でスクロールする。

4.コマ到着アラート
  コマ到着前には、画面をフラッシュさせて右左折の情報をライダーに通知する


さてここで、1はプロトを作成して確認しました。送信先はスマホではなくPCですが、ブルートゥースでペアリングしておけば、メーターからどんどん距離が送られてきました。

2は、んー、スマホのプログラミングの勉強中。

3はどうしよう。コマ図がPDFやエクセルで配布されれば、それを表示してスクロールするという方法もありますが、基本的には印刷物で配布されます。
じゃあ、印刷物のコマ図をスマホのカメラで撮って、それを表示すればいいでしょう。
しかし・・・





こんな感じのが小さい画面に表示されてても、読めませんよね。やっぱりコマの絵の部分がスマホの画面の半分~1/3くらいの大きさで欲しいです。

あと、コマに到着したら自動的にスクロールさせたいので、画面に表示されているコマがいったい何キロ地点のものかをデータで持つ必要があります。じゃあ全部入力する?マップをもらった朝に?
そりゃしんどい。

どうするか

 ・コマ図の写真を分析して、コマのイラストの部分と距離の部分を抽出する。
 ・抽出した距離はOCRで数値化して、コマイラストと関連づけて保存する。
 ・テーブル形式で整形して表示する。
 ・走行距離に応じて画面表示を更新する。

って具合ですね。

ということで、作ってみました。
スマホ上でデータ処理するのはちょっと大変なので、撮ったコマ図の写真をサーバーにアップして、サーバー上で処理を行います。処理が終わったら、データがダウンロードされるので取り込みます。

まずは分析。
スマホで撮った写真は、おそらく傾いています。まずはこの傾きを補正する必要があります。





サーバー上で画像をモノクロに変換し、コントラストをあげて分析しやすくします。
特徴点を結んで、画像の傾きを角度で取得します。(厳密に言うと樽/糸巻き/台形補正なども必要ですが、今回はやめておきます。)





画像の傾きが取得できたら、元画像をその反対方向に回転させて垂直な画像に変換します。





はい、適当に撮った写真も見やすくなりました。今回は説明の為に画像を1枚ずつ表示していますが、実際のプログラムでは中間ファイルは出てこずにいきなり結果がダウンロードされます。

次は、距離とコマイラスト部分の抽出です。
また特徴点を結んで、画面の何ピクセルの場所に何の情報があるかを調べます。コンピュータはそこにある画像の意味は分からないので、上から何番目、左から何番目のマスにはこの情報が書かれている、というのはあらかじめ覚えさせておきます。なので、コマ図のフォーマットがいままでと違う場合は、自動で対応する事はできません。





マッピングの情報が取得できたら、元画像に適用する事で画面の要素を抽出することができます。


 これとか、   こんな感じ


続いて、距離の要素をOCRにかけて、数字に変換します。

・・・しかし。ここでつまずいています。
そもそもWEBサーバー上で画像処理を1から10までというのはさすがに無理があるようで、うまく数字に変換できません。小数点が2に化けているのは桁数の推測からなんとかできますが、特に区間距離の識字が破綻しています。OCRのソフトに数字のフォントを学習させていて気づいたのですが、トータル距離と区間距離で数字のフォントが違う!!(ちなみにこれは昨年の北4のコマ図)
トータル距離と区間距離の両方を数字に変換して、上下のコマの差分と比較する事でチェックしようと考えていましたが、現状では無理ですね。トータル距離の方はなんとかかんとか取得できているので、もうすこしチューニングすればいけるかも・・・
ということでサーバー上で写真から自動生成されたコマ図がこちら




2列目にOCRで自動取得した距離を表示していますが、無茶苦茶。距離のところだけ目をつぶれば、そこそこうまくできてます。
データ化すればライダー間での共有は簡単なので、写真撮りとアップロードを複数人でおこなえばスムーズに変換できます。距離でページを並べ替えるのなんて簡単ですからね。
んー、複数のOCR情報があればより正確に距離の取得ができそう、ということに気づいた。

スマホ使わずに、ラリコンの液晶ディスプレイに直接コマイラストを表示するって手もありますね。さすがにWiFiまで積むのは大変なので、SDカードにコマイラストとその地点の距離を保存しておいて、ラリコンに挿すと。


いろいろ書いてきましたが、現状ではサーバーでの画像処理が重すぎて、ちょっと一般向けの実用化は難しそうです。1ページのコマ図をデータにコンバートするのに、30秒もかかってしまいます。コマイラストの切り出しやOCRをあきらめて、PDFをスクロールするくらいならできそうですけどね。

ちょっとおもしろそうな、未来の話でした。