月別アーカイブ: 2016年3月

画像分類アプリ 諦めました

今までAndroid上で動く画像分類アプリを作ろうと試行錯誤していましたが、就活が忙しくなってきたこと、完成の目処が立たないことからお蔵入りになりそうです。せっかく頑張ったのに陽の目を見ないのも悲しいのでせめて開発の過程で何を行い、何を学んだかをここに記したいと思います。

やろうとしていたこと

1.Android端末内の画像をサーバにアップロード

2.「Caffe」にて画像分類

※Caffe:機械学習で画像分類を行うツール。大量に用意した画像データをもとに機械学習を行うことで分類器を作成でき、この分類器に画像を投げると何が写っているのかを教えてくれる。

3.結果を端末で表示

たったこれだけ 超シンプル

辞める理由

1.精度が出ない

とりあえずこちらのデータセットを拝借し猫の品種を判別する分類器を作成してみたのですがどんな画像を投げても同じような値が出力されてまともに分類できませんでした。仕組みを理解せずブラックボックスのままツールを使用していたため改善策も思いつかず途方に暮れています。

2.学習にお金がかかる

分類器作成の際には膨大な量の処理を行うためハイスペックなマシンが必要です。AWSで無料で借りられるマシンではスペックが足りずスケールアップをする必要があるのですが、$0.23/時間の料金のマシンで12時間ほどかかります。また、学習終了時に外出していたり就寝していたりするとスケールダウンをするのが遅れるため余分に料金がかかってしまいます。大きな額ではないのですが貧乏学生には手痛い出費です。上手く行けば学習は一回だけで済むのですが、今回失敗した以上次成功するとも限らないためどの程度の費用がかかるか見通しもつきません。

3.意義を見出せない

先日公開された「Google Cloud Vision」のベータ版を使うと自分で分類器を用意しなくても簡単に画像分離ができてしまいます。Googleが提供しているAPIだけあって精度もべらぼうに高いです。こいつの存在を知った時モチベーションが崩れ落ちました。

やったこと

AWS

  • EC2でサーバを借りた(OSはUbuntu)
  • XAMPPのインストール
  • 固定IPアドレスの割り振り
  • Route53でドメインの取得

Android

  • ギャラリーを呼び出して端末内の画像選択
  • OK HTTPを用いた画像データのPOST
  • プログレスダイアログの表示
  • 画像分類ツール「Caffe」のインストール&学習 (これが一番辛かった)
  • PHPでコードの記述(echo、shell_exec、$_FILES)

おわりに

スーパープレゼンテーションというテレビ番組で機械学習による画像分類の存在を知ってすぐに「試してみたい!」と思いました。しかしネットを探しても素人が簡単に試す方法は見つからず、ツールのインストールから画像の用意、学習までを自分で行わなければいけませんでした。この面白い技術を誰でも手軽に使って遊べるようになればと思い今回のアプリ開発に着手したのですが、Cloud Visionがまさに私がやりたかったことを実現しており、わざわざ自作する必要もないのかなと思い開発を断念しました。完成させられなかったのは残念ですが勉強にはなったので良しとします。

Cloud Visionは従量課金制であること、サンプルを動かすにもある程度の知識を要することから誰もが使えるというわけではありませんが、今までよりもハードルはぐっと下がったように思います。時間ができたらCloud Visionを使ってブラウザ上で誰でも画像分類を試せるようにしたいなぁ(APIキーの秘匿とリクエストの制限がめんどくさそう)

【Skype】エラー:このコンピュータですでにサインインしています。サインアウトしてから、再度お試しください。

久しぶりにSkypeを起動したらログインができない状況に陥ったのでその対処法をメモしておきます。

症状

Skype起動後以下のメッセージが表示される。

「Skypeが開けませんでした。このコンピュータですでにサインインしています。サインアウトしてから、再度お試しください。」

無視してIDとパスワードを入力すると「サインインしています。」のメッセージが延々と表示されサインイン出来ない。

対処

エラーメッセージ中から察するに、前回のSkype終了時にきちんとサインアウトできていなかったためロックが掛かった状況になり、再度サインインができないのだと思います。

こちらの知恵袋によれば、\Users\ユーザ名\AppData\Roaming\Skype のフォルダを削除すればいいらしいです。(必要ならバックアップをとっておく)

ところが「live#3"アカウント名"」というフォルダだけは「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません」というメッセージが表示され削除できません。

タスクマネージャからSkypeを終了させても状況は変わらずで、バックグラウンドでSkypeのプロセスがまだ動いているようです。このプロセスを止める方法がわからなかったので、面倒ですがSkypeをアンインストールして再起動しました。再起動しないと残党プロセスを殲滅できないので注意。

すると先ほどのフォルダをが開放されるので削除し、Skypeを再度インストール。

ところがダウンロードページに置いてあるインストーラを使うと途中で処理が一向に進まなくなりました。そこでこちらのリンク先から「フルインストーラ」をクリックしてダウンロードします。文章中に約24MBとありますが実際には45MBありました。(2015.3)

