SIHOのプログラミングわーくワク

興味の赴くままに勉強してたら、読み書きできる言語は9個になりました。他にもいくつか気になる言語があったりなかったり?  まだまだ続く、楽しいお仕事わーくワク♪

  • « 
  • 10 
  • 11 
  • 12 
  • 13 
  • 14 
  • 15 
  • 16 
  • 17 
  • 18 
  • 19 
  • 20 
  • 21 
  • 22 
  • 23 
  • 24 
  • 25 
  • 26 
  • 27 
  • 28 
  • 29 
  • 30 
  • 31 
  • »

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

公式SDK1.5とOpenNIのDepthの比較

2012.08.29 (Wed)

去年から時間を見つけてはKinectでのアプリをつくってみていました。
まぁ、C#自体を勉強しながらだったのでなかなかすすみませんが。

で、なんとかOpenNIベースで2台のKinectをつかって、物体の3Dスキャンをするところまでたどりつきました。
スキャンターゲットの解像度は160*120


で、そのあとに公式SDK1.5ベースに置き換えてみました。置き換える際にいろいろ苦戦し画面中央の部分だけスキャンするのが難しかったので、画面全体をスキャンさせています。そのため解像度が上がりました。
スキャンターゲットの解像度は460*480


こうやって動画を比べるとしたの公式SDKのほうが滑らかでヨサゲにみえるでしょ?
でも、これは、下の解像度が高いからで一つ一つのDepthの精度は圧倒的にOpenNIのほうがよかったです。
今度時間が取れたら、OpneNIのほうも640*480の解像度でスキャンするように書き換えてみようと思います。

ほかにも、対象の輪郭を検出して、その中のDepthだけ10個くらいの履歴をとって平均化したら表面も滑らかになってより実用に近くなるかな?とか思っています。
参考「動的輪郭追跡」
http://opencv.jp/sample/object_tracking.html

XNAを使ったゲームを配布するときのパブリッシュ方法

2012.08.07 (Tue)

XNAフレームワークはインストールしている環境でないと動きません。(当然)

で、それを使ってゲーム開発などを行うとXNAのランタイム環境をユーザーが使用前にインストールできるようなインストーラが必要になります。
前にも調べたのにまた忘れてしまったので、ここにメモしておきます。

開発したゲームを他の Windows ユーザーに配布する方法のうち、XNA Game Studio をインストールしていなくてもプレイできるようにするやり方
http://msdn.microsoft.com/ja-jp/library/bb464156(v=xnagamestudio.30).aspx

コノページにある「ClickOnce 発行の使用」を使用するのが一番手っ取り早いかと思います。
よーくおぼえておこう!

OpenNI=1.5.2.23とC#でのUserGeneratorの作り方と現状の問題点

2012.07.19 (Thu)

OpenNI 1.5.2.23&NITE=1.5.2.21でUserGeneratorの作り方が変わっていたのでいちおう、メモ書きしておく。

this.context = Context.CreateFromXmlFile(SAMPLE_XML_FILE, out scriptNode);
this.depth = context.FindExistingNode(NodeType.Depth) as DepthGenerator;
this.user = new UserGenerator(this.context);



こんな風にContextインスタンスを指定してUserGeneratorを作成する。
そのあとStartGenerating()すればよい。

ちなみに、

this.context = new Context();
//デバイスを登録
NodeInfoList deviceNode = context.EnumerateProductionTrees(NodeType.Depth, null);
foreach (NodeInfo node in deviceNode)
{
context.CreateProductionTree(node);
}
//登録されたデバイスを取り出す
NodeInfoList nodeList = this.context1.EnumerateExistingNodes();

foreach (NodeInfo node in nodeList)
{
switch (node.InstanceName)
{
case "Image1":
image = this.context.GetProductionNodeByName("Image1") as ImageGenerator;
break;
case "Depth1":
depth_ = this.context.GetProductionNodeByName("Depth1") as DepthGenerator;
break;
}
}
this.user = new UserGenerator(this.context);



というやり方もある。後者は複数Kinectのときに使う。

けれどここで問題が発生。
userインスタンスは最後にnewしたものだけgenerateが可能のようだ。
※ちなみにUser情報はNITE管轄なのでNITEのドライバが2Kinectに対応していないのかもしれないなっと。
(ただし、これは、1つのWindowでテストしたものなので取得したいuserインスタンス分のWindowを用意してそれぞれのThreadで取得&描画更新を行った場合はまた違う結果が出るかもしれない。もし試した方がいれば教えてください)

ひとつのWindowでuserインスタンスを複数使う実験
1)前の記事のように1つのKinectと同じようにひとつの描画更新フローで組んでみた。
2)Threadを分けてみた→AccessViolationExceptionエラーがでる
 ※Userインスタンスを作っていない状態でもでる。ヒストグラムの計算で出ているので何か書き方がおかしいのかも?
