test

ビジネスと技術やってたらロボティクスにいきついた人のブログ

kinectでスライド送り

やりたいこと

手のジェスチャーデジタルサイネージのスライド送りをしたい

 

やり方の概要

kinectの骨格認識でジェスチャーを認識する。

認識したらキー入力をプレゼンテーションアプリに送る。

 

使ったもの

ハードウェア

kinect(v1)

・PC(windows10)

・ディスプレイ

 

ソフトウェア

Visual studio(C#で書きました)

KinectSDK

https://www.microsoft.com/en-us/download/details.aspx?id=40278

v2系のSDKはv2系のkinectでしか動かない。

※今回はv1のkinectなのでv1.8のSDKを使用した

 

アルゴリズム概要

アプリを起動しウィンドウを開くイベントがあったら

各種変数を初期化し、キネクトを起動する

 

キネクトが骨格情報を取得したイベントがあったら

手首と肩の位置(X座標)を配列に10フレーム分記録する(キネクトは30fps)

手首と肩の相対位置(のX成分)も同様に記録する

相対位置の配列の最初と最後でX成分の符号が異なれば動作があったと判定

最初と最後の相対位置の差がしきい値以上で負なら右から左へのスワイプと判定

スワイプと判定したら、左へのスワイプならキーボードの下矢印キーを

右へのスワイプならキーボードの上矢印キーを、アクティブになっているアプリケーションに送る

キーを送ったら1秒間は動作を停止する

 

 

わかったこと

・関節の位置を使えば結構なジェスチャーは表現できそう

ユーザーに予め約束したジェスチャーをしてもらう分にはこれ以上の機械学習などは不要。

ユーザーが無意識に出す動作を拾うのは、難しいかも。

予め動作の特徴がわからなければ難しい。

この点は機械学習で克服の可能性あり。

 

課題

キネクトは骨格しかわからず、例えば手の指関節はわからない。

やろうと思ったら自分で認識のためのコードがいる。

測距のアルゴリズム的に、指の影が見えてしまうので誤検知がありそう。

最近のデプスカメラはハンドトラッキングがデフォルトで提供されてる。

例えば https://www.moguravr.com/leap-motion-2/

MSも開発中らしい。

 

・コードが汚い。

C#に不慣れすぎる

forループがすごくネストしていて美しくない。

4種類のジェスチャーを統一したコードでかけるはず。

 

・不感時間が長い

不感時間をゼロにすると不安定になる。(一回のジェスチャーで複数回キー入力が送られる等)

安全みて1秒にしているけど、もっと短くできないものか

スライド送るときは大量に送りたいこともあるだろう。

 

しきい値等のパラメータ調整が必要

自分でテストしながら調整した。

他人のスワイプとは少し違う可能性がある。

ただ、ここも敏感すぎず鈍感すぎない絶妙な値にしなくてはならない。

コードを直さなくてもアプリ上で設定できるようにすればマシかもしれない。

 

コード

signage_control/signage_ctrl at develop · nagiton/signage_control · GitHub

1枚のRGB画像に距離の情報を入れる[未完・打ち切り]

モチベーション

夏休みの自由研究として機械学習っぽいことをしてみたい。

 

ロボットやるときに、画像から物体までの距離を推定できれば、特に動作の計画を立てるのにかなり使い手がありそうで。

例えば、走行計画作るとか、掴むにしても掴む場所を決めたりとか。

そんなことを1枚の画像でできちゃったら素敵やん?

 

あとついでにせっかくtensorflow使えるようになったし練習もしたいし。

 

 

手法の概略

[1806.11430] Towards real-time unsupervised monocular depth estimation on CPU

基本的にはこれをいじっていくつもり。

教師なしCNNですね。

 

[1609.03677] Unsupervised Monocular Depth Estimation with Left-Right Consistency

この論文の手法で使われてるネットワークを改良したという認識。

まだ勉強中。

 

基本的な考え方は

「ステレオカメラで撮影した画像のペアをたくさん持っている前提があったとして、

片方の画像からもう片方の画像を生成する視差を画像パターンから推定できれば

視差は物体との距離に依存するので、物体との距離を推定できるだろう」

というもの。

 

(論文とは違うnotationを使います。論文のは慣習?なのかもしれないけど、自分には馴染めないので・・・)

I^l, I^rをそれぞれ左側のカメラで撮った画像、右側で撮った画像とする。

このときI^l, I^rは(縦のピクセル数)x(横のピクセル数)x(色の数、普通は3)次元の3階のテンソルだと思えば良い。

 

左右のカメラから撮った画像のズレの量は以下のように考えればいい・

・カメラが水平に揃っているならば、上下方向へのズレはない

・左右方向のズレの量dは以下のように計算される

 d=\frac{fb}{D}

ここでDはカメラから被写体までの距離。

bは2つのカメラ間の距離

fはカメラの焦点距離。2つのカメラは同じ焦点距離を持つとする。

dは一般に視差と呼ばれる量である。

参考:http://www.topic.ad.jp/sice/htdocs/papers/295/295-7.pdf

 

ここに、画像の上からi番目、左からj番目のピクセルに対して定義される視差を表現する2階のテンソルd^l, d^rを、

d^l_{ij}I^r_{ij}=I^r_{ij+d^l_{ij}}=I^l_{ij},\ d^r_{ij}I^l_{ij}=I^l_{ij-d^r_{ij}}=I^r_{ij}

となるようになんとか取る。

(符号に注意。dが正になるようにとった。)

 

注:もし、2つのd^l, d^rが上記を満たすように取られていれば2つは独立ではない。

上の変換を2回やることで

 I^l_{i,\ j}=I^r_{i,\ j+d^l_{ij}}=I^l_{i,\ j+d^l_{ij}-d^l_{i,\ j+d^l_{ij}}}

であるから

d^l_{ij}-d^l_{i,\ j+d^l_{ij}}=0

 注:ただし、d^l, d^rを学習によってそれぞれ別に推定した場合、上述の「整合性」がとられているとは限らない。

 

このテンソルd^l, d^rが推定できれば、 d=\frac{fb}{D}の関係式から、各ピクセルの被写体からの距離が推定できる。

じゃあd^l, d^r、どちらを使えばいいかと言うと、I^lにはd^l、逆は逆らしい。

※この点が僕にはよくわからなかった。

 

 

学習させるネットワーク

インプットとアウトプットの関係は以下の図

 

 

f:id:nabion:20180826235323p:plain

[1609.03677] Unsupervised Monocular Depth Estimation with Left-Right Consistencyより。

左下のI^lからd^l, d^rを推定して、そこから生成される画像とI^l, I^rを比較する。(コスト関数はI^l, I^rと生成される画像の「差」の項をもつ)

まんなかのボウリングのストライクみたいなマークはネットワークです。

ここは教師あり学習ですね。

(教師なしと論文が主張するのは、距離のデータをインプットに使っていないから)

左右両方やって、コンシステンシーを確認しながら学習するのがポイントのようです。

(コスト関数は|d^l_{ij}-d^l_{i,\ j+d^l_{ij}}|に比例する項をもつ)

 

ネットワークのアーキテクチャはこんな感じ

f:id:nabion:20180827000135p:plain

L6はストライドが2の畳み込みを6回やったあとにさらに畳み込み層で特徴を抽出してますので、比較的広い領域の特徴に着目していることになります。

以降、上の層ほど細かい領域に着目して特徴抽出する構造になってます。

 

 

 試食

[1609.03677] Unsupervised Monocular Depth Estimation with Left-Right Consistency

の方のgithubにとりあえず1枚の画像で味見する方法があったので使ってみた。

※tensorflowのrestoreはcheckpointファイルの入ったフォルダのパスを指定するのではないことに注意。

例えば、checkpointの保存先がC直下だったとして、Cを指定するのではなく

"C://<checkpointファイルの拡張子を含めない名前>”

を指定する。これで割とハマった・・・。

※学習済みモデルはここにおいてあります

http://visual.cs.ucl.ac.uk/pubs/monoDepth/models

なんらかの理由でシェルスクリプトが動かなければここから取ってきましょう。

 

結果

こいつを・・・

f:id:nabion:20180902224054j:plainf:id:nabion:20180902224057p:plain

 こうじゃ!

詳細は潰れてるけど障害物見つけるぐらいならできそう。

 

あえてゲームのSSを食わせてみると

f:id:nabion:20180902224210p:plainf:id:nabion:20180902224218p:plain

さすがに厳しい。左下なんか完全に間違ってる。

 

f:id:nabion:20180902224334p:plainf:id:nabion:20180902224331p:plain

微妙にいけてる気がするFF7

一点透視図法っぽいのがいいんだろうか。

 

f:id:nabion:20180902224648j:plainf:id:nabion:20180902224655p:plain

自分が一番期待したのはこれ。

こういう画像から缶の形状がはっきりわかれば、ロボアームで掴むときに有用かなと。

結果はだめですねー。これじゃあ三角形に並んでるのはわかるかもしれないけど、缶1つ1つはぜんぜんわからん。

それに缶の模様の影響を受けてますね。これはいかん。

推定する先に、推定した結果から推定される対象物の形状は現実的なものなのか?という指標を入れればマシになるんだろうか?

 

今後

pydnetもやろうかと思いましたが、一旦ここで打ち切りかなあ。

再開するかもしれないけど。

次はネットワークのアーキテクチャ考えるとこからやりたい所存。

 

 参考文献

[1806.11430] Towards real-time unsupervised monocular depth estimation on CPU

[1609.03677] Unsupervised Monocular Depth Estimation with Left-Right Consistency

[1604.03650] Deep3D: Fully Automatic 2D-to-3D Video Conversion with Deep Convolutional Neural Networks

http://www.topic.ad.jp/sice/htdocs/papers/295/295-7.pdf

2018年 IPO成績表

 

目的

今ひとつ投資に踏み切れない人向けに、実際私がどれだけの収支を達成したか明らかにすることで、不安を取り除く。

 

投資の方針

特にリターンが大きい割に元本割れの確率が小さいIPOを主としていこうかと。

年120万の積立で30年後に1億円を達成できる水準である「年利7%」を目指します。

 

投資の目標リターン

5万円です。

今、投資用の資金が150万円あります。

年利7%を目指しますが、今年はもうすでに半年終わってしまったので、年末までに3.4%増やします。

150*0.034=5.1 なので、5万円。

そこそこのIPO一回でも当たれば届きそうですね!

達成してもIPO応募は年内続ける予定。

 

 

当選実績

当たったら書きます。

メルカリのIPOに応募して補欠までいけた話

IPOって何?

やさしいIPO株のはじめ方

例えばこんなサイトを参考に。

上場する寸前の企業の株を買って、上場した直後に売っぱらおうという戦略です。

上場する寸前の企業の株は割安な値付けがされ、したがって上場すると値上がる傾向が高い。

なので即売れば儲かることが多いです。

ぶっちゃけ、新しく上場する企業は業績への期待が大きく、想定以上の値上がりも多いというやり方。

ちなみに今年最高に儲かった銘柄は

HEROZ(4382)のIPO新規上場情報 | 株式・証券会社比較情報サイト 96ut.kabu

最低単位の45万円でIPO株を買って即売れば400万の儲け。

 

しかも、リターンの上振れの大きさの割に元本を割る可能性が低い。

FXの信用取引みたいな、レバレッジをめっちゃかけてリスクもリターンもでかくして、なんとか高リターンを得るみたいな手法ではない。

 

最強じゃん!なにこれ!

と思うなかれ。弱点はそもそも購入するのが運ゲーだということです。

IPOで株を買える可能性、よくわからんけど1%のオーダーみたいですね。

まあ別に外れても手数料がかかるわけでもないのでいいんですが。

 

 

メルカリのIPOの立ち回り

ぶっちゃけ、まずは口座をつくって始めてみよう!最適解じゃなくてもいいや!

という感じでした。

SBIと大和と岡三オンラインの口座は作れたので、SBIと大和証券からメルカリに応募。

メルカリは仮条件の上限が3000円だったので、最低単位の100株買うとして30万

30万円(+手数料?)をSBIと大和の口座に入金して応募!

 

考えて応募したわけじゃないんだけど、大和証券、メルカリIPOの主幹事だったんですね。

大和証券は今回市場に出る株の50%超が割り当てられてます。

対してSBIは0.26% 

当たる確率は証券会社に割り当てられる株の数に依存するので大和証券のほうが圧倒的に当たりやすいです。

 

補欠当選

で、大和証券から補欠当選でした。

補欠当選というのは、当選した人が株を実際に買わなかった場合、繰り上げで買えるという話です。

仕事が忙しかったり、儲からないと判断したりで株を買わないことというのは稀にあるようです。

 

補欠当選して、購入申し込みをすると、資金はその証券会社から動かせなくなります。

補欠から繰り上げになるかどうか確定するまでです。

なので、その期間は他の投資にその資金を使えません。IPOの応募機会も喪失するかも。

 

今回は、補欠当選に賭けたほうがイチから別の銘柄に応募するより可能性があると考えたので補欠当選から購入申し込みしました。

 

結果は繰り上げならずでしたがね!

落選がデフォなので気長にやります。年1件当たればいいかなぐらいの感じで。

この件で失った資金はゼロです。株も買ってないので手数料かかってません。

資金の移動も手数料ナシです。

 

 

次のムーブ

エーアイのIPO狙ってSBIにボーナス全ツッパして限度いっぱいまで応募します

大企業に入社してよかったこと 顕にならない「福利厚生」

いいことだけ列挙していく記事。

見つけ次第随時更新していく構え。

 

金銭面

・住宅ローンの金利が低い

不動産業界は魔界感があってあまり近寄りたくないけども

どうも大企業に勤務してると優遇金利ってのがたくさんつくらしい。

どれぐらい違うかは、その時点とか銀行によるのではっきりしたことは言えません。

そのうちなくなると言われてます。(これを理由にめっちゃ不動産営業される)

 

 

・MSオフィスが格安で更新できる(かも)

https://www.microsofthup.com/hupjp/hup.aspx?country_id=JP&culture=en-US

勤務先がMSオフィスを特定の契約形態で契約してる場合に使える。

1400円とかで最新のオフィスが1ライセンス分使えるようになる。

 

 

確定拠出年金が使える

退職金を現役時代から投資運用できますよという制度。

特定の年齢まで引き出せないが、会社が退職金の一部として運用資金を提供してくれる。

若いうちから複利パワーを利かすことができるかなり強い運用だと思う。

複利のパワーを舐めないほうがいい・・・。

 

この制度のいい点は2つあると思っていて、一つは退職金に複利パワーを乗せられること

もう一つは退職金がないことを前提に高給を貰う場合に比べ所得税が抑えられることです。

 

一般的な社会人が大金を得る機会として退職金というのがある。

定年までやったとしてまあ1000万を超えるレベルの金が入ってくることになる。

そんな金、あぶく銭だとして一挙に使うのは暴挙で、普通は老後の生活の足しにするだろう。

そしたらその年に使わないお金は貯蓄に回すか運用に回すかするだろう。

お金がないという理由で運用を敬遠してきた人には一大チャンス!

 

・・・なんだけど!バーンとぉ!株とか買っちゃうぜ!・・・・なんて普通はできない。

なぜならそれまで運用に慣れてこなかった人は運用のリスクが理解できないから。

自分がもしそうなったら、2つ可能性が考えられる

1つは、徹底的に守りに入って定期預金かせいぜい日本国債

もう1つは、お金が足りない危機感からリスクの高すぎるギャンブル商品に手を出して爆死

 

リスクとリターンのバランスをほどよくとりつつ、安定した老後を得るには?

僕の答えは複利の活用。

年3%増える運用でも、30年運用すれば2.4倍になるし、年5%なら4.3倍になる。

年3%とか5%とかの運用がどの程度リスクがあるかというと、経済状況にもよるんだけど、ギャンブルではないと思います。

 

いやいやいや、退職金は退職時に受け取るんだから、もう老後でしょ・・・・

というのが普通なんだけど、それを可能にするのが確定拠出年金です。

ね?ヤバいでしょ?

 

しかも、税金まで優遇されちゃう!

仮に、その退職金の運用分を普通に給料として受け取っていたら、当然所得税がかかる。

でも確定拠出年金、掛け金は全額所得控除です。

しかも運用ででた利益も非課税(通常は20%ぐらいの所得税がかかる)!

しかもいざ受給する段になっても税は優遇されます、たぶん(今のままいけばね)

厚生年金払うのがアホらしくなるレベルですまじで。

 

リスクがあるとすれば流動性リスクですかね。

退職まで引き出せないので、流動性は皆無です。

今日明日に!金が!いるんや!という人にはおすすめできない。

 

 

ちなみに制度を使わないで現役時代に金銭で受け取ることもできる。(ただし受け取ると所得税がかかる)

中小企業では使えないことが多いらしい。その場合、iDeCoなりを代わりに使うことになる。

 

 

生活面

・空港のラウンジサービスが使える

コーポレートカードと称して会社が従業員にクレジットカードをもたせてくれる事がある。

これがゴールドカードだったりする。

するとゴールド特典の空港ラウンジサービス利用券が従業員側の負担なく使える。

 

 ・エクスプレス予約サービスが使える

東海道新幹線予約+IC入場サービスです

通常年会費1080円かかるところが無料(会社もち)で使えたりします。

多少の割引料金で東海道新幹線に乗れるし、指定席とるのに追加の料金がかからないし

乗車変更も何度でもできるし、席の指定は何両目の何番の何列目までピンポイントで指定できるし周囲の混雑状況もわかる。

IC入場は最近他のサービスもできたらしいけど使ったことないです。。。

 

 

・寮・社宅・家賃補助がある

これ、つよいのはわかると思うけど、ここで浮かせた資金を運用に回せるというのがめちゃくちゃ強い。

この手の住宅補助が効くと、月2万とかで会社から通勤30分以内なところに住めます。

都内なら、月10万とか取られても不思議ないレベルなのにね。

それだけでも毎月8万x12ヶ月で年96万円は得してる。

で、この浮いた96万円、投資に回せるというのがさらにヤバイ。

定年まで投資するとして、30年で回すとして考えてください。複利30回来ますよ?

定年までに1億円作る方法

複利パワーはヤバいという話です。

えー、詐欺とかではないです・・・w

ボーナスの時期になったし、自分もいい年齢になってきたし、将来を考えて資産形成しなきゃなと思い立って計算してみた。

 

 

問題設定

毎年決まった額を投資に回すとして、いくらの投資額でどれぐらいの年利が見込める運用を行えば30年後に1億円の金融資産ができているか。

 

考え方

単純に数IIの数列ですよね。

年度の終わりに、前年度の運用総額がr倍されて、追加でb円積み立てるわけだから

漸化式として

a_{n+1} = ra_n +b

となる。

 

あとは一般項求めるなり、エクセルかなんかで適当に各項計算したりしてね。

 正体は等比級数です。

 

 

 計算結果など

・年120万貯めるよ!

毎月10万積み立てるやつですね。

この場合、年利6.3%の運用を目指せば30年目で資産が1億を突破します。

f:id:nabion:20180607154337p:plain

年利6.3%というのはどの程度現実的なのかというと・・・

どうなんでしょうね。確定拠出年金の説明なんかではリスクがあると説明される、株式への運用が必要になります。

インデックス連動型の投資信託を使うと

(例えば 『MSCI コクサイ・インデックス (KOKUSAI) (円)』 |株価指数

年率6%を上回ることは(ここ数年の動向では)十分現実的です。

1億円なんか俺みたいな平民に貯められるわけねーじゃん・・・と思ってたけど、こう見ると案外現実的かもね。

 

まあ30年間同じ投資手法が通用するかは神のみぞ知るですが・・・。

実際TOPIXなんか見てると、露骨にバブル期だけおかしいことになってるしね。

 

 

・定期預金で年120万貯めるよ!

今の金利を前提とすると、今どきは年利で0.01%とかそこらですね。

f:id:nabion:20180607155424p:plain

30年後の預金残高は3605万円で、利息分は5万円です。

あほくさ!

(インフレしないかぎり)元本が減るリスクがない以外はメリットが無いというのが私の見解。

 

 

・年間120万の積立をバフェットが運用した場合

wikipediaによると、投資の神ことバフェット神は40年間年利21%を達成したようです。

年利20%の場合は・・・

f:id:nabion:20180607155907p:plain

30年後の資産はなんと14億!!!

ふくりのちからってすげー!

年利20%なんて神じゃなきゃ実現できないと思って、そんな話にはでかいリスクがあるかサギだと思っておきましょうね。

 

 

・年利2%の場合、1億貯めるには?

2%というのは金融商品の中でもリスクが低いほうだと言われる国債で達成できる水準です。

いまだと米国債が近いかも。

この場合の資産推移はこんなかんじ

f:id:nabion:20180607160638p:plain

1億にするには年250万ぐらいの積立が必要です。

仮に年収1000万だったとして、額面の25%を貯蓄に回す計算。

独身なら頑張ればいける水準かも・・・?

 

 

・もし厚生年金に支払ってる分を年利5%の運用に回せたら

厚生年金保険料率は0.18です。これを労使で折半してます。

どういうことかというと、額面での給料の18%が日本年金機構に支払われてます。

そのうち半分が僕らが給与明細で「天引き」という形であらわに引かれてる額になります。

年収500万の人を雇ってる企業が日本年金機構に払ってるのは年間90万円

これをもし全部非雇用側が受け取れて運用に回せたら・・・?

f:id:nabion:20180607161537p:plain

30年後には5979万円の資産になります。

受け取る年金額をざっくり月20万だとすると、これは299ヶ月分、25年弱に相当する額になります。

年金の受給開始年齢は今は65歳なので、90歳まで生きてようやくペイするという。

わーお!どないなっとんねん!!!!

ちなみに利息なしだとしても、30年で2700万の積立になってるので、月20万の受給ではペイまでに12年、77歳です。

年利3%だと資産は4281万で、ペイまでに18年、83歳です。

 

日本人男性の平均寿命は80歳です。

年金滅ぶべし。

ラズパイをPCからLabVIEWで操作してLチカした話

LabVIEW信者なのでみんながpythonとかでやるところをLabVIEWでできないかなー!

とおもってやってみた。

 

・LINXを使う

LINX - Digilent/LabVIEW MakerHub - National Instruments

これです。

これを使うと、同じネットワークにつながっているラズパイにLabVIEWが入ってるPCからLabVIEWで書いたコードで命令できます。

ネットワーク切っても動くようにできるかは未検証。できるんじゃね?できないかなあ。

 

導入

LabVIEW 2014SP1(32bit、英語版)をインストールする

LabVIEWのバージョンを間違うと動きません!

何度も何度もインストールし直したりしました・・・。

もうほんと、バージョン間の互換性がいまいちなことさえなんとかできればLabVIEWは神なのになあ。

2014 SP1じゃなきゃだめだし、32bitじゃなきゃだめだし、英語版じゃなきゃだめです。やろうとするのはいいけど、多分躓くよ????

それ以外のバージョンで動かせたらマジで教えてください・・・。

 

LINXのチュートリアルに従う

LabVIEW for BeagleBone Black and Raspberry Pi 2 & 3 [LabVIEW MakerHub]

(英語だけど)上のビデオが超親切です。

このとーーーりにインストールしていけばOK

たぶんラズパイはもうOSインストール済みだと思うので、そこを飛ばす場合は

ラズパイのOSがRaspbianであることを確認しておいてね。

 

 

躓いたこと

・LINXからラズパイに繋がらない(SSHとかVNCではつながるのに)

LabVIEWのバージョン合わせたら治りました。

 2014  SP1, 32bit, English!!!!!!!!!!!!!!!!!!!!!!!!

 

・もう一個あるけど手元にメモがないので後で記載

LabVIEWのコードをラズパイにデプロイするときにエラー吐くやつだった。

ラズパイ側をいじくってなおしました。

その際のコードを追記します