こんにちは。
最近暖かくなってきましたね。
夏が来たらふらっと喫茶店を訪れて冷たくて苦いアイスコーヒーを飲みたいですね。
(ここで喫茶店とは今時のカフェーではなく30年以上営業しているような比較的渋いお店を指している。)
実は喫茶店でゆっくりするのが趣味だったりして、今日はこの趣味に最近触ってみている物体認識の技術を応用してみた話をします。
静かな喫茶店を探したい
いつも喫茶店を探すには下記の方法を取っています。
1. 喫茶店特集本
2. ネット記事やブログ
3. TwitterやInstagram
4. Google mapとにらめっこ
5. 実際に歩いてみる
1〜3の方法のメリットは手っ取り早く多くの喫茶店の存在を知れることですが、静かな喫茶店を探したいという立場からすると、これらの喫茶店は有名になりすぎて(もしくは)立地がよすぎて人がたくさんいるというデメリットがあります。
4と5の方法は上のデメリットを解消する方法ですが地道な方法です。一概に悪いと言っているのではないです。実際に歩いてみるとその街のよさだとか知っている街の知らない部分を知ることもできるメリットもあります。
“静かにひっそりとやっている喫茶店にいきたい、でも見つけるのは難しい”
これを解決する方法を考えてました。
基本的な考え方
Google mapとにらめっこしていた時あることに気がつきました。メーカーの看板を使っているケースが多いことです。KEY COFFEEやUCCコーヒーの看板を目にしたことがあると思います。
看板がパターン化されている限りでは物体認識が有効なのでは!?という気づきですね。
これが概念図です。考え方としては、Google mapから喫茶店を探したい街の横道のキャプチャ画像を自動的に取ってきて、幾つかのよく目にするメーカーの看板を学習させた認識機を用いて喫茶店の位置を見つけ出します。
Google street viewのキャプチャを取ってこれるか
まずこれができないと成り立たなくなってしまうので調べました。
Street View Image APIというものを発見。1日あたり最大25000回のマップロードが無料だそうです(2017年8月現在)。使い方も簡単でした。APIキーを取得後すぐに結果を取得できます。
会社の前の座標でテストします。
1 2 3 4 5 6 7 |
https://maps.googleapis.com/maps/api/streetview ?size=600x400 &location=35.6747149,139.7623574 &heading=30 &fov=70 &pitch=0 &key=******************************************* |
1 2 3 4 5 6 7 |
https://maps.googleapis.com/maps/api/streetview ?size=600x400 &location=35.6747149,139.7623574 &heading=270 &fov=30 &pitch=0 &key=******************************************* |
座標を起点に角度や拡大率を指定してキャプチャが取得できます。
Google mapの座標から次の座標を取得するjsライブラリ?が存在するようなので、それを利用して指定したルートの座標を辿って行き、360度複数枚のキャプチャを取得することができればここはクリアできそうです。次の機会で。
認識機を準備してみる
道の画像を取ることができました。ここから認識フェーズです。
物体認識にはカスケードを用いてみようだとかTensorFlow使おうだとか方法はありそうですが、ここでは案件でも利用したことがあるサードパーティを利用してみます。最大20枚の画像の学習と1000回の認識が無料です(2017年8月現在)。
インタフェースに画像を投げていくだけで学習させられる優れものでした。
今回はKEY COFFEEの看板画像14枚を学習させてみました。
結果
複数地点を選んで(手動)認識機にかけてみた結果!
思っていたよりは精度いいのでは…?
しかしながら問題点もたくさんあります。
1. 画像を拡大(Street View Image APIのfovパラメータの調整)しないと認識率がめっちゃ悪い
2. これ以上認識機の精度をあげようとするとサードパーティが有料プランになってしまう
3. サードパーティの認識回数にも制限がある
認識機をオープンソースライブラリで実装して学習画像数を増やすことである程度は解決できるかな、と思います。なのでTensorFlowとかYOLOとかを導入してみたいです。後はGoogle mapの自動巡回の解決ですね。
また書きます(゜-゜)