ARToolKit增強現實實踐文檔

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

path1 path2

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,

cb

  • 當相機捕獲的圖像中內角點全部呈紅色時,按下鍵盤空格鍵,捕獲當前幀。爲了取得更好的標定效果,相機應從多個不同角度拍攝棋盤格,

cb_multi

  • 一旦所有的標定圖像(默認10張)被獲取,標定數據會輸出到命令行終端並提示鍵入參數文件名

cb_filename

  • 若標定數據良好,每張圖片的標定誤差應小於1像素,若誤差超過2像素,應重新標定。 鍵入文件名,例如camera_para.dat,回車,保存相機參數。

使用相機參數

暫時將相機參數文件保存在某個地方,後面的應用會用到此參數文件。

標記的設計和訓練

ARToolKit能夠識別正方形標記(Square Marker)並在視頻序列中對其進行跟蹤,這是所謂的傳統模板標記跟蹤技術。標記往往是由用戶創建或者打印出來的圖案。ARToolKit軟件庫ARTOOLKIT5_ROOT\doc\patterns目錄下提供了一些可以直接使用的預先設計好的標記,例如Hiro_pattern_with_border.pdf展示的Hiro標記,

mk_hiro

將這些標記文件打印出來,粘貼在卡片或者板子上(使其保持平整)。

設計新標記

除了直接ARToolKit軟件庫提供的標記,我們也可以設計自己喜歡的標記,但是定製標記必須滿足以下要求:

  1. 必須是方形的;
  2. 必須有連續的邊界顏色(通常是指全黑或者全白),且其周圍的背景需爲對比色(通常指邊界顏色的相反顏色,比如全白或者全黑)。默認情況下,邊界的寬度是標記長度的25%;
  3. 邊界內部的標記圖像不能滿足旋轉對稱性(即不能有偶次序的旋轉對稱),邊界內部的圖像可以是白色、黑色或者其它顏色。

設計過程

可以通過編輯ARToolKit軟件庫提供的模板文件ARTOOLKIT5_ROOT\doc\patterns\Blank_pattern.png來創建新的標記。標記可以是任意大小的,在增強現實應用中使用標記的時,可以通過編輯配置文件指定標記相應的大小。

mk_irc

自定義的標記如上圖所示,標記內部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,會看到類似如下的提示

mk_camera_para

  • 輸入相機標定過程中保存的相機參數文件路徑,回車。此時,相機獲取到視頻畫面,

mk_video

  • 將相機對準標記,使得標記在屏幕上顯示爲正方形,而且儘可能大。如果ARToolKit識別出了標記,它會在標記周圍畫上紅色或者綠色的方框線。旋轉標記使得方框紅色的角位於標記的左上角,並單擊左鍵確認。此時,標記訓練完成,終端提示符/命令行提示符窗口會提示鍵入圖案文件名,

mk_filename

  • 輸入你的圖案文件的名字(通常以“patt.name”爲命名),例如patt.irc,並回車保存。如果你不想保存該文件,直接按回車來啓動視頻重新訓練,或者單擊鼠標右鍵退出程序。一般在訓練自定義標記時,需要指定一些參數。運行mk_patt --help,可以查看修改默認設置的幫助提示。

使用新標記

暫時將圖案文件保存在某個地方,後面的應用會用到此參數文件。

simpleARDIY - First Sample

simpleARDIY 是一個簡單的ARToolKit實踐工程,代碼和數據請從simpleARDIY Github下載。

code_download

下面詳細介紹DIY流程(Windows VS2013下):

  1. 將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)
    
  2. 在VS2013中創建新工程
    • File -> New -> Project
    • Win32 Console Application
    • 工程命名爲SimpleARDIY
    • OK, Empty Project
  3. 將下載的代碼文件和數據拷貝到工程目錄
  4. 配置項目屬性(新建屬性頁方式,也可以選擇你習慣的方式,只要能讓工程找到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;
  5. 將GLM.h添加至head files, 將GLM.cpp和simpleARDIY.cpp添加至source files
  6. 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。

最後,將標記置於相機鏡頭下,運行效果如圖

mk_result

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章