3)描画更新のメソッドを2つ用意して、その中で毎回「this.user = new UserGenerator(this.context);」する
 →これはある程度早いマシンだとOKかも?最初しばらくはエラーなしで動く。けれど、「new UserGenerator()」メソッドは非常に重いので、画面が固まったように見えてMacMiniのBootCamp での Windows 7環境では実用できるレベルにはまったく無い。
 →ただし、描画更新を行った後、必ず「this.user = null;」にしてあげないとNGでした。

というわけで現在のNITEドライバでのuserインスタンスは、少なくともひとつのWindowでは1つしか作れないと考えたほうがよさそうだ。
それでもデバイス列挙ができるCreateProductionTree()が使用可能になったのは大きいので、いまはUser情報を使わない方向で設計を組みなおすかなと。

OpenNI 1.5.2.23のC#でCreateProductionTree() 使ってみた

2012.06.08 (Fri)

OpenNI 1.5.2.23でCreateProductionTree()を使ってもエラーが出ないので、実際につながっているデバイスをリストに登録してから、リストからデバイスを改めて取り出してその中からImageGenerator クラスのものをインスタンスにいれて、そこから画像をDrawしてみた。

もともとは、中村薫さんのKinectセンサープログラミングにあったC++のコードです。
こちらをやっとこさ、C#のフォームアプリケーションに書き換えてみましたとさ。




なんだろ?せっかくgistの使い方を教えてもらったのに、しばらく空いてからアクセスするとコード部分が消えている。うーむ。テスト。いまは6/8 16:35→6/11 15:18アクセスでコードが消えている。
なんだろー。

OpenNI 1.5.2.23で動作するドライバセット

2012.06.07 (Thu)

数ヶ月ぶりにKinectを再び触り始めたので、前に触ったときにOpenNI + C#で書く際にひとつのメソッド(CreateProductionTree())が正しく動作しない問題があったので、不具合修正の期待をこめてドライバ群を2012/5/10段階でのstableのものにそろえてみた。

、、、ら、Kinectさんが動かなくなった。
Windows XP 。
インストールした組み合わせ:
OpenNI=1.5.2.23, NITE=1.5.2.21,avin2 SensorKinect=5.1.0.41

で結局、「最新のSensorKinect(v0.92以降)はOpenNI unstable 1.5.4.0対応になっちゃったからstable 1.5.2.23で動かなくても不思議はない」との教えをいただきまして、avin2 SensorKinect=v5.1.0.25 にしたところ、無事に認識されました。

従来のドライバだとWin7では2台接続も可能なのですがXPだとNGだったので今回のドライバで治ったかなー?と期待するもまだ1台しか認識しません。
というか、cameraドライバのみNGですね。これは以前と変わらず。

そのときに見つけた@kaorun55さんのページから、一式をDLしました。
※@kaoun55さんはバージョンアップのたびに正常動作する組み合わせをその都度保存しておいてくれるので大助かりです。

せっかくだから、OpenNIのバージョンが少し上(1.5.2.7)のkaorunさんところで見つけた一式を入れてみます。
→入れてみたところ、Kinectさんが認識されなくなりました。ドライバを1.5.2.7のOpenNIのものに変更を試みると「いまのほうが最適だから更新できない」と出ます。
仕方ないので、OpenNIの1.3.2.1のドライバを削除してから入れなおそうとするもなんだか挙動不審。
再起動やらいろいろ順番を変えてとかやって何とか入れたあと、NIViewerを起動するも「Kinectと接続できないよ」と怒られる始末。。。_ノ乙(、ン、)_

XPでは、OpenNI=1.5.2.23, NITE=1.5.2.21,avin2 SensorKinect=5.1.0.25 がよさそうです。

6/8追記
注意:SensorKinect=5.1.0.25は、下記からDLしてね。
本家のページから私はSensorKinect091-Bin-Win32-v5.1.0.25.msiを落としました。(1)
v5.1.0.25にはいくつかあるのかな?
前述のかおるんさんのところのページのやつはsensor-win32-5.1.0.25-redist.msiとなっていて、これの作成日は2011/12/19で(1)のほうは2011/12/23でした。みてみると容量もちがうのね。で、(1)のほうじゃないとkinectを認識しませんでした。


Win7でもOpenNI=1.5.2.23, NITE=1.5.2.21,avin2 SensorKinect=5.1.0.41の組み合わせだとプロシージャ系のアラートが出てきてまともに動かなかったので、SensorKinectだけ削除→5.1.0.25をインストールするも、Kinectが認識されなかった。
なので、OpenNI、NITE、SensorKinectを一度すべて削除してから、OS再起動後に入れなおす。

すると、MacBookAirのwin7でも2Kinectが認識された。さらに、CreateProductionTree()も正常動作を確認できたー!
※MacBookAirのUSBポートは左右2つあるのに、「OpenNI=1.3.2.1, NITE=1.4.0.5, SensorKinect=5.0.3.3」では1つのKinectしか認識されなかった。(より詳しく書くと後で接続したほうのKinect camera だけエラーコード10で正常動作しなかった)

