2015年5月27日水曜日

[Android]Error:Unable to make the module が出た場合の対処方法について

参考URL:
http://stackoverflow.com/questions/28193980/unable-to-make-the-module-related-gradle-configuration-was-not-found-please-r

Android Studioを更新したときに次のエラーが出てしまいました。
そのときに行った対処方法を記載します。

エラー内容:
Error:Unable to make the module: プロジェクト名, related gradle configuration was not found.
Please, re-import the Gradle project and try again.

対応方法を要約するとGradleプロジェクトをリフレッシュするという方法です。

1. Gradleビューを開く

  ツールバーで [View] > [Tool Windows] > [Gradle] をクリックしてください。





2. リフレッシュする

  Gradle projectsウィンドウでプロジェクトをリフレッシュしてください。
  下記図の赤い丸に囲まれたアイコンをクリックすればOKです。




この手順で私は対応できました。
困っている方は試してみてください。


2015年5月24日日曜日

【機械学習 序説】

 ジェスチャ周りをリサーチしている太田です。

 ここ1ヶ月ほど、Myo で取得した筋電位(詳しくはこちら)からハンド・ジェスチャを特定する為に機械学習の導入を試みてます。

 実装のためにいろいろなブログやサイトを閲覧してきましたが、どうも偏っているものが多い様に感じました。もちろん、大半は「こうしたら使えるよ」系のモノ。あるいは少数ですが、数式をゴリゴリ示す理論系のモノ。残念ながら、両者をつなぐ様なサイトがあまり見受けられませんでした。

 そこで今回は、機械学習の前座として、「こんな知識が無いと理論を理解するのは辛いよ」的な前提知識を紹介していきます。なので、「機械学習がどのようにして事例判断を行うか」をザックリと説明できる方には当たり前、「原理なんて興味ないわ」って方にはどうでも良い話です。ごめんなさい。m(_ _)m

1)線型代数学
 理系大学生ならばおそらく1・2年で必ずや履修しているであろう単元ですね。
 機械学習においては、「多次元」問題を扱うために必須です。いきなり「多次元」ときましたが何も恐れることはありません。プログラムに学習してほしい「要素の数」のことです。例えば、人の肥満度を測るために、「身長」「体重」「体脂肪率」「性別」を学習して欲しい要素とすれば4次元になります。こうした、全く性質の異なる要素を「同時」に扱うために線形代数が必要になります。細かいところは理解しなくても、行列の表現・逆行列・転置行列・固有値・固有ベクトル・規格化などがあればいいでしょう。

2)統計学
 こちらは、文理問わず必要とされる機会が多い分野ですね。
 学習における正誤の判定を、命題の真偽として考えるならば、統計学に基づく「検定」が必要になるでしょう。専門用語が多いのでとっつきにくいですが、普段持ち合わせている「感覚」を「数学的に表現する」ことを目指しているだけです。数学的な手順に目が行きがちですが、むしろ「感覚」をもとにした概念や考え方を捉えておくと、機械学習の理解が深まるように思います。

3)数値解析学
 おそらく、機械学習において最も核となる部分です。
 コンピュータは四則演算(加減乗除)によって離散的にしか数値を扱うことができません。(僕の知る範囲では・・・ですが。汗)つまり、コンピュータには無理数(整数同士の割り算で表せない数)が理解できないのです。ということは、コンピュータのは2次方程式を解く事が出来ないのです。我々人間であれば、係数がどんなものであれ、解の公式を用いれば平方根によって簡単に解が求まるのに。(いや、面倒な場合があるかもしれないけど、「公式を用いればいい」という単純さにおいて「簡単」と表現しました。)
 2次方程式を解くという問いに対して「誤差」を許容する事にしましょう。小さい事に目を瞑る事にして、「だいたい」の値を求める事は出来ないか。計算可能な「ある値」から出発して、少しずつ「答え」に近ずく事は出来ないか。これこそが「学習」の肝です。つまり、間違ってもいいから一旦やってみて、間違っていたら少し修正して再チャレンジ!このプロセスを繰り返す事によって、少なからず間違っているんだけども「答えに近い」状態にする事、が「学習」です。
 残念ながら人間にはこんな事できません。いや、少なくとも僕は、何度やってもやり直しを命じられるなんて耐えられません。が、コンピュータは人間のよう(僕のように)に「飽きる」ことがありません。電気さえ供給してやれば、おそらく何万回でも何億回でも同じ操作をしてくれます。
 こうした考えのもと、「ある手順にのっとって何度も繰り返す事によって2次方程式を解きましょう」というのが、ニュートン法です。解の公式が数値の計算手順であるのに対して、ニュートン法は解を求める操作手順を示しています。

 さてさて話が長くなりましたが、肝となるエッセンセスはここに挙げた3要素だと思います。あとはどの様にミックスされるか。あるいは操作手順の中でどんな順番に処理を行うかです。少なくともニュートン法さえ知っていれば、機械学習の勉強の際に迷子になる事はないでしょう。


 以上、サムズアップするシュワちゃんを理解するために必要な最低限の知識でした!(ターミネータ2より) 

