ラベル android の投稿を表示しています。 すべての投稿を表示
ラベル android の投稿を表示しています。 すべての投稿を表示

2014/07/15

Foursquare/Swarmのチェックインを提案 "beeWear" を公開しました (Android Wearにも対応)

先週、"beeWear"(びーうぇあ)というAndroidアプリケーションを公開しました。
位置情報を用いたSNS "Foursquare" および "Swarm" のクライアントです。

特徴は "チェックインの提案" です。

過去にチェックインしたことのあるベニューに近づくと...
「チェックインしますか?」と自動的に提案してくれます。
バッテリの消費についてご心配されるかもしれませんが、後述のとおり大丈夫です。初期設定ではGPS測位を使いません。
※省電力かつ高精度なWi-Fi測位を十分に活用するために、Android 4.3以降ではWi-Fi設定の"スキャンを常に実行する"を有効にする事を強く推奨します。ホットスポットなどに不用意に接続することなくスキャンのみを行えます。


beeWearによる提案が表示されたところ。
尚、これは大学の研究室の非公式マスコットキャラクターですが、
本アプリは大学での研究テーマと関係ありません。あしからず。

beeWearでは無駄のない提案を行うために工夫を取り入れています。

  • Fused Location による省電力かつ高精度な位置情報の取得
    Google Play Serviceによって、Wi-Fiや基地局、自律測位を組み合わせ。他のアプリが取得した位置情報を利用することもでき、効率的。
    I/O 2013の資料によると1%/毎時のバッテリ消費で済むとか。
  • Activity Recognition によるユーザの行動状況の認識
    Google Play Service によって、歩行中/移動中などを認識。
    例えば、電車に乗車している間は提案を抑制します。
  • 機械学習によるチェックイン傾向の学習
    時間帯を考慮し、どのベニューにどの順序でチェックインするか。
  • 位置情報ジャンプのキャンセル
    明らかにありえない距離のジャンプが発生した場合は提案を控えます。
    Wi-Fi測位などは精度値が全く信用できない場合があるからです。
  • チェックイン履歴を基にした位置情報の誤差補正
    過去のチェックインから位置情報の誤差を補正し、提案の質を向上。
    Foursquare側でも何らかの補正をしていますが、独自でも行います。
  • 他の端末やアプリによるチェックインの反映
    他の端末やアプリからチェックインした場合にプッシュを用いて認識。
    学習に反映するほか、必要に応じて提案を取り下げます。

などなど。まだ試験的な部分も少なくありませんが、今後も改良を重ねていきます。

提案が必要無いベニューは "提案しない" を選べば、次から提案しません。
(逆に、"提案しない"としたベニューを再び提案してほしい場合は、メイン画面からそのベニューを長押ししてください。)

尚、バックグラウンドでの周辺ベニュー検索は、数日ごとにベニュー履歴を取得してデータベースを端末上に構築しています。従って都度通信は発生しません。

次に "Android Wearへの対応"です。

今月上旬にAndroid Wear搭載スマートウォッチが発売されましたが、
beeWearは先々月から開発開始しており、当初から対応を考慮していました。

もちろん、beeWearはスマートフォン/タブレットだけでもご利用いただけます。
しかし更にAndroid Wear搭載スマートウォッチがあれば...
スマートフォンやタブレットはカバンの中にしまっていても構いません。
Android Wear搭載スマートウォッチから、サクッとチェックインできます。

Android Wear上でチェックインの提案が表示されたところ。

また、過去に訪問したベニューを自動的に提案するだけでなく、
Android Wear上で新たなべニューを検索することもできます。



大切にしているのは、チェックインをサクッと行えることです。

個人的にですが、Foursquareを楽しんできたユーザの一人として、初期から続いてきた楽しさは"チェックイン"という行為にあるのかもなぁ...と思っています。
好きなお店や初めてのお店で、ときには友人とチェックインするという行為です。
それを純粋に楽める軽快さを大切にしたいと考えています。

Twitterで見かけたから合流しようっ!なんていう使い方もありますよね。
ご安心ください。Foursquare/Swarm上でTwitterやFacebookと連携設定されている方は、beeWearでも連携投稿ができます。非公開チェックインも可能です。

共有範囲("公開"、"非公開"、"公開 (+Twitter)"...)はベニュー毎に記憶させることも可能です。
つまり...
  • 自宅最寄り駅では非公開チェックイン
  • 学校では公開チェックイン
  • お気に入りのお店では公開チェックイン + Twitter連携
ということができます。
(※ Android Wearでのチェックインの際には共有範囲が選べませんので、デフォルトの設定か、ベニュー毎に記憶した共有範囲が使用されます。)

