簡介
本篇介紹香港科藝家 Bryan Chung 自製的 Library in Processing: simpleARToolKit,一套基於 jARToolKit 衍伸出來可在 Processing 中直接編寫擴增實境 (Augmented Reality) 應用程式的函式庫 (Library)。
而這個 jARToolKit 正是由前篇介紹的 ARToolKit 衍伸出來,也屬 Open Source 的軟體。
jARToolKit 是改以 Java 為開發環境,並支援 Java3D 來繪製三維圖形。在 Processing 中將 jARToolKit 的 jar 及 dll 置入資源庫資料夾中 (由於 Processing 本身脫離不了 Java),即可呼叫使用。
PS. 看到 dll,令人想到原本 ARToolKit 的 Cross-Platform 就此消失?(若需 Cross-Platform 又要使用 Java,可找找 NyARToolkit,甚至可再轉至 Flash AS3 上使用:: FLARToolKit)
預備
以下簡述如何在 Processing 中撰寫基本 AR 應用程式:
1. 確定您系統中有 Processing,也正確安裝 Java 相關執行環境。 2. 確定系統有裝 WebCam 並已經正常運作。 3. 到 Bryan 的部落格下載 simpleARToolKit,解壓縮至 {Processing 安裝目錄}\libraries 資料夾內。 4. 將 {Processing 安裝目錄}\librarie\simpleARToolKit\print\pattHiro.pdf 列印出來。(視要用到的標記) 5. 至 {Processing 安裝目錄}\librarie\simpleARToolKit\examples 打開 demo01 或 demo02 範例。 6. 按下 RUN 按鈕編譯並執行。 7. 完工!
若是上述過程一切順利,您將會得到以下畫面 (追蹤 patt.kanji):
若是出現以下錯誤畫面:
代表沒有 import Processing 關於視訊設備的輸出入函式庫,可在程式碼的頭幾行中,加入:
import processing.video.*;
即可成功執行 cheers :-)
實戰
import processing.opengl.*;
import pARToolKit.*; // 請先將 simpleARToolKit 放入 Processing 的 libraries 裡面
import processing.video.*; // 直接編譯&執行範例有出錯時加入此行
SimpleARToolKit ar01;
void setup() {
size(320,240,OPENGL); // 這邊可更改 AR 的追蹤解析度 (解析度會影響效能)
hint(ENABLE_OPENGL_2X_SMOOTH);
background(0);
frameRate(15);
// patt.hiro 表示此程式碼會追蹤辨識 hiro 標記,可改成 patt.kanji,則會追蹤"人"的標記 (如上上圖)
ar01 = new SimpleARToolKit(this,"patt.hiro");
// 將 showBox() 註冊給 ar01,追蹤到 ar01 指定的標記時,執行 showBox() 函式
ar01.register("showBox");
}
void draw() { // draw() 函式是依照 frameRate 率不斷執行其內容
background(0);
ar01.showImage();
if (ar01.findMatch(100)) { // 猜測 100 是 Threshold 值
ar01.showObject();
}
}
void showBox(SimpleARToolKit t) {
pushMatrix();
noFill();
stroke(255,200,0);
box(50); // 可將此行改為其他 OpenGL 繪圖指令
popMatrix();
}
以上為 demo01 的註解參考。 Processing 語法類似 Java,不過有其固定格式,詳情參閱 Processing 網站或是本身程式內的基本範例。
備註
(一) 要從 camera 中 crab 資訊,需要安裝 Apple QuickTime 或 iTunes (有版本連帶 QuickTime) 以及 WinVDIG,請安裝下載。[原文出處]
(二) 每個範例的目錄下都會有個 data 子目錄,如 {Processing 安裝目錄}\librarie\simpleARToolKit\examples\demo01\data
而 data 目錄下的東西都有其用途:
- camera_para.dat 儲存相機參數用 (在 ARToolKit 中可針對自訂相機作相機校正)
- patt.hiro 標記檔
- patt.kanji 標記檔
(三) 若您覺得標記太少不敷使用,有以下辦法可解決:
1. 在 ARToolKit 中可針對自訂圖式轉存為 patt 檔,可供程式讀取辨識。 2. 可在網上尋找關於 ARToolKitPlus 這套軟體,內有最高支援 4096 個辨識效果佳的標記,可以拿來利用。 3. 製作 pattern 的程式下載(@dk01.cc)
[ 尚待補 ]

因為最近也在碰AR 很想請教您如果是使用flash來撰寫..不知道怎麼操作...所以想要請教大大@@ 感恩
你好 ^^ 已PO"FLARToolKit"測試文
不好意思 我想請問一下 他在建構的時候似乎不能摻雜中文路徑在裡面 後來移到D槽可執行 但之後匯出單獨執行檔似乎也是會有一樣的問題 造成不能在桌面正常執行的問題 這有辦法解決嗎 ?? 不好意思 最近也在研究AR的新手 謝謝^^
路徑或檔名不能有中文這件事情的確頭痛, 我記得我上次用1.0.3也有此問題,我不確定之後版本是否有解決,你可以試試看 ^^ 若始終沒解決,只能請您放在根目錄或英文路徑下以確保其正常運作。
喔~我是用最新版的(1.0.9) 看來還是沒辦法了 / \ 請問一下...WinVDIG這是用來解決Window連結視訊的問題 那Mac的呢? 因為我匯出Mac執行檔後 拿給Mac的朋友 似乎就無法連結到視訊
Mac平台需安裝QuickTime才能使用video lib 我本身使用都正常 你再試試吧 ^^
請問我在這裡如何導入自己的3d模型? 或是一個animation?
wow 我總是偷懶,最近常被抓包 這篇漏提了 ARToolKit User 常用到的 X3D/VRML。這對於想將自製 model/animation 由 Max/Maya 轉出後放入 AR application 的玩家來說非常重要。 對 Processing 而言,到目前的 1.0.9 似乎在 OpenGL 那塊並沒有加入可直接將 VRML 讀入場景的功能,而我們就算腦筋再好也不能每次都用 OpenGL 去撰寫複雜的模型。 關於這點,必須找找 VRML Library for Java,大致而言支援 Java 等同支援 Processing。我稍微找了一下,國外 Processing 官網討論區也有人在討論這些,他們也找了兩個解決方案,可將 VRML 讀進場景中,請參考看看: Xj3D http://www.xj3d.org/ CyberX3DFor Java http://www.cybergarage.org/cgi-bin/twiki/view/Main/CyberX3DForJava
跟著這篇文章所做以後終於成功試出方形出現在標籤上 請問我該如何才能知道關於方形的座標呢?
請參考API中關於 ARMarkerInfo 這個 structure ^^
你好,不好意思我想請問一下 我是依照您上方語法輸入 但他顯示「The constructor SimpleARToolKit(demo01,String)is undefined」 然後標示在「ar01 = new SimpleARToolKit(this,"patt.hiro");」 請問您知道我的問題是出在哪裡嗎? 謝謝>"<