Augmented Reality dengan FLARToolKit dan Papervision3d
by beblank on October 20, 2011
sebelum membaca artikel ini saya sarankan anda membaca konsep tentang Augmented Reality yang telah ditulis oleh Rizal Akbar serta tutorial basic papervision yang telah saya tulis. saya sarankan juga anda memiliki pengetahuan tentang actionscript 3.0 dasar-menengah.
Alat-alat yang perlu dipersiapkan untuk menggunakan tutorial ini adalah :
1. webcam
2. marker / gambar yang nantinya akan digunakan untuk aplikasi untuk dikenali
3. library papervision3d yang saya gunakan adalah Papervision3D 2.1.920 dapat di download dari sini
4. library FLARToolKit yang digunakan adalah versi 0.9.1 (versi lain menggunakan library yang berbeda pula jadi artikel ini dapat digunakan hanya untuk FLARToolkit versi 0.9.1) dapat di download dari sini
yang akan pertama kali kita lakukan adalah menampilkan video yang di capture oleh webcam
package
{
import flash.display.Sprite;
import flash.media.Camera;
import flash.media.Video;
/**
* ...
* @author aditya hadiwijaya
*/
public class webcam extends Sprite
{
private static const HEIGHT:Number = 600;
private static const WIDTH:Number = 800;
private static const FPS:Number = 15;
private var vid:Video;
private var cam:Camera;
public function webcam()
{
vid = new Video(WIDTH, HEIGHT);
cam = Camera.getCamera();
cam.setMode(WIDTH, HEIGHT, FPS);
vid.attachCamera(cam);
addChild(vid);
}
}
}
setelah itu inisialisasi flartoolkit untuk memproses data gambar dari video yang telah di tangkap oleh webcam.
[Embed(source = "assets/camera_para.dat", mimeType = "application/octet-stream")] private var params:Class;
camera_para adalah file parameter yang memperbaiki lensa distorsi pada webcam. File ini juga ada pada library ARToolkit.
[Embed(source = "assets/marker16.pat", mimeType = "application/octet-stream")] private var pattern:Class;
marker
marker adalah pattern yang diperlihatkan ke webcam anda. marker inilah yang nantinya dikenali oleh flartoolkit.
cara membuat marker?

1. buat kotak sebesar 80X80 mm serta garis setebal 40mm. lalu pada kotak itu dapat diletakkan pattern yang anda inginkan
2. kunjungi web berikut
http://flash.tarotaro.org/ar/MarkerGeneratorOnline.swf
3. dibawah mode select terdapat combo box, pilih load marker image. anda akan melihat file marker yang telah anda buat pada step 1 lalu klik tombol Get Pattern setelah itu pada windows Preview Pattern klik tombol save

