寝ゲロ部屋

しがないオープン系SE見習いの雑記(アルコール含)

あいてぃ

変化の激しいWeb業界では継続的インテグレーション開発も底が見えてきて

結合試験の技法の1つであると情報系の教科書に書かれそうな時代。

 

今でもVBAで文字列を検索するメソッドを新規開発の度に起こしているような開発は

二次受けですら受けずに三次受け以下の高卒プログラマに投げられている。

 

プログラマ・SE志望の学生で自己啓発本読んでる暇があるなら

サーバ立ててインフラ・セキュリティを遊びで学んだり、

GitHubで某企業のJavaノックのブランチ切ってマージリクエストを出してみたり、

Arduinoで面白いことしてみたり、

Androidアプリ作ってみたり、

Maven repository見ながら楽に実装できそうなライブラリ探してみたり・・・

エロゲの認証を趣味の範囲内(ネットに放流しない)で突破してみたり、

MODゲーのスクリプトを組んでも良い。

とにかく、自分にとって新しいコードを触るか眺める時間を増やした方が

この業界で潰しが効くように思える。

 

意識高い自己啓発本読んでも、

結局そこで得た知識は自分の経験と性格に合ってることが前提で、

相手方の空気を読んで小出しに交渉していくのが日本企業の文化だから

よっぽどのエリートコースでもない限り時間の無駄遣いだなと思う。

そんな本を家に帰って読んでる暇があったらエロい動画見て気持ち良くなったり、

アイマス見てこれが継続的インテグレーションの本来あるべき姿だよと涙したり、

ストレス発散の時間に使った方がまだマシだ。

 

結局話の着地点が定まらないままペーペーで頭が悪い僕はゲロを吐きながら寝る。

冷やしSNS始めました

仕事の性質上、酒の勢いでゲロると首が飛ぶと警告を受けたためSNSを片っ端から辞めました。

 

今、思い返せば自分の時間を全く作れなかったこともあって

自分自身を奮い立たせるために意識高そうなことを

無理やり捻り出していたようなツイートばかりで頭が悪かった気がします。

(若かった、とも言う。)

 

お酒も付き合い以外は飲まないようにしました。

 

通勤時間が伸びました。

 

残業が増えました。

 

ゲームする体力も時間も無いため、

残業代でガチャを回すことだけが趣味になりつつあります。

 

愚痴れる相手もおらず、軽い睡眠障害の気があって平日きついですねー。

 

ぐはーっ・・・

【ハニセレ・JG2版権キャラクリ】 大石泉祭り【モバマス】

f:id:Haru10nari:20160925202446p:plain

アイドルマスターシンデレラガールズより 大石泉

です。誰得だって?俺得なんだよなぁ…

一応R-18なのでMODってどう使うんですか?ってレベルの方は回れ右で。

続きを読む

大石泉 縦SS(1200x1920)

担当がデレステに来ましたのでSS撮りまくりました。

一人でも多くの皆様に大石泉というアイドルの良さを知っていただければ、と思います。

 

(フルサイズですのでwifi環境やPCにて御覧ください)

続きを読む

Kinect for Windows v1.8 スケルトントラッキング(骨格認識) サンプルプログラム (C++) ~MSR_NuiApi.hは死んだ、NuiApi.hでの環境構築~

これ以上犠牲者を出さないように、めちゃくちゃ分かりやすく、引っかかりやすいタイトルで書きました。

 

2010年に発売されて以来、興味本位で購入したものの押し入れの奥でホコリ被っていそうなKinect v1。

f:id:Haru10nari:20151127174524j:plain

いざ取り出して使ってみようとするも、サンプルプログラムは2010年~2012年のSDKの古いバージョンのサンプルばっかで動かねえよボケナスってブチ切れてインターネットの海を彷徨って時間を無駄に過ごしている人も多いのではないでしょうか。特にアカデミックな分野で 無 理 矢 理 使わされてる学生の方々。

 

この記事は以下のような方を対象としております。

Kinect v1とv2とXBOXの三種のうち、v1(for Windows)を持っている

C++Kinect v1のサンプル動かしたいけど設定めんどくてグラフィカルな表示はいらない

・MSR_NuiApi.hをNuiApi.hに書き換えたは良いものの設定が分からずC++のサンプルプログラムが動かせない

 

C#で動かしたい方は、書籍やネットに動くサンプルがたくさん転がっているのでそちらを参考にしてください。

 

少し小言を。

なんでC++かというと、C言語で書かれたハードウェア制御のプログラムを簡単に絡められる(文法同じだから脳死でできる)のと、DXライブラリで簡単に描画できるから。

「ワイ、おもろいコントローラー作ったで~、Kinectで身振り手振りも使って操作もしたいけん、そんでもってゲームに反映させたいんや!」って分野にはかなり需要がある。いわゆるインタラクション分野ですね。土下座ダンスがある某ダン○ボとかそういうイメージ。

すぐ実践できて参考になるC++のサンプルがネットにないのよね。まず、環境設定すら省いてるようなサイトしかヒットしない(書籍買えってこと)上に、バージョンもβとかv1.0のものばかりで書籍の環境設定すら現行のv1.8では役に立たない。

OpenNIやらOpenCVが必須だの本やサイトにあるけれど、初心者は新しい言葉が乱発してそれぞれの言葉と概念、その関係性が理解できないんですよ

こういうデバイスに興味持った人はサンプルが動けばうおーすげー!とはなるのだけれども、プログラミング以前に環境の構築で躓いて時間を浪費してしまい、環境ができる頃には感動が冷めてしまう。TAとしても必要のない準備の時間は非常におもろくない。

