ARToolKit增強現實實踐文檔
前言: 這是爲山東大學“可視計算”暑期學校 “Programming Practices in Augmented Reality” AR編程實踐寫的參考教程。鑑於本人在Windows系統下工作,整個文檔偏重描述Windows系統下的整個DIY流程。請至simpleARDIY Github下載相關代碼和文檔。
增強現實技術,是一種將真實世界信息和虛擬世界信息集成的新技術,它獲取現實世界的數據(可以是圖像、文字,地理位置等等),然後把計算機虛擬的數據與現實世界的數據疊加之後再呈現給用戶。ARToolKit是一個開源增強現實(Augmented Reality, AR)軟件庫,用來快速構建增強現實應用。
ARToolKit安裝配置
ARToolKit提供了多個平臺下預編譯的SDK,從官網下載頁面獲取安裝文件。(願意嘗試的同學可以從ARToolKit Github下載源碼,參考Building ARToolKit from Source自己編譯ARToolKit。)
Windows
- 運行ARToolKit安裝文件,按照提示安裝完畢
- 增加ARTOOLKIT5_ROOT\bin到系統環境變量PATH
Linux / MAC OS X
- 在終端命令行解壓文件包
tar xzvf ARToolKit5-bin-*.tar.gz
- 設置環境變量
// Example assumes ARToolKit is in ~/SDKs/
cd ~/SDKs/ARToolKit5/
./share/artoolkit5-setenv
驗證安裝
安裝完畢後,運行ARTOOLKIT5_ROOT\bin目錄下的示例程序,例如simpleLite.exe。
相機標定
ARToolKit軟件庫中默認使用的相機參數包含在相機參數文件camera_para.dat中,每次AR應用啓動時讀取參數文件camera_para.dat,此參數適用於多數應用,但是爲了獲得更好的精度,通常每個不同的相機需要單獨標定。
ARToolKit軟件庫的相機標定工具calib_camera.exe位於ARTOOLKIT5_ROOT\bin目錄,標定用的棋盤格文件ARTOOLKIT5_ROOT\doc\patterns\Calibration_chessboard_(A4).pdf需提前打印到A4紙,粘貼在卡片或者板子上(使其保持平整)。
標定步驟
- Windows
calib_camera.exe
- Linux / MAC OS X
./calib_camera
- 此時,命令行終端會顯示默認的參數設置。一般情況下,使用默認參數即可,若想修改參數,請輸入幫助選項
calib_camera --help
查看幫助提示。
CHESSBOARD_CORNER_NUM_X = 7
CHESSBOARD_CORNER_NUM_Y = 5
CHESSBOARD_PATTERN_WIDTH = 30.000000
CALIB_IMAGE_NUM = 10
Video parameter:
Using default video config.
Image size (x,y) = (640,480)
- 此時相機啓動,用相機拍攝棋盤格,當相機拍攝到所有棋盤格內角點時,角點記號X呈紅色,成功的標定畫面如下圖a;當相機找不到棋盤格的全部角點時,角點記號X呈綠色,如下圖b,
- 當相機捕獲的圖像中內角點全部呈紅色時,按下鍵盤空格鍵,捕獲當前幀。爲了取得更好的標定效果,相機應從多個不同角度拍攝棋盤格,
- 一旦所有的標定圖像(默認10張)被獲取,標定數據會輸出到命令行終端並提示鍵入參數文件名
- 若標定數據良好,每張圖片的標定誤差應小於1像素,若誤差超過2像素,應重新標定。 鍵入文件名,例如camera_para.dat,回車,保存相機參數。
使用相機參數
暫時將相機參數文件保存在某個地方,後面的應用會用到此參數文件。
標記的設計和訓練
ARToolKit能夠識別正方形標記(Square Marker)並在視頻序列中對其進行跟蹤,這是所謂的傳統模板標記跟蹤技術。標記往往是由用戶創建或者打印出來的圖案。ARToolKit軟件庫ARTOOLKIT5_ROOT\doc\patterns目錄下提供了一些可以直接使用的預先設計好的標記,例如Hiro_pattern_with_border.pdf展示的Hiro標記,
將這些標記文件打印出來,粘貼在卡片或者板子上(使其保持平整)。
設計新標記
除了直接ARToolKit軟件庫提供的標記,我們也可以設計自己喜歡的標記,但是定製標記必須滿足以下要求:
- 必須是方形的;
- 必須有連續的邊界顏色(通常是指全黑或者全白),且其周圍的背景需爲對比色(通常指邊界顏色的相反顏色,比如全白或者全黑)。默認情況下,邊界的寬度是標記長度的25%;
- 邊界內部的標記圖像不能滿足旋轉對稱性(即不能有偶次序的旋轉對稱),邊界內部的圖像可以是白色、黑色或者其它顏色。
設計過程
可以通過編輯ARToolKit軟件庫提供的模板文件ARTOOLKIT5_ROOT\doc\patterns\Blank_pattern.png來創建新的標記。標記可以是任意大小的,在增強現實應用中使用標記的時,可以通過編輯配置文件指定標記相應的大小。
自定義的標記如上圖所示,標記內部50%的區域被認爲是標記圖像。標記圖像可以是彩色的、黑底白畫或者白底黑畫,而且可以延伸到邊界區域。需要注意的是,超過標記內部50%的標記圖像會被ARToolKit所忽略;因此,不要讓標記圖像超出邊界太多,否則當相機角度傾斜較大時ARToolKit識別不出該標記。
另外一種更簡單的創建標記的方式可以參考Julian Looser’s web-based marker generator。
訓練新標記
一旦設計好新標記(上面的IRC標記,從這裏下載),將其打印出來。接下來ARToolKit需要“訓練”新標記以讓其瞭解該標記的外形。訓練過程的輸出的一個圖案文件,該文件包含了描述標記圖像的數據。圖案文件使得ARToolKit能夠從場景中識別出想要跟蹤的標記。例如,在ARToolKit軟件庫中可以找到Hiro標記的圖案文件ARTOOLKIT5_ROOT\bin\Data\patt.hiro。
ARToolKit軟件庫的標記訓練工具mk_patt.exe位於ARTOOLKIT5_ROOT\bin目錄。
訓練過程
- 打開終端提示符/命令行提示符窗口,Linux或者OS X系統輸入./mk_patt,windows系統輸入mk_patt.exe,會看到類似如下的提示
- 輸入相機標定過程中保存的相機參數文件路徑,回車。此時,相機獲取到視頻畫面,
- 將相機對準標記,使得標記在屏幕上顯示爲正方形,而且儘可能大。如果ARToolKit識別出了標記,它會在標記周圍畫上紅色或者綠色的方框線。旋轉標記使得方框紅色的角位於標記的左上角,並單擊左鍵確認。此時,標記訓練完成,終端提示符/命令行提示符窗口會提示鍵入圖案文件名,
- 輸入你的圖案文件的名字(通常以“patt.name”爲命名),例如patt.irc,並回車保存。如果你不想保存該文件,直接按回車來啓動視頻重新訓練,或者單擊鼠標右鍵退出程序。一般在訓練自定義標記時,需要指定一些參數。運行
mk_patt --help
,可以查看修改默認設置的幫助提示。
使用新標記
暫時將圖案文件保存在某個地方,後面的應用會用到此參數文件。
simpleARDIY - First Sample
simpleARDIY 是一個簡單的ARToolKit實踐工程,代碼和數據請從simpleARDIY Github下載。
下面詳細介紹DIY流程(Windows VS2013下):
-
將DATA目錄下的camera_para.dat替換爲上面相機標定過程中暫存的相機參數文件,將patt.irc替換爲訓練好的新標記的圖案參數文件,同時修改simpleARDIY.cpp中相應參數文件的路徑
// You need to change these pathes to your own data static GLMmodel *gObj = NULL; static const float markerSize = 40.0f; // size of marker, in mm unit, change it for your marker static char glutGamemode[32]; static char cparam_name[] = "Data/camera_para.dat"; // camera parameters file, change it for your camera static char vconf[] = ""; // default static char patt_name[] = "Data/patt.irc"; // marker parameter file, change it for your marker static char obj_name[] = "Data/bunny.obj"; // model file which will showed on marker, change it for your model(obj format)
- 在VS2013中創建新工程
- File -> New -> Project
- Win32 Console Application
- 工程命名爲SimpleARDIY
- OK, Empty Project
- 將下載的代碼文件和數據拷貝到工程目錄
- 配置項目屬性(新建屬性頁方式,也可以選擇你習慣的方式,只要能讓工程找到ARToolkit的頭文件和庫文件)
-
Property Manager -> SimpleARDIY -> Debug Win32, 右鍵Add New Property Sheet,命名ARToolKit5_debug.props - 雙擊ARToolKit5_debug.props,編輯當前屬性頁,將ARToolKit5頭文件目錄ARTOOLKIT5_ROOT\include添加到Additional Include Directories
- 將ARToolKit5的庫文件目錄ARTOOLKIT5_ROOT\lib\win32-i386添加到Additional Library Directories
- Configuration Properties -> Linker -> input, 將Additional Dependencies設置爲
ARd.lib;ARICPd.lib;ARgsub_lited.lib;ARvideod.lib;
-
Property Manager -> SimpleARDIY -> Release Win32, 右鍵Add New Property Sheet,命名ARToolKit5_release.props, 參考上面屬性頁編輯流程,有一點不同是Release下將Additional Dependencies設置爲 AR.lib;ARICP.lib;ARgsub_lite.lib;ARvideo.lib;
-
- 將GLM.h添加至head files, 將GLM.cpp和simpleARDIY.cpp添加至source files
- Build,OK
- build過程中提示如果提示glut相關錯誤,說明系統未安裝glut庫。請至glut主頁下載glutdlls37beta.zip。解壓文件,將glut.h複製到VS安裝目錄下的VC\include\GL文件夾(若無GL文件夾,新建之),將glut.lib和glut32.lib複製到VS安裝目錄下的VC\lib文件夾, 將glut.dll和glut32.dll複製到Windows\System32和Windows\SysWOW64文件夾。
- build過程中提示如果提示
sprintf, strcpy, strcat
相關錯誤,請右鍵工程 -> Properties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions,將宏_CRT_SECURE_NO_WARNINGS;
添加到Preprocessor Definitions。
最後,將標記置於相機鏡頭下,運行效果如圖
DIY – Open minds and Have Fun
以simpleARDIY工程爲基礎,發揮你的創意,構建你自己的增強現實應用。 See these demo videos:
Open minds and Have Fun :-)
Reference
[1] http://www.artoolkit.org/documentation/
[2] http://www.hitl.washington.edu/artoolkit/documentation/
[3] https://github.com/artoolkit/artoolkit5