Kinect for Windows SDK betaめも

MicrosoftからKinect for Windows SDK beta がでたので勉強してみようかと思い立ったのででめも。

  • 内容のレベルはおそらく低いです。
  • 途中で挫折するかも
  • 音声関連に手をつけるつもりは今のところなし
  • OpenCVと一緒に使いたい
  • C# は全く知らないので、ほんの少しだけ知っているC++で頑張る

とりあえずこの資料から
[http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/docs/ProgrammingGuide_KinectSDK.pdf/ProgrammingGuide_KinectSDK.pdf

Kinect for Windows SDK beta の肝の NUI(Natural User Interface) API のデータの肝

  • Color data

下の2つから選べる

    • RGB color
X8R8G8B8の32bitデータ(X8って不定ってこと?)。
    • YUV color
  UYUVのいわゆるYUV422フォーマット。sRGBのγをかけた後のデータ。このときは、解像度640x480, フレームレート15FPS固定。
  • Depth data
  距離データ。XY方向の解像度は640x480, 320x240, 80x60pixel。Z(奥行き)方向の解像度は13bitでミリメータ単位(スゲェ)。
  最も近いオブジェクトまでの距離を表す。
  画素値がゼロのときは、Kinectセンサーが何もオブジェ区尾を検出できてないことを表す。
  XY座標軸は は物理的な単位ではなく、depth imaging sensor内での画素。
  • Player segmentation data
 1つKinectセンサー(Kinectセンサーを複数扱うこともできるので)で2人の人間(player)を認識できる。各画素は、playerのインデックスに対応付けられる。
  depth dataとplayer segmentation dataがマージされた1つのフレームになる。
  距離を表す上位13birのデータと、playerのインデックスを表す下位3bitのデータ。

画像データの取り扱い方は、主に下の2つのうちのどちらか

  • モデルをポーリングする
  C++ では NuiImageGetNextFrame APIでcolor, depth dataをポーリングする。
  • event model
  いわゆるイベントドリブン型。スケルトンでイベントが発生したら取り込む?。NuiImageStreamOpen API を使う。

座標空間いろいろ

  • Depth Image Space

上のDepth dataを参照のこと

  • Skelton space

Depth Image Spaceと違って、距離で表される。右手の法則の座標空間で、Z軸はセンサーに向かう方向、Y軸は上方向、X軸はセンサーに対して(センサーを正面から見たときに)左方向に向かう。
重力の方向を設定することで、XY軸の調整ができるらしい。vNormalToGravity, NUI_SKELETON_FRAME, SkeletonFrame.NormalToGravity。

    • Floor Determination

スケルトン追跡システムは、背景を分離して人を抽出するために各フレームでフロアープレーンを推測する。

    • Skeletal Mirroring

通常は左右反転して取り込むけど、反転しないことも可能

waveletで遊んでみた

Haarのウェーブレットを使用。
ウェーブレット変換後のAC成分には +128 のオフセットをつけて画像出力しています。
逆ウェーブレット変換して同じっぽい絵になることは確認したので、
たぶん処理はあってると思う。


ウェーブレット変換係数
原画像 (256x256pixel, 8bit unsigned)

1階層 2階層
3階層 4階層
5階層 6階層
7階層 8階層


おまけ(というか本題のはずなんだけど...orz)

原画像 1階層のDC成分(4等分した左上ブロック)をゼロにして逆ウェーブレット変換
原画像 1階層のAC成分(4等分した左上ブロック以外)をゼロにして逆ウェーブレット変換
原画像 1階層の横エッジ成分(4等分した右上ブロック)をゼロにして逆ウェーブレット変換
原画像 1階層の縦エッジ成分(4等分した左下ブロック)をゼロにして逆ウェーブレット変換
原画像 1階層の斜めエッジ成分(4等分した右下ブロック)をゼロにして逆ウェーブレット変換

斜めエッジはほとんど抽出できてないから、それをゼロにしてもあんまり違いがわからないですね。
絵が悪かったかなぁ…。

参考文献

やり直しのための通信数学―フーリエ変換からウェーブレット変換へ

#どうでもいいけど、"Daubechies" の読み方は、"ドーブシ" より "ドビュッシー" の方がすっきりする。

らくラジ on Windows7

らくラジをWindows7環境で動かそうとしたら初期化できないとかで文句を言われて、
ラジオが聞けない。
機種はTOSHIBA dynabook Qosmio V65/86L。

http://bbs.kakaku.com/bbs/05601610370/BBSTabNo=1/CategoryCD=0560/ItemCD=056016/MakerCD=48/Page=2/ViewLimit=0/ClassCD=1/SortRule=1/#8463227

を見るとデフォルトで起動するプロセスとバッティングする場合があるらしい msconfigでスターアップ時に起動するソフト([コントロールパネル]->[システムとセキュリティ]->[管理ツール]->[システム構成] のスタートアップタブで確認できます) を切っていろいろやってみたら、
TOSHIBA Remote Control Manager をスタートアップ時に起動しないようにしたら、
問題なくラジオを聞けるようになった。

coLinux で Ubuntu

PCを新調したのでちょっとトライ。

http://d.hatena.ne.jp/wadap/20080121/1200922697
http://scratchpad.fc2web.com/colinux/install-0.7/install-5-1.html

を参考にさせていただいきました。
リンク先と異なるのは

  • TAP-Win32のアドレスを 191.168.137.1 にしている
  • coLinux のアドレスを 192.168.137.2 にしている
  • HostのOSがWindows7



coLinuxをインストールしてcoLinux上のUbuntuにrootでログインするまでは問題なし。
HostPC から coLinux へのpingも通った。
coLinux から HostPC への ping が通らない。
となると怪しいのはHostPCのFireWallかな?
現在のFireWallはウィルスバスター付属のもの。これの設定を変えます。
1922.168.137.1-2 からの接続を許可します。

これで coLinux(192.168.137.2) -> HostPC(192.168.137.1) へのpingも、
coLinuxから外部へのpingも通るようになりました。

今日はここまで。

Rails(とRuby)関連のインストール

昔作った twitter でランニングログをつけるためのサイトをもう一度動かすために環境整理。

http://www.gfd-dennou.org/arch/davis/gfdnavi/doc/install/install-rubygems.htm

  • mislav-will_paginate

http://holy.enyou.org/2009/01/27/move-to-mislav-will-paginate/

$ gem1.9.1 install mislav-will_paginate

$ gem1.9.1 install twitter

  • gruff

$ gem1.9.1 install gruff
$ apt-get install imagemagick
$ apt-get install libmagick9-dev
$ gem1.9.1 install rmagick

$ gem1.9.1 install mongrel

  • sqlite3

$ gem1.9.1 install sqlite3-rubygem1.9.1 install sqlite3-ruby
$ gem1.9.1 install sqlite3-dev
$ apt-get install libsqlite3-dev
$ gem1.9.1 install sqlite3-ruby

Ubuntu Netbook Editionのインストール

Ubuntu Netbook Edition 10.04 を HP Mini 1000 にインストールしたときの記録(…思い出しながら)。

http://www.ubuntu.com/netbook/get-ubuntu/download
からダウンロード

適当なサイズのUSBメモリがないので、PSPに4GBのMSを入れてUSB接続してUSBメモリの代わりにする。

インストール自体は特に書くことなし。
#いやぁ、簡単でいいね。30分もかからなかったのではないでしょうか。

インストールしたソフト達

  • ufw
  • apache2
  • nagios3
  • vncserver
  • openssh server
  • dice (ddns)
  • smbfs (NASマウント用)


ruby関連


その他

  • vim (デフォルトでは vim-tiny しかインストールされてなかったので)
  • rtmpdump


やったこと

station_id=TBS
rec_sec=7200
filename=hoge
/usr/local/bin/rtmpdump/rtmpdump -vr "rtmpe://radiko.smartstream.ne.jp:1935" \
--playpath "simul-stream" \
--app "$station_id/_defInst_" \
-f "LNX 10,0,45,2" \
--live \
--flv $filename.flv \
--stop $rec_sec

この辺を参照。なぜかアルバムアートワークが参照できない。
http://www.apple.com/jp/itunes/podcasts/specs.html

/etc/fstab:
//192.168.X.X/itunes /mnt/nas_itunes cifs rw,uid=ユーザーID,gid=グループID,password=,codepage=utf8,iocharset=utf8 0 0


はまったこと

  • apache2 の VirtualHost
  • ruby1.9から2バイト文字の扱いが変わってた
  • 無線LANがなかなかつながらない。APは見つかるのに電波が弱い?のかつながらない。暫らくほっといたら電波がMAXになってつながってた。
  • NASのmountをuid,gidではなくuname,groupで指定しようとしたらうまくいかない。99(=nobody)が割り当てられるなぜ?

AKI-H8/3068F

秋月電子のキット AKI-H8/3068F で
uClinux を起動させるまでに参考にしたページの整理。

このページを参考に作業

この本がいいらしいが、絶版らしいorz

Kernelロード時の

Kernel panic: No init found. Try passing init= option to kernel.

を解決するのに見たページ。全部理解は出来てないけど、「明らかにDRAMの初期化のとき0埋めされていないために
起こる現象。」らしい。