ムシャクシャしてきたので自分用の覚書としてこの記事を書くまでに至ります。

 

 

ほいでは、前置きはこのくらいにしておいて、環境構築に移っていきます。

とりあえずインストールしとけってものは、たった2つです。

Visual Studio 2015

 Overview of Visual Studio 2015 Products

 Visual C++ 2010 Expressが入ってるなら入れなくてもいい。

 でも、どうせ色んな言語使うのならまとまってる2015使ったほうが楽です。

 

Kinect SDK v1.8

Download Kinect for Windows SDK v1.8 from Official Microsoft Download Center

 これに付属(?)している開発ツールキットも動作確認に必須です。

 全部インストール終わったらサンプルの動作確認をしてください。

  C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.8.0\bin\

 この中に色々サンプルが転がってるので触ってみてください。動かない場合は

 ・Kinectの電源を入れ忘れてる

 ・ドライバがインストールされていない

 などが考えられます。他のサイトに対処法がたくさん乗ってますので適宜参照してください。

DepthBasics-D2D.exeのような関節の点が今回組むプログラムの中で動いています。

 

 

SDKの動作確認ができたらプログラミング環境の構築に移ります。

 

①新規プロジェクトの作成

まずはVisual Studioを開き、

新規作成 > 新しいプロジェクト > C++Win32コンソールアプリケーション

と選択し新規プロジェクトを作成します。

 プロジェクトの名前は「KinectTest」とでもしておきましょう。

OKを押すとアプリケーションウィザードが開きますので 次へ を押します。

ウィンドウ中央の "追加のオプション" の項目に 空のプロジェクト(E) がありますので、チェックボックを付けてから完了をクリックしてください。

 

②プロパティの設定

プロジェクト(P) > プロパティ (P) を選択し、プロパティページを開きます。

(Alt+F7で一発で開けるので慣れておくと楽ちんです。)

 

(2-1)インクルードディレクトリの設定

構成プロパティ>VC++ディレクトリ を開く。

"インクルードディレクトリ"にマウスを持って行くと▼が表示されるので<編集…>をクリック。

空欄をクリックし、[…]を選択。

C:\Program Files\Microsoft SDKs\Kinect\v1.8\inc\ [フォルダーの選択]

f:id:Haru10nari:20151127202942j:plain

こうなっていればOKです。

 

(2-2)ライブラリディレクトリの設定

インクルードディレクトリの2つ下にあるライブラリディレクトリも同じように

C:\Program Files\Microsoft SDKs\Kinect\v1.8\lib\x86 [フォルダーの選択]

f:id:Haru10nari:20151127203427j:plain

libまでではなく、 x86まで 入れてください。

 

(2-3)追加の依存ファイルの設定

構成プロパティ > リンカー > 入力 > (一番上にある) 追加の依存ファイル > 編集…

Kinect10.lib と記入してください。

f:id:Haru10nari:20151127211215p:plain

 

以上で環境の構築は終了です。

 

次からは実際に使えるサンプルプログラムに移っていきます。

 

 

③サンプルプログラム

まずは以下のソースファイルをダウンロードして、自分の作ったプロジェクトと同じフォルダに入れてください。デフォなら

C:\Users\[ユーザ名]\Documents\Visual Studio 2015\Projects\KinectTest

に入れておけばOKです。

gist.github.com

フォルダに入れ終わったらソリューションエクスプローラのソースフォルダを右クリックし、

追加 > 既存の項目(G) からKiectTest.cppを選択してください。

 

ソースはたったこれだけでOKです。楽勝な感じがします。

 

 

次に以下のソースファイルをダウンロードして、先ほどと同じフォルダに入れてください。

gist.github.com

ソリューションエクスプローラのヘッダーのフォルダを右クリックし、

追加 > 既存の項目(G) からKinectSkeletonTracking.hを選択してください。

あとはビルドを実行し、Kinectの前で腕を振ってみてください。

f:id:Haru10nari:20151127224513j:plain

このようにコンソールに表示されれば成功です。

身体を動かしてみて座標が対応して動いているのさえ分かれば、データ取得間隔を短くして平均値を取ってみたり、中央値取ったり、少しデータの使い方を工夫すれば腕のジェスチャ認識ができてしまいます。

実際に扱うデータはおそらくこの程度だと思いますので、単にデータを取得したいだけならOpenNIやらOpenCVは要らないと思います。

 

Kinect自体のプログラムは100行程度ですので、Kinectプログラミング自体がやろうとしていることの足を引っ張ることはないはずです。

 

ヘッダーファイルをいじって取得したい箇所を増やし、MMDなどのpmxモデルのボーンを対応させ、頂点と関節の関係を変換行列で組めばMMDKinectラッキングを自作できます。(憶測ですがDXライブラリ使っても1000行は軽く超えるはずなのでデータの使い方を工夫してモーションに無理矢理対応させたほうが何倍も楽にできるかもしれません。)

 

ネットに転がっているヘッダ名が"MSR_NuiApi.h"となっているものもKinect SDK内にある同名のヘッダファイルの"NuiApi.h"などに書き換え、環境も②の通りにすれば動くものがいくつかあったので今まで動かなかったサンプルをダメ元でやってみたら、もしかしたら動くかもしれませんね。

 

今日はこの辺で。質問などがあればコメントで受け付けます。

 

お腹空いた。家帰って飯食ってもう寝たい・・・(;´ω`)