setelah itu letakkan pattern yang telah di save ke dalam project anda.
Fungsi setupFlar
private function setupFlar():void {
fparams = new FLARParam();
fparams.loadARParam(new params() as ByteArray);
fparams.changeScreenSize(WIDTH, HEIGHT); // besarnya ukuran video yang nantinya akan di proses
mpattern = new FLARCode(16, 16); // marker segments pada marker yang telah anda buat
mpattern.loadARPatt(new pattern());
}
fparams.changeScreenSize(WIDTH, HEIGHT); // besarnya ukuran video yang nantinya akan di proses
mpattern = new FLARCode(16, 16); // marker segments pada marker yang telah anda buat
fungsi setupBitmapData
private function setupBitmapData():void {
bitmapData = new BitmapData(WIDTH, HEIGHT);
bitmapData.draw(vid); // mengambil bitmap data dari video yang telah dicapture oleh webcam
raster = new FLARRgbRaster_BitmapData(bitmapData);
detector = new FLARSingleMarkerDetector(fparams, mpattern,80); //
marker detector untuk single marker. untuk inisialisasi membutuhkan flarparam yang telah diinisialisasi pada fungsi sebelumnya, pattern yang telah dibuat, dan besarnya pattern yang telah dibuat. 80 maksudnya adalah 80mm
}
bitmapData.draw(vid); // mengambil bitmap data dari video yang telah dicapture oleh webcam
detector = new FLARSingleMarkerDetector(fparams, mpattern,80); //
marker detector untuk single marker. untuk inisialisasi membutuhkan flarparam yang telah diinisialisasi pada fungsi sebelumnya, pattern yang telah dibuat, dan besarnya pattern yang telah dibuat. 80 maksudnya adalah 80mm
fungsi setupPapervision3d
untuk setup papervision sebaiknya anda membaca artikel sebelumnya tentang papervision
private function setupPapervision3d():void {
scene = new Scene3D();
camera = new FLARCamera3D(fparams); // camera tidak menggunakan default camera papervision 3d tetapi menggunakan camera papervision3d versi flartoolkit yang telah dioptimalisasi untuk flartoolkit. untuk menginisialisasinya dibutuhkan FLARParam yang telah kita inisialisasikan pada fungsi sebelumnya.
container = new FLARBaseNode(); // adalah sebuah display object 3d papervision3d. disini transformasi matrix yang telah didapat dari marker detektor disesuaikan agar hasil augmented yang dihasilkan terlihat benar misalnya ketika kita miringkan ke kiri object 3d ikut miring ke kiri.
scene.addChild(container);
var sphere:Sphere = new Sphere(null, 30, 100, 50);
container.addChild(sphere);
bre = new BasicRenderEngine();
trans = new FLARTransMatResult();
viewport = new Viewport3D(WIDTH, HEIGHT)
addChild(viewport);
}
camera = new FLARCamera3D(fparams); // camera tidak menggunakan default camera papervision 3d tetapi menggunakan camera papervision3d versi flartoolkit yang telah dioptimalisasi untuk flartoolkit. untuk menginisialisasinya dibutuhkan FLARParam yang telah kita inisialisasikan pada fungsi sebelumnya.
container = new FLARBaseNode(); // adalah sebuah display object 3d papervision3d. disini transformasi matrix yang telah didapat dari marker detektor disesuaikan agar hasil augmented yang dihasilkan terlihat benar misalnya ketika kita miringkan ke kiri object 3d ikut miring ke kiri.
setelah itu fungsi untuk melakukan cek ada atau tidaknya marker pada webcam secara terus menerus
private function loop(e:Event):void {
bitmapData.draw(vid);
try{
if (detector.detectMarkerLite(raster, 80) && detector.getConfidence() > 0.5) {
viewport.visible = true;
detector.getTransformMatrix(trans);
container.setTransformMatrix(trans);
bre.renderScene(scene, camera, viewport);
} else {
viewport.visible = false;
}
} catch (e:Error){}
}
fullscript
package
{
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.ByteArray;
import org.libspark.flartoolkit.core.FLARCode;
import org.libspark.flartoolkit.core.param.FLARParam;
import org.libspark.flartoolkit.core.raster.FLARRaster_BitmapData;
import org.libspark.flartoolkit.core.raster.rgb.FLARRgbRaster_BitmapData;
import org.libspark.flartoolkit.core.transmat.FLARTransMatResult;
import org.libspark.flartoolkit.detector.FLARSingleMarkerDetector;
import org.libspark.flartoolkit.pv3d.FLARBaseNode;
import org.libspark.flartoolkit.pv3d.FLARCamera3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
/**
* ...
* @author aditya hadiwijaya
*/
public class flar extends Sprite
{
[Embed(source = "assets/marker16.pat", mimeType = "application/octet-stream")]
private var pattern:Class;
[Embed(source = "assets/camera_para.dat", mimeType = "application/octet-stream")]
private var params:Class;
private var vid:Video;
private var cam:Camera;
private var fparams:FLARParam;
private var mpattern:FLARCode;
private var bitmapData:BitmapData;
private var raster:FLARRgbRaster_BitmapData;
private var detector:FLARSingleMarkerDetector;
private var scene:Scene3D;
private var camera:FLARCamera3D;
private var container:FLARBaseNode;
private var bre:BasicRenderEngine;
private var trans:FLARTransMatResult;
private var viewport:Viewport3D;
private var object:Sprite;
private static const HEIGHT:Number = 600;
private static const WIDTH:Number = 800;
private static const FPS:Number = 15;
public function flar()
{
setupFlar();
setupWebcam();
setupBitmapData();
setupPapervision3d();
addEventListener(Event.ENTER_FRAME, loop);
}
private function setupWebcam():void {
vid = new Video(WIDTH, HEIGHT);
cam = Camera.getCamera();
cam.setMode(WIDTH, HEIGHT, FPS);
vid.attachCamera(cam);
addChild(vid);
}
private function setupFlar():void {
fparams = new FLARParam();
fparams.loadARParam(new params() as ByteArray);
fparams.changeScreenSize(WIDTH, HEIGHT);
mpattern = new FLARCode(16, 16);
mpattern.loadARPatt(new pattern());
}
private function setupBitmapData():void {
bitmapData = new BitmapData(WIDTH, HEIGHT);
bitmapData.draw(vid);
raster = new FLARRgbRaster_BitmapData(bitmapData);
detector = new FLARSingleMarkerDetector(fparams, mpattern,80);
}
private function setupPapervision3d():void {
scene = new Scene3D();
camera = new FLARCamera3D(fparams);
container = new FLARBaseNode();
scene.addChild(container);
var sphere:Sphere = new Sphere(null, 30, 100, 50);
container.addChild(sphere);
bre = new BasicRenderEngine();
trans = new FLARTransMatResult();
viewport = new Viewport3D(WIDTH, HEIGHT)
addChild(viewport);
}
private function loop(e:Event):void {
bitmapData.draw(vid);
try{
if (detector.detectMarkerLite(raster, 80) && detector.getConfidence() > 0.5) {
viewport.visible = true;
detector.getTransformMatrix(trans);
container.setTransformMatrix(trans);
bre.renderScene(scene, camera, viewport);
} else {
viewport.visible = false;
}
} catch (e:Error){}
}
}
}
hasil jadi
cara menggunakan
1. pasang webcam pada komputer anda instal drivernya bila dibutuhkan
2. pada jendela notification klik tombol allow
3. unduh file marker dari artikel di atas
4. print atau tampilkan pada handheld anda jika ukurannya mencukupi (saya menggunakan motorola droid 2 untuk menampilkan markernya)
5. arahkan ke webcam anda sehingga marker logo augi terlihat jelas pada webcam
6. akan terlihat lingkaran dengan wireframe diatas marker yang anda tunjukkan pada webcam
source code
http://augindonesia.org/host/beblank/FLARToolkit.rar