スマートフォン/タブレット向けのメイン画面からチェックインすると"共有範囲"を選択できます。
ここで選んだ共有範囲は、ベニューごとに記憶されます。

もし宜しければ、beeWear (びーうぇあ) を一度お試し下さい。もちろん無料です。
フィードバックもお待ちしております!

Get it on Google Play
Android 2.3以降のスマートフォン/タブレットでご利用いただけます。
(但し、Android Wearスマートウォッチとの連携される場合は、Android 4.3以降が必要です。)

[2014/07/07 追記]
v1.2.0 にはAndroid Wear上での通知に関する重大な不具合がありました。
昨日公開した v1.2.1で修正済みです。


p.s.
余談ですが、"beeWear"の"Wear"はわかるけど、"bee"って?と聞かれます。
当初から、Swarm対応のアプリとして開発を行っていたのですが、アプリ名についてSwarmの運営者に確認したところ、"Swarm"という言葉を使うのは商標的に宜しくないということでした。Swarm(ハチの群れ)から連想して...ミツバチのような賢さという意味も込めて"bee"にしました(笑)

さて本アプリを公開するにあたり友人にはテスターとしてご協力いただきました。
未完成のアプリであったにもかかわらず、実際の生活で毎日テストしてくださり フィードバックをいただきました。あらためて感謝申し上げます。ありがとうございました。

また、本アプリにはApache Licenseが適用されたオープンソースライブラリを使用、改変しております。本アプリではライセンスに従って条項文章を同梱しています。ライブラリ開発者の皆さまに感謝申し上げます。

2014/05/10

Android Wearプロジェクトを作ろうとして嵌ったので自分用初歩的メモ

来月あたりに Android Wear搭載スマートウォッチが発売されるそうなので
今更ですが、Android Wear Developer Previewに登録して始めてみました。
(3月あたりの発表直後に開発開始された方、流石です。私もそれくらいの早さで取りかからないとついていけないなぁ...。
...3月は学会発表やら何やらでそれどころじゃなかったんです!(ひど
い言い訳w))

今回の記事は申し訳ありませんが、Android Wear云々というより
Androidアプリケーション開発の初歩的なミスの話です。開発環境はEclipseです。
(そろそろAndroid Studioに乗り換えたほうが良さそう...。)
以前からアプリ開発で稀に似た問題があったので、この機会にメモしておきます。

開発の始め方については
http://developer.android.com/wear/preview/start.html
または 松岡氏による日本語訳 を参照してください。

AVDでAndroid Wearの仮想マシンを作ろうとしたら、対応するアーキテクチャが無いといわれる


Android SDK Managerを起動して、最新のSDK Toolsと、Android 4.4.2 の必要なコンポーネントが本当にインストールされているか確認しましょう。
特に、私みたいに以前からあまり開発環境をアップデートしていない人は、環境が古くなっており、ひと通りのアップデートを適用したあとにSDK Managerを再読み込みさせて...という作業を何度か繰り返さないといけないかもしれません。

java.lang.NoClassDefFoundError: android.preview.support.v4.app.NotificationManagerCompat

  1. プロジェクトのディレクトリのlibsディレクトリに"wearable-preview-support.jar"をコピー(Eclipseのパッケージエクスプローラ上でD&D)する。
  2. プロジェクトのプロパティで"Javaのビルドパス"設定を開いて...

    のようになっているかどうか確認する。

java.lang.NoClassDefFoundError: Android.support.v4.app.NotificationCompat$Builder

  1. Android SDK Managerで"Support Library"が最新(執筆時: v19.1)かどうか確認する。
    (※プロジェクトの"Androidツール"メニューなどから"サポートライブラリーの追加"をすると、何故か古いバージョンのv19.0に置き換わることがあったので注意。)
  2. Android SDKのインストールディレクトリ内の extras/android/extras/android/support/v4/android-support-v4.jar を
    プロジェクトのディレクトリのlibsディレクトリにコピーする (Eclipseのパッケージエクスプローラ上でD&D)。
  3. プロジェクトのプロパティで"Javaのビルドパス"設定を開いて...あとは上と同じ。

その他


いずれも、android-support-v4.jarなどがビルドパスに追加されているからといっても、それが最新リビジョンとは限りませんし、複数表示されている場合は"除去"して一からやってみることをおすすめします。(こちらも参照)
また、appcombat_v7がproject.propertiesで定義されていて勝手に読み込まれていたりする場合もあるので、そういう場合はまず外してみましょう。

もしかしたら、追記するかもしれませんが...以上です(笑)
期待して記事にアクセスしてくださった方には申し訳ありませんが、
初歩的な話でした m(_ _)m