OpenNIは組み合わせが超重要ですね!

6/8追記:
正しいOpenNIの組み合わせのときに、コマンドラインの画面で「Kinectさんが接続されてないよ」と表示されたら、デバイスマネージャーでPrimeSenseのドライバのバージョンを確認してみてね。win7で認識されたのは「2011/2/16 v3.1.2.0」のもの。
私はトライ&エラーの最中に「2011/11/21 v3.1.3.1」のものが入ってしまっていました。
正しい手順で入れてKinectが認識されるのは前者のほうです。
で、前はコントロールパネル>プログラムと削除で「PrimeSenseドライバパッケージ」なるものがインストールされていたのだけど、今回全部uninstしてから順番にOpenNI>SensorKinect>NITEといれるとプログラムと削除にドライバパッケージがインストールされていないことが確認できます。
そのとき、Kinectさんが認識されないようなら、デバイスマネージャーからNui,Camera,Audioドライバを削除してから、インストールしたPrimeSenseフォルダー直下のDriverフォルダーを指定してドライバをインストールしてください。ここにあるのも「2011/2/16 v3.1.2.0」のものです。

ニコ動に動画をアップしたときに告知するときの方法まとめ

2012.06.06 (Wed)

ニコ動へのリンクをFBに貼るとサムネールと概要文が表示される。↓こんなかんじ
FBでのニコ動リンク表示

twitterだと単なるリンクのみでサムネールも概要文もいずれも表示されない。
でも、ニコ動には「共有」という機能がある。
種別は 外部プレイヤー、動画のサムネイルと詳細情報、リンクのみ の3つ

外部プレイヤーにしたとき


動画のサムネイルと詳細情報にしたとき


リンクのみのとき

【ニコニコ動画】地球を守る-森林減少編-

となる。

WindowsデスクトップアプリでのAIRのCaptive Runtimeの方法

2012.04.12 (Thu)

展示と言うか、サイネージモノをつくるときって複数画面出力のKIOSKだったりします。
Windowsの複数出力のKIOSKではいくつかの方法があります。
・HTAアプリにする
 →IEのエンジンを使用するため、WSHとかVBScriptとかも書けるので便利。でもFlashの再生はブラウザのプラグインを使用するため、ちょっと重いかな。
・AdobeAIRにする
 →Flashの再生はAIRのランタイムを使用して行われるので滑らか。

で、今回は後者で作りました。
で、展示ものなのでランタイムが数年後更新されて、不具合が発生するとかは防ぎたかったので、AIR3より追加された新機能のCaptive Runtimeでランタイムを埋め込むようにしてみました。

コマンドラインを使用する方法であまりドキュメントがなかったので、twitterで教えてもらいながらなんとかできました。なので、忘れないうちにメモです。

出来上がりはこんな風に書き出されます。
CaptiveRuntime
[Adobe AIR]フォルダの中にランタイムが入っています。
実行するときは、[AIR.exe]から行います。AIR.swfは実体ファイルですね。
 

more »

iOS開発便利リンク[追記中]

2012.03.09 (Fri)

「Xcode4が重い時は」
http://yomoapp.tumblr.com/post/10111690224/xcode4
→重いといやだよね。

C#お勉強リンク[編集中]

2012.03.09 (Fri)

C#のアプリに埋め込んだswfとの通信(ExternalInterface)
http://www.mztm.jp/2011/10/11/flashcsharpexternalinterface/

iOS5情報[追記中]

2012.03.09 (Fri)

iOS5 では UIViewController.parentViewController が nil
 →こ、こわい。

«  | HOME |  »

プロフィール

siho_prof

SIHO
しほ

Twitter:
SIHO_o

viva mambo, inc.
iPhone&iPad / Flash / Kinect
使用言語:Objective-C, ActionScript 3.0, Javascript, Lua, PHP, C#, C, C++, WSH。
F-site staff

Solar System Simulator 広報

Web,スマートフォン、Desktopを問わず、アプリ制作が好物。執筆は必要に応じて。お仕事くださいまし。

サイネージ:ガンダムフロント東京・キャラクターフォトスポット設計(2012/4~常設)

アトラクション:富士急ハイランド 戦国BASARA ゲーム設計&プログラミング(2010/7-2012/4にて常設展示)

イントラシステム:「某メーカー研究所KJ法システム」DB,Flash,PHPを含むソリューション設計&DB構築、「美術系専門学校の生徒管理システム」iPadクライアントを含むソリューション設計&DB構築

iPhone/iPadアプリ:某球団試合速報アプリ、『魂を熱くさせる 宇宙飛行士100の言葉』『Mitaka Gallery -てのひら宇宙-』

書籍同梱ソフト:『4次元デジタル宇宙紀行Mitaka』『DVD-ROM&図解 動く! 深海生物図鑑』『DVD-ROM&図解 ハッブル望遠鏡で見る宇宙の驚異』

著書:『世界一わかりやすい Windows 7』『世界一わかりやすい Flash CS3』

検索フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。