13 comments
Om, kalo mau bikin AR multiple marker untuk handheld device gimana? mohon pencerahannya. saya sedang skripsi tentang AR.
terima kasih
by diwan on October 31, 2011 at 11:18 pm. #
stau gw sih saat ini baru ios sama android yang sukses untuk AR itupun untuk ios masih laggy beda dengan android yang langsung di support langsung oleh qualcomm mereka ada sdk khusus AR untuk android namanya QCAR
untuk flartoolkit sendiri dengan compile adobe air for android ud tes n itu lag bgt n untuk flartoolkit v 2 keatas malah ga jalan kekny sih karena hh (handheld) nya ga kuat
nah untuk multiple marker di handheld keknya bisa diliat di webnya qcar, dari testingnya sendiri mulus bgt untuk single marker n untuk multiple marker menurut gw saat ini yg kuat cuma qcar
by beblank on November 1, 2011 at 4:42 pm. #
mas saya mau tanya,,
ini pakai nya eclipe y??
terus library papervision3d dan FLARToolKit di letakkan di eclipse nya atau gmn ya mas? saya masih bingung mas . . .
mas mohon tutorial nya dari awal pembuatan dan pemasukan library nya mas , , ,
ditunggu jawabannya
by kurcaci on November 11, 2011 at 11:14 pm. #
dikasih cara plg gampang aj ya:D
jadi abis download flartoolkit library buka pake winzip ato extract
nah abis itu bka folder ini berurutan
FLARToolKit_ver0_9_1 -> src
nah ada folder org tuh di extract ke folder src flash buildernya ato flash developnya sama aj :D
nah untuk papervision3d download yang zipnya yg gw pake yang ini Papervision3D_2.1.920.zip
caranya sama
tapi extract smua foldernya nochump sama org tar di klik overwrite aja :D
klo masih bingung bilang aj :D tar dibantuin :D
by beblank on November 11, 2011 at 11:57 pm. #
[...] membaca artikel “Augmented Reality dengan FLARToolKit dan Papervision3D” yang ditulis oleh beblank, mungkin ada sebagian dari Anda yang bertanya “bagaimana [...]
by Tutorial NFT AR IN2AR Papervision3D on November 19, 2011 at 10:36 am. #
Om, mau tanya nih nama file gambarnya ada di code bagian mananya supaya bisa ganti gambar?
code ini “private var object:Sprite;” maksudnya apa? thanks om :D
by ulul on November 27, 2011 at 7:53 am. #
private var object:Sprite itu script yg lupa gw delete :o
soalny kan kadang experimen di sana sini akhirnya kadang lupa yg mana yg musti di delete :o
[Embed(source = "assets/marker16.pat", mimeType = "application/octet-stream")]
tinggal ubah
“assets/marker16.pat”
sesuai sama folder location n file namenya :D
by beblank on November 28, 2011 at 11:57 am. #
Mas Mau nanya menambah tekstur biar teksturnya ada di AR gimana ya mas?
by Dadang on January 20, 2012 at 8:49 pm. #
AR itu cuma library untuk image recognition aja bro
klo mw maen2 di 3dnya ya ubah di object 3dnya
klo pake papervision untuk materialnya dah dibuat artikelnya kok
bisa liat disini
http://augindonesia.org/papervision-material/
by beblank on January 24, 2012 at 2:30 pm. #
mas mau tanya, adakah cara lain untuk membuat AR dengan flartoolkit tanpa mendowload SVN,karena SVN tidak suport pada OS saya, saya memakai OS windowsxp pro2..
mohon dibantu mas,saya masih pemula
terima kasih
by yuni on April 23, 2012 at 6:05 am. #
mas, gmn ms buat dr awal untuk ngimport2 flar,away3d dll di flash dvelop, ???????
by kiki on April 24, 2012 at 2:17 pm. #
bs dibaca disini :D
http://augindonesia.org/import-library-flash-builder-flashdevelop/
by beblank on May 4, 2012 at 1:53 pm. #
mas mau tanya gmna cara ngecek collition detection 2 buah bola atau sphere,,salah satu bolanya dibergerak dengan kontrol marker,,jika bola 1 bersentuhan dengan bola b maka bola b akan menghilang..tolong kasih pencerahan..terimakasih
contoh file
http://www.mediafire.com/?48q45e7tehi472e
by yuni on July 29, 2012 at 12:04 am. #