p.s. 試しにこんなものを作ってみました。
シンプルなサイコロのアプリです。(GitHub: weardice_android)
ちょっと Notification の使い方としてはあれですが...w (コンセプト的に合わないかも)
今現在はSDKでCue Cardが使えない(Notificationに対する応答として音声入力はできますが、ホームから何か新しいアクションが実行できない)ので、とりあえずサイコロを振った結果を表示する部分と、"もう一度振る"というActionを実装しました。
最終的には"Ok google, サイコロ振って"と言うとサイコロが振れる予定ですw
ちなみに画像素材は自作です。ついでにサイコロの3Dモデルも作りました(笑)

ところで開発エミュレータ上でRoundのスキンを選んでいるのに、丸型にくり抜いて表示されないのですが、何故でしょうか...w 実用上、然程問題はありませんが。
→ [2014/05/11 追記] 仮想マシンの設定で"ホストGPUを使用する"を有効にしていると、円形にくり抜いて表示されないようです。GPUによってオーバレイされるからでしょうか?


さて...気になる実機は LGの"G Watch"が第一弾として発売されるようですが、
私としては今までのスマートウォッチは四角いモノが殆どだったので、やはり丸型の"Moto 360"に興味があったり。((o(´∀`)o))ワクワク
正式版のSDKも楽しみです。

2014/02/01

AndroidでTesseract-OCRを用いてカメラで光学文字認識をしてみた

AndroidでTesseract-OCRを使って、カメラで撮影した画像からOCR(光学文字認識)をしてみました。

"Tesseract-OCR"はOCRエンジンであり、元々HPによって開発され、OSS化されて今はGoogleがメインメンテナとなっています。
このTesseract-OCRをAndroidでNDKとして利用するためのライブラリが "tesseract-android-tools"です。

尚、本記事は Android SDK、GNU make、Awk、Gitがインストールされていることが前提です。また、OS環境としてLinux(Arch Linux x64)を使っています。

まずは、"Android NDK"をダウンロードします。
(すでにAndroid NDKをセットアップしていれば、この手順は不要です。)
今回は、Linux x64向けの最新版である "android-ndk-r9c-linux-x86_64.tar.bz2"を用いました。
さらにダウンロードしたアーカイブを展開し、これに含まれる"ndk-build"コマンドを利用できるようにPATHを通しておきます。
$ wget android-ndk-r9c-linux-x86_64.tar.bz2
$ tar jxf android-ndk-r9c-linux-x86_64.tar.bz2
$ sudo mv android-ndk-r9c/ /opt/
$ echo 'export PATH=$PATH:/opt/android-ndk-r9c' >> ~/.bashrc
$ echo 'export NDKROOT=$PATH:/opt/android-ndk-r9c' >> ~/.bashrc
$ source ~/.bashrc

次に、"tesseract-android-tools"を...
...のはずですが、執筆現在、Android NDK r9 でうまくビルドできませんでした。

代わりに、rmtheis 氏によってForkされたプロジェクトが公開されていますので、そちらを使わせていただくことにします。尚、このプロジェクトにはTesseract、Leptonica、その他の必要なファイルが同梱されています。
$ git clone  https://github.com/rmtheis/tess-two.git
$ cd tess-two/tess-two/

あとは READMEファイルのとおりにビルドを進めていきます。
但し、ここでAndroid SDKのAPI level 8がインストールされていないとエラーが発生しましたので、project.propertiesを書き換えることで対処しておきます。(自分のPCにインストールしておいたAPI levelに書き換えてください。)
--- project.properties
+++ project.properties
@@ -9,4 +9,4 @@
 android.library=true
 # Project target.
-target=android-8
+target=android-10
さらにコマンドを実行します。
$ ndk-build
$ android update project --path .
$ ant release

次に、Eclipseでプロジェクトをインポートします。
先ほどndk-build した "tess-two"プロジェクトを、Eclipse上で"Androidプロジェクト"としてインポートします。
インポートされたら、プロジェクトのプロパティで"ライブラリ"扱いになっているかを確認します。
Eclipse上でプロジェクト"tess-two"をインポートしたら、
プロジェクトのプロパティで"ライブラリー"にチェックが入っていることを確認する。

あとは、Androidアプリケーションを書きます。
今回は、最低限の簡単なサンプルアプリケーションを作ってみましたので、
一式をGitHubのリポジトリとして公開しておきました:
https://github.com/mugifly/android_tesseract-ocr_test
ご自由に git cloneして、動作を試したり改変したりしてご利用ください。

尚、このAndroidアプリケーションプロジェクトのほうでは、先ほどのライブラリプロジェクト"tess-two"をライブラリーとして追加しておきます。
Androidアプリケーションプロジェクトのプロパティで
使用するライブラリーとして先ほどの"tess-two"プロジェクトを追加する。
さらに、"tesseract-ocr"の学習データをダウンロードします。
日本語の学習データは http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.jpn.tar.gz です。
これをダウンロードして展開すると"jpn.traineddata"というファイルがあります。

このファイルを、先ほどのAndroidアプリケーションプロジェクト内の"assets"ディレクトリ内にコピーしておきます。
Androidアプリケーションプロジェクトに"assets"フォルダを作り、
そこに"jpn.traineddata "をコピーしておく。
※ assets内の学習データを直接Tesseract-OCRで読み込めるようにするには、
tess-two (tesseract-android-tools)を改変する必要がありそうでしたので、
代わりに私が作成したサンプルアプリケーションでは、起動時にassets内の学習データをSDカード上にコピーする処理を実装しておきました。

尚、学習データがないと当然ながらOCR処理でエラーが発生します。ご注意下さい。

あとはAndroidアプリケーションプロジェクトをビルドするだけです。
NDKを用いたアプリケーションなので、ビルドに少し時間がかかります。

さて、写真を撮って文字認識をしてみます...。
尚、今回は面倒くさかったので、実機ではなくAndroidの開発用エミュレータを用いました。カメラは適当にあったWebカメラ QCam S7500 で、解像度はVGAに落として撮影しています。


OCRをかける前に二値化処理を行い、さらに数字だけに絞ってOCRをかけています。
適当に写真を撮った割には、まあまあの認識精度だと思いますが、
やはり、前処理(傾き、歪みとか、二値化とか...)について改良する余地がありそうです。

また、手書きした文字についてはうまく読み取りできませんでしたが、手書きの文字ばかりを集めて学習データを生成すれば、不可能ではないようです。
(参照: tesseract for handwriting recognition)

それでは (^ ^)♪

参考にさせていただいたページ (感謝♪):

2014/01/30

Arduino Pro Mini + Felica Plug でNFC-F/Type3としてAndroid端末から読み書き

Felica Plug (RC-S802) を Arduino Pro Mini (328 3.3V/8Mhz) で制御して
仮想的な NFC-F/Type 3カードとし、
NFC対応のAndroid端末(GALAXY NEXUS)から読み書きしてみました。

(今回使用したAndroidアプリは、NXPの"NFC TagWriter"です。)

今回用いたモノ:
  • "Arduino Pro Mini 328 8Mhz 3.3V"
    Felica Plugは1.8~3.7V動作の為、5VのArduinoボードだとレベル変換が必要となります。その点、このボードは3.3V動作なのでそのまま使えます。クロックも8Mhzで省電力です。
  • "Felica Plug RC-S802"
    マイコンと接続して、Felicaカードとして振る舞えるモジュール。
  • "FeliCa Plug ピッチ変換基板 (フラットケーブル付)"
    便利なピッチ変換基板があるので使うことにしました。FFC付きです。
  • ジャンパワイヤ、ピンソケット 等々...
尚、Arduino Pro MiniにはUSB端子がないので、アダプタとして
今回はスイッチサイエンスのFTDI USBシリアル変換アダプターを使いました。

以下、手順を簡単に説明します。

2014/01/19

進数計算のAndroidアプリ bin.Calc を公開しました

このブログでAndroidの話ははじめてかもしれないですね。
今日、"bin.Calc"という進数計算のAndroidアプリを公開しました。


bin.Calcの特徴は、シンプルで実用的かつAndroidらしいUIデザインを目指した事と
小数に対応している事、進数変換の手順を表示できる事です。


進数変換の手順表示はあとづけ感満載ですが (^^;)

実はbin.Calcのコードを書き始めたのは2012年の秋だったのですが、
途中、他の開発に取り組んでいて放置していた時期もあり...右往左往があって...
先日からまた少しずつコードを書き足し、やっと公開することができました。
しばらく間をあけても必ずいつか形にする。それを一つの目標にしています(笑)

テストはしていますが、もしかしたらまだ不具合が隠れているかもしれません。
また、タブレットへの最適化や横画面への対応、計算精度など
不足している点も少なからずあるとは思います。
皆さまからのフィードバックをお待ちしております m(_ _)m
(Google Playや、このブログ、Twitter、... どこからでも構いません。)

オープンソース・ソフトウェアとして公開しておりますので
Pull Requestもお待ちしております: GitHub - bin.Calc_android

bin.Calc
https://play.google.com/store/apps/details?id=info.ohgita.bincalc_android