星期二, 4月 28, 2009

Week 11: 期中考試第三階段

本週進行期中考第三階段: 程式實測。

同學必須完成所有範例程式的執行。

星期五, 4月 24, 2009

News: 福山與台北植物園 已建置二維條碼導覽

〔中央社記者楊淑閔台北24日電〕原始新聞連結

農委會林業試驗所今天表示,「農業數位生態館計畫」已在所方所轄的台北植物園及福山植物園內完成數位化建置,提供民眾透過二維條碼解碼設備查詢相關解說資訊的服務。

林業試驗所指出,「農業數位生態館」是行政院農業委員會為創新農業數位內容價值,改善傳統文字解說牌無法詳述動植物特性,以及內容無法快速更新等缺點,藉由行動設備傳輸二維條碼技術,讓使用者可即時線上透過行動設備搜尋,讀取豐富植物解說與導覽資訊的服務。

林試所表示,依「農業數位生態館計畫」,已在所方所轄的台北植物園及福山植物園內完成數位化建置。

林試所並說,今年完成新增二維條碼的福山植物園,擁有豐富的植物與動物資源,不但可以欣賞原生植物之美,還有機會看到山羌、野豬、鴛鴦等野生動物,是台灣生態的寶庫,遊客可在此園經驗到與一般植物園或森林遊樂區完全不同的生態景致。

林試所補充,所方所轄的山仔頂植物園、埤子頭植物園、四湖海岸植物園、恆春熱帶植物園及扇平森林生態科學園等,也將陸續完成二維條碼解說牌建置。

星期二, 4月 14, 2009

Week 9: 期中考第二階段

本週進行期中考第二階段: 口試。

缺席名單:
94363063 林郁勛
95360361 葉 廷
96363043 楊倍權
 

星期四, 4月 09, 2009

Week 8: 期中考第一階段

本週進行期中考第一階段之筆試。

缺考同學名單如下:

94360912 林崇基 (已補交)
94363063 林郁勛
95360104 欒如雲
95360361 葉 廷
95361090 吳坤璋 (已補交)
96363043 楊倍權

請缺考同學於 4/13 以前補交。
 

星期二, 4月 07, 2009

Note: 期中考的進行方式

幾經思考, 本學期的期中考, 我決定分成三階段, 分別在第 8, 9, 11 週進行。

第一階段: 以筆試的方式進行, 請同學參考課程部落格, 針對 Week 1 ~ 7 的課程內容, 逐週寫下自己已經掌握哪些技術, 哪些技術則尚未弄懂。

第二階段: 以口試的方式進行, 針對同學所寫下的學習狀態進行個別討論, 找出自己的學習問題。

第三階段: 檢驗程式實作, 同學必須完成範例程式的實作。

這樣做的目的是希望幫助同學面對、了解自己的學習狀況, 希望可以透過期中考試, 協助同學:
 1. 完全理解授課內容,
 2. 充分掌握視訊擷取技術,
 3. 擁有 WebCam Programming 的實作能力。
 

星期四, 4月 02, 2009

Note: 本課程之期中考試

課程公告:
 本課程期中考試將於 Week 8 之課堂上以口試的方式進行, 考試內容將以本課程所教授之 WebCam Programming 之所有內容, 包括:

 a. 基本 C++ Builder 之基本觀念。

 b. WebCam Programming 之基本觀念與指令。

 c. 本課程在課堂上所進行之四個實驗:

  1. 靜態影像擷取之實驗

  2. Callback Function 之實驗: 在 Label 顯示擷取之 frame 總數。

  3. 直接從記憶體擷取視訊畫面。

  4. 將監視畫面與背景圖片相減所得到之差異影像隨時顯示出來。

 d. 八個範例程式中所有指令之用法。

  1. SampleProgram1.txt
  2. SampleProgram2.txt
  3. SampleProgram3.txt
  4. SampleProgram4.txt
  5. SampleProgram5.txt
  6. SampleProgram6.txt
  7. SampleProgram7.txt
  8. SampleProgram8.txt
  
  
  

Week 7: 如何從記憶體直接擷取視訊畫面?

本週要進行的討論主題是 - 如何從記憶體直接擷取視訊畫面?

我們所設定的實驗是: 透過使用 callback function 的方式, 將所擷取到的畫面顯示到另一個影像元件之中。



首先, 我們先在 MainMenu 這個元件中建立一個視訊擷取視窗 Callback function 的控制開關, 透過這個 on/off , 我們可以隨時開啟或關閉是否要對擷取視窗的畫面進行處理。

SampleProgram6.txt

透過 capSetCallbackOnFrame 這個函式設定: 當視訊擷取視窗(代碼為 hwndViedo) 取得一個 frame 後, 必須執行我們所定義的 callback function: FrameCallBack,

capSetCallbackOnFrame(hwndVideo, &FrameCallBack);

LRESULT CALLBACK FrameCallBack( HWND hwndCapture, PVIDEOHDR lpvhdr );

在我們所自行定義的 FrameCallBack callback function 中, 有兩個輸入參數, 第一個參數 HWND hwndCapture, 指明哪一個視訊擷取視窗, 即該視訊擷取視窗的 handle, 第二個參數 PVIDEOHDR lpvhdr, capSetCallbackOnFrame 這個函式會自動把視訊擷取視窗的相關資訊透過 PVIDEOHDR lpvhdr 這個結構變數, 讓 FrameCallBack callback function 來使用。

有關 PVIEDOHDR 這個結構的相關資訊, 可以在 vfw.h 中, 找到如下的結構定義:

/* video data block header */
typedef struct videohdr_tag {
LPBYTE lpData;      /* pointer to locked data buffer */
DWORD dwBufferLength;   /* Length of data buffer */
DWORD dwBytesUsed;   /* Bytes actually used */
DWORD dwTimeCaptured;  /* Milliseconds from start of stream */
DWORD_PTR dwUser;   /* for client's use */
DWORD dwFlags;      /* assorted flags (see defines) */
DWORD_PTR dwReserved[4];   /* reserved for driver */
} VIDEOHDR, NEAR *PVIDEOHDR, FAR * LPVIDEOHDR;

透過 結構 videohdr_tag 的宣告, 我們獲知擷取視窗的 data buffer 的指標可以用 lpData 這個變數來取得, 即

CaptureData = LPVIDEOHDR(lpvhdr);
ptrCapture = CaptureData->lpData;

// 全域變數宣告
LPVIDEOHDR CaptureData;
BYTE *ptrCapture, *ptrImage;

說明:
1. CaptureData 是全域結構變數, 其資料型態亦為 PVIDEOHDR。
2. *ptrCapture 與 *ptrImage 是兩個指向記憶體位址的全域指標變數。

本週的第一個實驗要做的事, 說穿了就是把某一塊記憶體(視訊擷取視窗資料暫時存放區/data buffer)複製到另一塊記憶體(影像物件存放色彩資料的記憶體)之中。因此, 我們只要弄清楚兩個記憶體的起始位址, 自然可以輕鬆完成實驗。


 
SampleProgram7.txt
 
第二個實驗則是需要針對監視畫面內容稍做計算, 畫面的下角是背景圖, 監視畫面與背景圖相減所得到的差異影像, 則會被放到右下角的圖片中。





SampleProgram8.txt