小松鼠嚇了一跳,有了魔法眼鏡後,這世界看起來完全不一樣了

2011年7月13日 星期三

OpenNI + F# 3d mesh Test


修改之前的程式,將 points cloud 改成簡單的 mesh,配合 image texture。效果似乎好點。
程式碼中用到 F# powerpack 的 PSeq 和 Array.Parallel,簡單的利用平行處理加速。
執行檔和 source 下載
執行時需要 .Net 4.0
OpenNI (只要 binary 和 Hardware binary)
Sensor Kinect Driver

2011年7月12日 星期二

用 F# 和 Kinect +OpenNI 產生 Point Cloud

這和前一篇 用 F# 和 Kinect SDK 產生 Point Cloud 是幾乎一樣的程式,只不過改用 OpenNI 而不是用 Kinect SDK beta。 OpenNI 支援將色彩和深度資訊重合,所以出來的結果比之前手工亂搞的正確得多。但是似乎沒有 Kinect SDK 的 ready callback 機制,所以用 background worker 取代。
OpenNI 似乎也不支援 80x60 的解析度。

2011年7月11日 星期一

用 F# 和 Kinect SDK 產生 Point Cloud


本文附的 F# 程式碼,是用 Kinect SDK 來產生 "points cloud"。
程式的效果如影片。
過程中的一些紀錄:
  • 因為之前的 visual studio 2010 過了試用期限,所以我有一段時間沒用 F#, 稍有一點生疏,但這問題不大。問題是我沒有寫過 .net 上的 GUI 程式,更別說是 3D 繪圖了,所以花了一點時間在網路上找範例。 F# 的 GUI 參考資料似乎不是很多,很多似乎也不太靈。
  • Kinect SDK 和 driver 簡單好用,骨架判斷似乎比之前 OpenNI 容易(沒有打錯字,這不是用來判斷股價的軟體),在狹小空間(像是大多數寫程式的地方)就能辨認出骨架。
  • 根據 Wikipedia,Kinect 的 depth sensor 橫向角度 57度,垂直角度 43度。
  • 網路查詢結果,System.Media3D 似乎無法直接畫出「點」,沒辦法做出 point cloud。所以用 squares cloud 或者 cubes cloud 來代替。
  • 我的筆記型電腦 GPU 太差,最多只能跑 80x60 的 cubes cloud。所以影片中解析度很差。
  • 設法將 Video Image 和 Depth Image 組合,發現不吻合。理論上應該要用 Color in Depth Space 或者 Depth in Color Space 的參數來設定 Kinect,但是網路上查詢的結果是, Kinect SDK Beta 還不支援這些。
  • 也許應該改用 OpenNI,但是程式碼已經寫了一半了,繼續用手工的方是將色彩和深度組合。
  • 色彩和深度的圖形居然是鏡像(x軸方向相反)?應該是我哪裡搞錯了。
  • 由於沒有硬體規格,解析度太低也很難實驗,所以用觀察和嘗試錯誤法很粗糙的將色彩資訊以及深度資訊勉強組合在一起。
  • 之後改用 OpenNI 試試看。

2011年7月7日 星期四

用 kindle 顯示 LyX 的 PDF Preview

  •  環境為 Win 7 32bit, LyX 1.6.9,  Python 2.7, Cygwin, Kindle DX
  • Kindle DX 安裝 usbNetwork hack
  • Cygwin 安裝 openSSH
  • 將 ssh 環境設定成無密碼登入 kindle,要在 kindle 的 usbnet/etc 下設定 authorized_keys
  • 將下面的 python 程式用 py2exe 或者 cx_freeze 包裝成 exe 檔
  • 在 LyX 裡面,將 Tools -> Preferences -> File Handling -> File Format 下的 pdf (pdflatex) 的 viewer 由 pdfview 改成我們的 exe 檔的路徑。
  • 如此就完成了,LyX 的 preview 會自動傳送到 kindle,然後自動更新書目。