2015年5月18日月曜日

Unity5でのアニメーション

Unity5にアップデートされてAnimatorが新しくなりました
今回はAnimatorをさわってみようと思います


やりたいこと
 ・Stayを起点としてFireAttack , TailAttackをランダムに実行させる


①3種類のアニメーションを用意

②ParametersにisFireAttackとisTailAttackをTrigger型で追加

③StayからFireAttackへ伸びる矢印を選択しInspectorのConditionsにisFireballAttackを追加
    ※FireAttackからStayへ伸びる矢印には追加しません

④StayからTailAttackへ伸びる矢印を選択しInspectorのConditionsにisTailAttackを追加
    ※TailAttackからStayへ伸びる矢印には追加しません

⑤csファイルを作り下記スクリプトをコピペ

using UnityEngine;
using System.Collections;

public class DragonMotionManagement : StateMachineBehaviour
{

public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
//新しいステートに移り変わった時に実行
int MotionNumber = 0;
MotionNumber = Random.Range (0, 2);
if (MotionNumber == 0) {
animator.SetTrigger ("isFireAttack");
}
if (MotionNumber == 1) {
animator.SetTrigger ("isTailAttack");
}
}
}

⑥矢印周辺の何もないところをクリックしてInspectorに⑤で作ったcsファイルを追加

⑦実行確認


これでStayを起点としてFireAttack , TrailAttackがランダムに実行されます
Unity4のときはモーションの終わりを取るのが面倒でしたがとても簡単になりました
他にも実行するタイミングを設定できるので下記参考サイトを見てやってみて下さい


参考サイト
 http://japan.unity3d.com/blog/?p=1672
 http://riberunn50.blog.fc2.com/blog-entry-25.html
 http://qiita.com/toRisouP/items/b6540b7f514d18b9a426


2015年5月12日火曜日

DroidKaigiに参加してきました その1

