jeyseni's diary

「ジェイセニ」と呼んでください。批判ではなく提案をするのが生き甲斐です。

耳ナビを「現在地の住所」と「macrodroid」で実現--まだまだ改良中【追記】

「いまどこ」を実現する方法をさまざま試してきて,1ヶ月が経過した。とうとう,1つの解決法に行き着いたので報告したい。
 まずこれまでの経緯から。
①単独のアプリで実現する方法--断念
 「Android 現在地 音声案内」といったキーワードで連日のようにアプリを検索し,それらしきアプリは片っ端からインストールして試してみた。唯一,「Lazario」というスペインのアプリが残ったが,情報の更新の頻度,情報の確度・必要性において評価できなかった。視覚障害者向けのアプリも片っ端から確認したが,筆者のニーズに合うものはなかった。
②地図アプリをベースとする方法--断念
 山登り向けの地図アプリに,現在の標高を定期的に音声案内してくれるものがあった。しかし,同じ方法でgoogle mapやYマップなどの機能を確認してきたが,音声案内してくれる地図アプリには出会えなかった。国土地理院のマップが唯一,現在地点の住所をボタンを押せば読み上げてくれた。しかし,手動でボタンを押す必要があり,筆者の目的には合わないとスルーしてきた。
③IFTTTやmacrodroidなどの自動化ツールでアプリと組み合わせる--試行錯誤
 スタートは,「30秒ごとにトリガーを掛けて,何らかのアクションを動かす」というところから始めた。もともと,定期的に情報を読み上げてくれることを目指していたからである。使ったツールはmacrodroidである。

 さて,アクションをどう設定するかで試行錯誤が続いた。①特定のアプリを起動し,そこで現在地を読み上げる,②macrodroidの中の機能である現在地情報を音声で読み上げる,という2つの方法があった。

 ②の機能として,現在地の緯度・経度を読み上げるmacrodroidの「テキストを読み上げる」で「直近の場所(緯度,経度)」を指定できた。これが最もシンプルな方法だった。しかし,緯度と経度が数字で読み上げられても,まったく場所を特定して認識ができなかった。残念ながら,現在地の地名や住所を読み上げる機能は内蔵されていなかった。

 そこで次に,「アプリを起動」し,そこから適切な文字を選び,音声合成で発声する,というプロセスを試みた。

 ここからの紆余曲折が長すぎるので,結論だけ紹介することにする。

 最終的に落ち着いたのが,「現在地の住所」(chikuwa laboratory)という地図アプリである。このアプリは,基本的に起動時に地図で現在地を表示し,そこの住所が枠外に表示される。そこにあるスピーカーマークを押すと,住所が音声合成で読み上げられるのである。

「現在地の住所」アプリ(android)の画面例。下欄に住所とスピーカーボタンが見える。

 ここで使ったのが,macrodroidの「UI画面操作」という機能である。これは,画面をクリックしたりスワイプしたりする通常の操作をプログラムできる機能である。

 ということで,「クリック」→「XY座標」と指定して,画面右下のスピーカーマークの座標をセットする。現在地の地図表示が安定するであろう7秒待って,クリックを作動させると,見事に住所を読み上げてくれたのである。

 1つ問題があるのは,正直に全文を読んでくれるので,常に「にほん,ゆうびんばんごうXXXのXXXX」が頭に入ることである。カスタマイズができないのである。

 実はこのmacrodroidによるUI画面操作を使ってさまざまな地図ソフトや現在地表示ソフトを試しているのだが,今のところこの「現在地の住所」アプリのみがスピーカーマークの位置が常に固定されていることと,使用中に広告をまったく出さない点がありがたいと思っているのである。

 耳ナビで最初から使っている「音声秒針時計」アプリは,ときどき広告動画が表示される。広告動画を1本全部見れば1週間表示が停まるという比較的緩い対応がされているのでガマンしながら使っている。こちらも代替アプリがなかなかないのである。

 どういう仕組みになっているのか,ほぼ必ず美容系通販サイトか投資系サイトにつながる。そして多くがビジュアル盛り盛りの若い女性によるプレゼンと,「今なら90% offで始められます」といった勧誘広告である。テレビの広告基準ではアウトだと思われる内容が,ネットだと堂々と表示されるのは,年寄りからすると怪しげに思うことが多い。かつてのPCのフリーソフトでも広告表示はあったが,画面の隅に表示されたり,数秒で消えたりする程度だった。まさにネットは無法地帯である。

 もう1つ問題があるとすると,このmacrodroidの「UI画面操作」は画面を表示していないと機能しない点である。つまり1時間の通勤をする場合,1時間中,画面が表示された状態をキープする必要があり,パッテリーが急速に減るのである。そこで,macrodroidのスクリプトの中で「画面を暗くする」命令を最初に入れてあるのだが,常にGPSが作動していることもあってあまり効果がない。

 引き続き,画面OFFでも使える方法や,単独で使えるアプリ,音声内容や音声品質をカスタマイズする方法などを試してみたいと思っている。何かの参考になれば幸いである。

試作したmacrodroidのプログラム内容。まだまだ改良中である。

【追記】

 追記と書いたが,とりあえず上記の方法で満足してしまったので,いったん開発を止めることにした。

 もう1つの方法としてトライしていたのが,google lensを使って画面内に出た任意の文字(地名,町名,道路名など)をテキスト認識させ,これを音声合成で読ませるというもの。これを,さまざまなマップアプリで試してみたのである。

 しかし,方法はマップ画面をキャプチャし,これをgoogle lensで文字認識し,テキストをmacrodroidの変数に渡して音声合成する,という流れである。たしかに地図中の地名などをほぼ完全に文字認識して音声合成できることは確認した。

 しかし,画面キャプチャだと画面周辺にある文字まで認識してしまう。バッテリーの容量,メニューボタン,操作ボタンなどまで文字認識して読んでしまう。

 そこで,画面の中央をトリミングして,そこにある文字だけを対象とすることもやってみたが,今度は文字列の頭や後ろが欠けたりして,うまく読めないことがあった。

 「にほん,ゆうびんばんごうXXXのXXXX」を頭に読んでしまうことは一種の案内だとして,その後ろの住所からだいたいの位置を認識できた。ときにはビル名や駅名,コンビニ名などを付けてくれることもある。まあ,完璧を求めなければこれで十分かもしれないと思ったのである。