無事インストールが終わりSkypeを起動。するとそこには待ち焦がれていたログイン画面が。エラーメッセージが無いって素晴らしい!
 

【Android Studio】エミュレータ内にファイルを転送する

Androidエミュレータ内でメディアファイルを扱いたいのにPCから転送する方法がわからない!ネットで探してみてもEclipseの記事ばかり出てくる!なんてことがありました。

様々な検索ワードを試して2時間。Android Studio使いがコマンドラインを使わずにエミュレータ、PC間でファイルのやり取りを行う方法が書かれた記事をようやく見つけたのでご紹介します。

Androidエミュレータ上のファイルをパソコンにコピーするにはSDKの「ddms」が便利 特集その3

リンク先の手順に従えば、簡単にファイル転送ができます。

当たり前ですが、ddms.batが格納されているフォルダは環境により異なりますので注意してください。
(私の場合は "C:\Users\ユーザ名\AppData\Local\Android\sdk\tools" にありました。)

なお、ファイルを送っても認識してくれない場合にはエミュレータを再起動してください。

 

【Android】Cloud Visionのサンプルを動かす

Google Cloud Visionのアンドロイド用サンプルプロジェクトを動かしてみたので手順を紹介します。

APIキーの取得

Cloud Vision APIの使い方まとめ (サンプルコード付き)

こちらのサイトを参考にAPIキーを作成します。

APIキーの種類一覧にAndroidキーがありますが気にせずブラウキーを作成してください。

最初Androidキーを発行して試したのですが、以下の様なリクエストが返されうまく実行できませんでした。

キーをブラウザキーに書き換えたらを問題なく動作。せっかくAndroidキーの取得方法をキャプチャ撮りながら記したのに全部無駄です(ぐちぐち

プロジェクトのインポート

次はAndroid Studioにサンプルプロジェクトをインポートします。

https://github.com/GoogleCloudPlatform/cloud-vision
グーグルのティムさんが作ってくれたサンプルです。リンク先で「Download ZIP」をクリックしありがたく頂戴しましょう。

ダウンロードが終わったらフォルダを解凍。フォルダ内にはアンドロイドだけでなくiOSやpython用のサンプルも有りますがそいつらは無視して

cloud-vision-master/android/CloudVision を

C:\Users\ユーザ名\AndroidStudioProjects

に移動。その後Android Studioを開き、スタート画面中の「Import Project」をクリック。

「CloudVision」を選択すればプロジェクトのインポート完了です。

最後に「MainActivity.java」
private static final String CLOUD_VISION_API_KEY = "YOUR_API_KEY";
のYOUR_API_KEYを取得したAPIキーに書き換えてください。

動かしてみる

準備が完了したので実際にアプリを動かしてみます。その際、実行環境のAPIレベルが22以上じゃないと動作しないので注意してください。

アプリ起動時の画面は以下のとおり。非常にシンプルです。

amarecco0052

ピンク色のボタンを押し、端末内の画像を選択すれば分類結果が表示されます。

amarecco0054

脅威の的中率。ちなみにkoratとはロシアンブルーにそっくりな猫の種類らしいです。

amarecco0053

沢山の猫の種類が候補に上がっています。この子は雑種なので当たりとも外れとも言えない。

amarecco0056

今度はロシアンブルーと雑種の組み合わせ。やはり雑種の場合は種類を絞り込めないようです。

どの画像でも猫が写っていることを判別できました。さすがGoogle。ただ品種の判別に関しては雑種に対して1.000の純血種のスコアがついてしまうのはどうなのかと思ったり。あとは分類候補に大別と小別が混在しているので何かに応用する際には結果の取捨選択が必要そう。

とはいれこれだけの精度で画像分類できるCloud Visionはやはりすごいです。インスタグラムの投稿をAPIで大量取得してCloud Visionにかければ流行を機械的に分析できたりしないかな。夢が広がりんぐ。

ひと月あたりの利用枚数が1000枚までなら料金は発生しませんので興味のある方は是非試してみてください。未来感ハンパねぇですよ。

つなぎなぎ

塵屑と粒子の端 つなぎ合わせて♪

ハイ、前回の記事投稿から5日が経ってしまいました。あれから進展はないのですが新参ブログは定期的に更新しないとSEO的によろしくないっぽいのでつなぎの記事を書きます。

Google Cloud Visionの存在を知ってからと使ってみたくてウズウズしています。ところがGoogle Platformを利用するにはクレジットカードの登録が必要になります。

AWSと違って一度登録したカード情報は削除ができないらしく、Vプリカの利用は好ましくありません。利用する側としても月額払いをプリペイドカードで行うと残高が足りなくなる恐れがあったり、買い足す際に手数料がかかったりと不便ですのでこれを機にクレジットカードを申し込みました。

クレジットカードの魔力とは恐ろしいもので、申し込み直後、気づいたら音楽のダンロード販売サイトやAmazonのKindleストアを巡回していました。人は支払手段を得ると購買意欲を刺激されてしまうんですね。

カードが手元に届いたら利用状況をモニタリングする手段を考えて自制する必要がありそうです。