今更ですがDroidKaigiに参加した報告です。
記憶があいまいになってるので内容には気を付けてください(笑
しかし、DroidKaigiに参加できて本当に幸運でした。
また開催されることがあれば例え有料だろうが参加したいです。

資料
https://twitter.com/DroidKaigi

当日の資料はDroidKaigi(Official)様が公開先を書いてくれてますので、
そこをご参照ください。

私が参加したセッションは次の通りです。

[ROOM:A]開発を効率的に進められるまでの道程
[ROOM:B]ゲームアプリケーションのアップデートサイクル
[ROOM:B]初学者にうれしいAndroid開発環境
[ROOM:B]Android学ぶ君へ。生き抜くためのナレッジ共有
[ROOM:B]新言語KotlinでAndroidプログラミング
[ROOM:B]Bitmapは怖くない。
[ROOM:B]モバイルにおける電力最適化のための1プラクティス
[ROOM:B]デザイナーがXMLを書くことでできる改善しやすいアプリ開発
[ROOM:B]JellyBeanとKitKatで実現するマテリアルデザイン
[ROOM:B]僕らのデータ同期プラクティス
[ROOM:B]AndroidとSELinux

ほぼ B ですね(笑
本音を言うと実は A の方が興味のあるタイトルが多かったのですが、
興味のある内容は後から自分で調べるだろう!ということで、
逆を選んでいった結果ほぼ B になりました。
そのおかげか、今まで知らなかったことばかり学べたのでいい選択だったと思います。


■[ROOM:A]開発を効率的に進められるまでの道程
http://www.slideshare.net/TakaoSumitomo/ss-47393000

要約:テストを書け!とにかくテストを書け!!

テストがあるだけでどれだけ幸せなことかっていう体験をしないとテストの重要性はわからないだろうなぁ。
テスト大事ですよ!
自分のために書くのですよ!!


■[ROOM:B]ゲームアプリケーションのアップデートサイクル
http://www.slideshare.net/kentaroiizuka/droidkaigi

私たちmeleapでも将来必要になる技術であったため、
この話を聞くことができてよかったです。
Unity+Androidという組み合わせですが、
2つのプロジェクトを組み合わせるときに考慮が必要になりそうですね。

セッションで紹介していた「ゲーム・映像制作パイプライン構築マニュアル」を読んでから、
再度このセッションの内容を学びなおそうと思います。
meleapで環境構築したら、そのときは紹介しますね。


■[ROOM:B]初学者にうれしいAndroid開発環境
http://www.slideshare.net/hiroyukikusu/droidkaigi2015androidmvc

便利ツール・ライブラリの紹介でした。
メモには次の内容が。

・Butter Knife
・Genymotion
・Gson

うん。どれも便利ですね。
知ってると知らないのでは、
それだけで大きな差が生まれそうです。
※私は当日まで知らなかったです。。。
知らないというのは罪ですね。


■[ROOM:B]Android学ぶ君へ。生き抜くためのナレッジ共有
https://github.com/operando/DroidKaigi

要約:鍛えたいならば、
      Androidソースコード検索サービスを利用して、
      たくさんのソースコードに触れよう!

発表者の方は今後IOSの勉強を進めるそうです(笑
Androidだけで生きていくのも大変だということ。


以下、また次回...
■[ROOM:B]新言語KotlinでAndroidプログラミング
■[ROOM:B]Bitmapは怖くない。
■[ROOM:B]モバイルにおける電力最適化のための1プラクティス
■[ROOM:B]デザイナーがXMLを書くことでできる改善しやすいアプリ開発
■[ROOM:B]JellyBeanとKitKatで実現するマテリアルデザイン
■[ROOM:B]僕らのデータ同期プラクティス
■[ROOM:B]AndroidとSELinux

2015年5月2日土曜日

MyoをハックしてAndroidで筋電位データを取得し、ポーズ検出できるようにしてみた。

Myoってこんなのです。


この動画の中でいろんな手のポーズが認識されているようにみえますが、
現時点で実際にMyoで認識できるポーズは、
Fist、Spread、Rest、Wave In、Wave Outの5パターンだけです。
(グー、パー、力抜いてる、手を内側に折り曲げる・外側に折り曲げる)

自分だけの自由なポーズの登録や認識はできません。

今回僕らがやったことにより、
MyoをつけていればAndroidアプリで忍術の印を結んで技を発動させる!
なんてことも実現できます。

ナルトごっこが捗りますね!

チャクラ溜めて~~~印をいくつか結んで~~~
火遁豪火球の術!!!ゴオオオオオ!!!!!

なんてね!にんにん!



さて、ここからはおもいっきりエンジニアさん向けです。

モーション認識デバイスMyoに興味ある!
それをAndroidで使いたい!
加えてMyoのデフォルト5パターンのポーズじゃ満足できない!
という方のためのアプリの紹介です。

めっちゃニッチ!笑

Myoを触っている人は知っていると思いますが、
このデバイスは筋電位データを取得できます。
そして、現時点ではWindows、Mac、そして最近 iOSでも
販売元であるThalmic Labの公式SDKで
筋電位データへアクセスできるようになりましたね。

ただ、AndroidではThalmic Labの公式SDKだと筋電位データにアクセスできません。
開発フォーラムで質問しましたが、Thalmic Labのアップデートプランの中に、
Android端末で筋電位データへアクセスできるようにする、という項目はないようです。

その主な理由は、AndroidのBluetooth仕様が貧弱で、授受できるデータ量が少ないため、
他デバイスに比べて筋電位データの更新頻度が低くなり、
ポーズ認識などでやれることが限られてしまうこと、にあるそうです。

おそらくThalmic Labの開発メンバーも困っているみたいです。

公式SDKのアップデートを待っていてはいつやれるようになるかわかりません。

そこで、僕らはMyoのBluetooth送受信データをハックし、
Android端末で筋電位データへアクセスできるようにしました。
そして、3パターンのポーズを自由に登録し、ポーズ認識できるようになってます。
機械学習を組み込んでいないが故に、誰でも自分のポーズをお手軽に登録し、
登録したポーズを認識することができます。

コードはgithubで公開してます。

Android Studioのプロジェクトデータ形式で公開しているので、
ここまで読んでくださっている人ならば、すぐにAndroid端末にインストールできるはずです。

公開しているアプリの使い方は、この動画の通りです。



ぜひ使ってみて下さい。

公開しているコードにはまだ課題もあります。
一番大きな課題としては、ポーズ検出を何回かやっていると、筋電位データ授受が停止します。
挙動を見る限りでは筋電位データが溢れかえっているような感じです。(外れかも)

解決策をご存知の方はコメントやgithubにプッシュ頂けるとめっちゃありがたいです!
それだけでなく、どんなフィードバックでも頂けたらすっごくありがたいです。

また、少しだけ近況を。
4月から新メンバーが加入してくれたおかげで、弊社のHADO開発もガンガン進んでます。
HADOの詳細はこちら

テストがめっちゃ楽しい!
そして技を毎日出しまくるため、腕が太くなってきてます。
また、スウェーや反復横跳びの動きで攻撃をよけたりするので汗だくになってるw

アプリのテストで体が鍛えられるなんて斬新!
うちの開発メンバーはテストすればするほど健康になっちゃうね。

それではまた!