Penggabungan Metode Inferensi Fuzzy dengan Operator Prewitt untuk Deteksi Tepi

Prewitt adalah salah satu operator klasik dalam deteksi tepi, sederhana dan mudah diimplementasikan namun sensitif terhadap noise. Beberapa penelitian telah dilakukan untuk memperbaiki kinerja operator-operator klasik, dan Fuzzy Logic menjadi salah satu pendekatan yang digunakan. Hal ini dikarenakan deteksi tepi melibatkan tingkat keabuan citra (gray level) yang menimbulkan persoalan ambiguitas nilai dan kekaburan, dua persoalan yang dapat diatasi oleh sebuah sistem Fuzzy dengan baik. Penelitian ini akan membahas tentang penggabungan sistem inferensi Fuzzy dengan operator Prewitt untuk deteksi tepi. Metode yang digunakan adalah mengubah nilai gradien x dan y yang dihasilkan oleh operator Prewitt menjadi himpunan Fuzzy, kemudian menggunakannya sebagai input untuk diolah ke dalam sistem inferensi Fuzzy. Perbandingan citra tepi yang dihasilkan antara menggunakan operator Prewitt murni dengan menggunakan Prewitt-Fuzzy akan ditampilkan dalam tulisan ini.

Metode penelitian yang akan digunakan ditampilkan pada blok diagram di Gambar 1. Pada blok diagram tersebut terdapat dua proses utama, yaitu proses penghitungan gradien dari citra menggunakan operator Prewitt dan proses pengolahan gradien menggunakan sistem inferensi Fuzzy.

Gambar 1. Blok Diagram Metode Deteksi Tepi Prewitt- Fuzzy

Pada penggabungan metode inferensi Fuzzy dengan deteksi Prewitt, input sistem Fuzzy adalah image gradient yang dihasilkan dari konvolusi gambar sumber dengan cadar Prewitt. Input dan output direpresentasikan dalam bentuk fungsi keanggotaan bentuk segitiga. Terdapat dua input dan dua output yaitu white dan black.
Gambar 2. Input dan Output Fuzzy System

Contoh hasil deteksi penggabungan Prewitt-Fuzzy dikenakan terhadap gambar dengan tingkat noise Gauss yang berbeda nilai variannya ditampilkan di Gambar 3.


Gambar 3. Contoh hasil penerapan deteksi tepi Prewitt-Fuzzy

Kesimpulan yang diperoleh dari penelitian ini yaitu:

  1. Metode inferensi Fuzzy berhasil diterapkan bersama operator Prewitt untuk melakukan deteksi tepi.
  2. Penggabungan inferensi Fuzzy dengan operator Prewitt dapat menghasilkan gambar tepi yang secara visual lebih baik apabila dibandingkan dengan gambar tepi yang dihasilkan oleh metode deteksi tepi Prewitt saja, meskipun dengan input berupa gambar dengan noise.
  3. Pemilihan fungsi keanggotaan yang digunakan dalam inferensi Fuzzy mempengaruhi hasil gambar tepi.

Saran

  1. Penelitian ini berhasil mengimplementasikan inferensi Fuzzy bersama-sama dengan operator Prewitt untuk melakukan deteksi tepi dengan input gambar dengan noise, namun terdapat beberapa hal yang perlu dilakukan dalam pengembangan atau penelitian selanjutnya, yaitu:
  2. Perlu dilakukan penelitian lebih lanjut mengenai jenis fungsi keanggotaan Fuzzy yang paling tepat untuk digunakan dalam mendeteksi tepi terutama dengan input gambar dengan noise.
  3. Perlu diteliti lebih lanjut mengenai pengaruh berbagai macam bentuk aturan yang dipilih dalam melakukan inferensi Fuzzy untuk kasus deteksi tepi.
  4. Himpunan Fuzzy yang digunakan dalam penelitian ini adalah himpunan Fuzzy tipe 1, untuk penelitian selanjutnya dapat diteliti mengenai penggunaan himpunan Fuzzy tipe 2 untuk memperbaiki hasil deteksi tepi.
  5. Pengujian akurasi deteksi tepi yang dihasilkan oleh metode Fuzzy perlu dilakukan dengan lebih mendalam menggunakan ground truth images bersama dengan metode pengujian yang berkembang saat ini, dan menggunakan metrik-metrik standar misalnya MSE (Mean Squared Error), dan PSNR (Peak Signal to Noise Ratio)
DAFTAR PUSTAKA
  • C. Gonzalez, R. E. Woods, Digital Image Processing, 2nd ed. New Jersey. USA, Prentice Hall, 2002.
  • Kaur, M. Singh, B. Singh, “Comparative Analysis of Color Edge Detection Techniques Based on Fuzzy Logic”, International Journal of Engineering Sciences, vol. 17, january 2016.
  • S. Nikitha, A. N. Myna, “Fuzzy Logic Based Edge Detection in Color Images”, International Advanced Research Journal in Science, Engineering and Technology, vol. 2, issue 7, July 2015, pp. 65-69.
  • Nachtegael, D. Van der Weken, D. Van de Ville, E. E., Kerre, Fuzzy Filters for Image Processing, Springer, 2003 , pp. 178-194.
  • K. Kaur, V. Mutenja, I. S. Gill, “Fuzzy Logic Based Image Edge Detection Algorithm in MATLAB”, International Journal of Computer Application, vol. 1, number 22, 2010. Pp. 55-58.
  • A. Khaire, Dr. N. S. V. Thakur, “ A Fuzzy Set Approach for Edge Detection”, International Journal of Image Processing (IJIP), vol. 6, issue 6, 2012.
  • Bhardwaj, P. S. Mann, “Adaptive Neuro-Fuzzy Inference System (ANFIS) Based Edge Detection Technique”, Internationa Journal for Science, and Emerging Technologies with Latest Trends, vol. 8, 2013. Pp. 7-13.
  • I. Gonzalez, P. Melin, J. R. Castro, O. Mendoza, O. Castillo, “An Improved Sobel Edge Detection Method Based on Generalized Type-2 Fuzzy Logic”, Journal Soft Computing: A Fusion of Foundations, Methodologies, and Applications, vol. 20, issue 2, February 2016, pp. 773-784.
  • Kapoor, P. Singla, “Implementation of Magnified Edge Detection using Fuzzy-Canny Logic”, International Journal of Computer Science & Communication Network, vol. 2(3), 2012, pp. 425-429.
  • Munir, Pengolahan Citra Digital dengan Pendekatan Algoritmik. Bandung: Penerbit Informatika, 2004.
  • Kusumadewi, H. Purnomo, Aplikasi Logika Fuzzy untuk Pendukung Keputusan. Yogyakarta: Graha Ilmu, 2004.
  • Usada, Elisa. Implementasi Logika Fuzzy Untuk Pilot Agent Dalam Simulator Pengendali Lalu Lintas Udara (ATC Simulator). JURNAL INFOTEL, [S.l.], v. 6, n. 1, p. 13-22, may 2014. ISSN 2460-0997. Available at: <http://ejournal.st3telkom.ac.id/index.php/infotel/article/view/11>. Date accessed: 17 july 2017. doi: https://doi.org/10.20895/infotel.v6i1.11.

Kegiatan Penyuluhan Pemanfaatan Online Marketing Dalam Rangka Mensukseskan Program Generasi Berencana (GenRe) BKKBN Banyumas

BKKBN Banyumas sedang menggalakkan kegiatan sukses Keluarga Berencana (KB) dan Generasi Berencana (GenRe). Kegiatan ini muncul karena adanya keprihatinan terkait kondisi remaja Indonesia saat ini, dimana kasus-kasus penggunaan obat terlarang, seks diluar nikah dan kasus-kasus negatif terkait remaja semakin meningkat jumlah kejadianya. Oleh karena itu BKKBN mendirikan PIK (Pusat Informasi dan Konseling) guna membina para remaja sehingga mampu menjadi remaja yang tangguh menghadapi berbagai godaan kegiatan negatif di sekitarnya. Salah satu kegiatan yang dilakukan adalah penyuluhan teknologi dalam rangka pemberdayaan remaja, yaitu penyuluhan penggunaan media online sebagai media marketing. Kegiatan ini diharapkan dapat memotivasi dan dapat meningkatkan kemampuan remaja dalam memasarkan barang, sebagai salah satu opsi kegiatan yang positif dan produktif.

Untuk mewujudkan misi pengabdian kepada masyarakat di bidang teknologi telematika, ST3 Telkom telah bekerja sama dengan BKKBN Banyumas dalam kegiatan penyuluhan kepada remaja di Kecamatan Banyumas. Kegiatan pengabdian tersebut merupakan bentuk sinergi antara ST3 Telkom dengan BKKBN sehingga keilmuan para dosen ST3 Telkom dapat diimplementasikan dan bermanfaat di masyarakat. Adapun fokus dalam kegiatan ini adalah mengenalkan kegiatan internet marketting dan memberikan pelatihan dasar penggunaan media online untuk pemasaran bagi para remaja. Tujuan utama dalam kegiatan penyuluhan ini adalah sebagai sebuah kegiatan untuk dapat meningkatkan pengetahuan dan wawasan para remaja tentang pemasaran online serta sebagai sebuah kegiatan untuk dapat memotivasi remaja untuk lebih produktif dan berkegiatan positif.

Seminar Parenting: Peran Orang Tua dalam Mengontrol Penggunaan Smartphone oleh Anak

Pada hari Sabtu, 29 Januari 2017 ST3 Telkom Purwokerto menyelenggarakan acara seminar parenting dengan tema Peran Orang Tua Dalam Penggunaan Smartphone oleh Anak. Peserta seminar parenting tersebut adalah orang tua/ wali murid siswa-siswi TK/SD Al Isyah Purwokerto, sedangkan pembicara merupakan dosen ST3 Telkom Purwokerto, diantaranya adalah saya.
Seminar parenting ini terlaksana sebagai wujud kepedulian para orang tua terhadap pengaruh negatif dari keterbukaan informasi pada masa sekarang. Teknologi informasi dan komunikasi telah berkembang dengan sangat pesat baik dari sisi perangkat keras maupun lunak. Perkembangan ini tidak hanya mempengaruhi gaya hidup masyarakat, baik orang tua, muda namun juga anak-anak. Anak-anak pada masa sekarang ikut merasakan akses informasi yang terbuka lebar dalam bentuk digital. Hal ini perlu diimbangi dengan peran kontrol dari orang tua mengingat informasi jaringan global (internet) dapat mengandung konten yang belum sesuai dikonsumsi anak-anak.

Orang tua sebagai role-model bagi anak-anak mereka selayaknya dapat memberikan contoh bagaimana pemanfaatan gadget terutama yang dibahas dalam seminar ini adalah penggunaan smartphone. Selain contoh role-model dari orang tua, peran orang tua dalam mengontrol aktifitas penggunaan smartphone juga diperlukan. Kontrol dapat berupa kontrol bersifat langsung misalnya pemberian jadwal penggunaan smartphone, kesepakatan anak-orang tua dalam penggunaan smartphone maupun pendampingan orang tua selama anak beraktifitas menggunakan smartphone. Kontrol secara tidak langsung dapat berupa pemanfaatan perangkat lunak parenting-kontrol.

Perangkat lunak parenting kontrol yang dicontohkan dalam seminar ini adalah Kakatu dan Kaspersky Safe Kids. Kakatu merupakan aplikasi kontrol yang dipasang di smartphone anak untuk mengontrol aktifitas penggunaan smartphone. Kaspersky Safe Kids memiliki fitur yang sedikit berbeda dengan Kakatu yaitu Kaspersky Safe Kids memungkinkan orang tua melakukan kontrol secara remote terhadap smartphone anak. Kaspersky Safe Kids dapat dipasang di smartphone anak dan juga smartphone orang tua, selanjutnya orang tua dapat melakukan kontrol dan memonitor aktivitas penggunaan smartphone anak melalui smarphone yang dimiliki orang tua. Kedua aplikasi diatas memiliki edisi bersifat free (tidak berbayar). Namun apabila memerlukan fitur lebih canggih, Kaspersky Safe Kids edisi berbayar memiliki kelebihan dapat merekam aktifitas telepon dan SMS dari smartphone anak.

Acara ini disertai dengan pengenalan ST3 Telkom Purwokerto kepada orang tua murid. Pengenalan dilakukan oleh Tim PMB St3 Telkom Purwokerto. Hal ini diharapkan dapat mengenalkan ST3 Telkom Purwokerto kepada masyarakat luas. Di akhir acara, pihak SD Al-Isyah menyerahkan kenang-kenangan kepada ST3 Telkom Purwokerto dan pembicara.

Belajar Menyambung Fiber Optik dengan Media Belajar Berbasis Augmented Reality

Topik fiber optik dituangkan dalam mata kuliah Sistem Komunikasi Serat Optik (SKSO) yang dipelajari oleh mahasiswa program studi S1 Teknik Telekomunikasi.  Salah satu materi praktikum dalam SKSO memuat tentang langkah-langkah penyambungan serat optik menggunakan alat Fusion Splicer yang tergolong sebagai alat praktikum yang cukup mahal, dengan harga kisaran 80 juta rupiah ke atas per alat. Sehingga mahasiswa hanya dapat mempelajari cara kerja alat tersebut di laboratorium. Apabila tersedia sebuah media yang mampu menampilkan cara kerja dengan Fusion Splicer maka dapat menjadi bahan belajar yang dapat digunakan oleh mahasiswa diluar laboratorium.

Salah satu teknologi yang dapat dimanfaatkan untuk menampilkan cara kerja suatu alat adalah teknologi Augmented Reality (AR). AR merupakan teknologi untuk menampilkan penggabungan konten yang dibangkitkan oleh komputer dengan tampilan video (live video) dunia nyata secara real time. Konten yang dibangkitkan dapat berupa model tiga dimensi. Model tiga dimensi memungkinkan sebuah objek ditampilkan dalam bentuk mendekati aslinya sehingga pengguna dapat merasakan pengalaman (user experience) seolah-olah sedang melihat objek asli.

Pada semester Genap 2015/2016 saya berkolaborasi dengan rekan saya Pak Eko Fajar Cahyadi, seorang dosen Program Studi S1 TT dengan spesialisasi Komunikasi Serat Optik, mencoba membuat proposal penelitian dengan skema Penelitian Dosen Pemula untuk tahun ajuan 2016. Semoga proposal penelitian tersebut dapat lolos pendanaan dari RISTEKDIKTI sehingga penelitian ini dapat berlanjut memberikan output sebuah media belajar penyambungan serat optik berbasis Augmented Reality (AR).

Bagi anda yang ingin mengenal AR dan teknis pembuatannya, dapat membaca beberapa posting blog saya di:

Mobile Augmented Reality dengan Metaio SDK untuk Android [Getting Started]



My First Multi Marker Multi Collada (PV3D)



in2AR versi 2



Mencoba Membangun AR Menggunakan D’Fusion Studio – Total Immersion


Mengenal Construct 2: Game Engine Berbasis HTML5 untuk Game 2D Multiplatform

https://www.scirra.com/construct2

Construct 2, game engine keluaran Scirra Ltd, merupakan game engine yang dapat digunakan oleh siapapun tanpa harus menguasai bahasa pemrograman. Construct 2 saat ini hanya tersedia untuk sistem operasi Windows, namun game yang dihasilkan dapat dijalankan dalam berbagai platform, Android, iOS, Windows Phone, Linux, maupun Mac.

Scirra menyediakan dua macam versi lisensi yaitu lisensi gratis dan berbayar. Beberapa keterbatasan versi lisensi gratis misalnya, game yang telah dibuat hanya dapat publish melalui Windows Store, Chrome Store, Facebook dan Scirra. Eksport game menjadi aplikasi multiplatform Windows, Mac, Android, dan sebagainya hanya dapat dilakukan dalam versi berbayar.

construct2Tampilan Construct 2 Editor

Tampilan area kerja Construct 2 berupa layout editor berkonsep WSIWYG (What You See is What You Get) sehingga mudah dioperasikan bahkan oleh orang awam (bukan profesional dalam bidang game). Selain itu membuat game dengan Construct 2 dilakukan cukup dengan klik dan drag & drop. Tools yang dimiliki Construct 2 dapat dengan mudah digunakan oleh siapa pun tanpa harus menguasai bahasa pemrograman. Penataan objek dalam Construct 2 menggunakan prinsip layering sehingga penataan objek yang diperlukan menjadi lebih fleksibel bagi pengguna.

Pembuatan game dengan Construct2 dapat dimulai dengan memilih tombol New Project untuk membuat proyek game yang baru. Project akan tersimpan sebagai file dengan ekstensi .capx. Selanjutnya pengguna akan disuguhi tampilan layout yang masih kosong. Penambahan background ataupun objek game lainnya dapat dilakukan dengan klik kanan pada layout dan memilih menu “Insert New Object”. Game yang dibuat dengan Construct 2 biasanya tersusun atas “sprite object“. Apa itu sprite object? Silakan buka google.com. Penataan objek lebih lanjut dapat memanfaatkan layer. Layer dapat ditambah, dikurangi dan diatur menggunakan “Layer tabs” yang berada di sebelah “Project bar”.

Untuk menambah “behavior” bagi objek game, pengguna dapat memilih behavior yang telah disediakan Construct 2. Beberapa contoh behavior yang disediakan misalnya:

  • 8 direction movement: objek dapat digerakkan menggunakan arrow keys
  • bullet movement: objek bergerak sesuai sudut tertentu
  • scroll to: tampilan layar akan bergerak sesuai dengan pergerakan objek game

Pengaturan behaviour dilakukan melalui Properties bar. Klik objek yang akan dikenai behavior, kemudian pada Properties bar, klik Add/Edit pada kategori behavior. Behavior nantinya terkait juga dengan event. Event merupakan aksi yang dilakukan oleh objek game ketika menghadapi kondisi-kondisi tertentu. Construct 2 menyediakan berbagai macam event yang pada umumnya dibutuhkan.

Bagaimana dengan event yang berulang? Prinsip reusable, dalam penerapannya disebut instance, juga dikenal dalam Construct 2.  Penerapannya antara lain pada events dan variable. Variable digunakan untuk memberikan sifat bagi objek game. Variable juga diatur melalui Properties bar. Berdasarkan gambaran diatas, mudah bukan membuat game dengan Construct 2?

Selanjutnya apabila game telah siap, game dapat diekspor ke dalam berbagai format melalui menu File. Apabila ingin mempelajari lebih lanjut, scirra telah menyediakan dokumentasi dan tutorial online.

 

My First Multi Marker Multi Collada (PV3D)


Saya sedang mencoba belajar tentang AR. Library yang saya coba pertama kali adalah ARToolKit. Tutorial ARToolKit yang cukup lengkap untuk pemula dapat ditemukan di sini. Tetapi melihat keterbatasan dari ARToolKit dan pengembangannya, akhirnya saya mencari-cari lib lain yang dapat saya pelajari. Akhirnya saya menemukan FLARToolKit.
Selanjutnya saya mulai mempelajari FLARManager, framework yang di dalamnya telah ada lib untuk tracking sekaligus ada 3D framework. FLARManager mendukung FLARToolKit sebagai tracking lib dan beberapa 3D framework untuk rendering model 3D yang ingin saya tampilkan.
Alat yang saya gunakan adalah:

  1. FlashDevelop sebagai IDE
  2. Adobe Flex sebagai compiler
  3. FLARManager sebagai framework untuk AR

Sesudah instalasi FlashDevelop, anda perlu meletakkan Adobe Flex di dalam direktori Tools yang ada di direktori tempat FlashDevelop terinstall (beri nama folder flexsdk). FLARManager yang saya gunakan saya dapatkan di sini. FLARManager tersebut telah mendukung multi marker dengan multi collada. Pemilik blog menggunakan Away3D.

Pada awalnya saya menggunakan source code yang saya dapatkan mentah-mentah, namun hasilnya tidak memuaskan. Warna dasar dari collada yang saya gunakan tidak dapat ditampilkan dengan baik. Solusinya harus membuat tekstur material untuk ditempelkan di collada.

Teman saya menganjurkan untuk menggunakan method load() yang dimiliki class DAE. Tetapi masalahnya, class DAE adalah milik Papervision (PV3D), sementara source code menggunakan Away3D. Setelah berpusing ria memodifikasi kode MultiMarkerMultiCollada.as yang awalnya menggunakan Away3D, untuk diubah menjadi menggunakan Papervison, akhirnya saya menyerah.

Saya mencoba solusi lain:
Di dalam folder Example dari FLARManager, ada contoh kode yang digunakan untuk papervision, yaitu FLARManagerTutorial_Collada_PV3D.as. Saya mencoba memodifikasi kode di dalamnya, yang awalnya hanya untuk 1 marker menjadi multimarker, menggunakan acuan kode di dalam MultiMarkerMultiCollada.as, dan berhasil… Akhirnya saya bisa menampilkan multi collada menggunakan multi marker dengan PaperVision.
Kode hasil modifikasi saya mirip dengan yang ada di lOOney dOOdle. Karena MultiMarkerMultiCollada.as yang saya jadikan acuan adalah hasil modifikasi dari kode lOOney dOOdle.

Kuncinya ada di fungsi-fungsi berikut:

        private function onMarkerAdded (evt:FLARMarkerEvent) :void
       {
            trace(“[“+evt.marker.patternId+”] added”);
           
            //this.modelContainer.visible = true;
            //this.activeMarker = evt.marker;
           
            if (evt.marker.patternId == 0) {
                markerAdded(0);
                this.activeMarker = evt.marker;
            }
           
            if (evt.marker.patternId == 1) {
                markerAdded(1);
                this.activeMarker1 = evt.marker;
            }
           
            if (evt.marker.patternId == 2) {
                markerAdded(2);
                this.activeMarker2 = evt.marker;
            }
        }
       
        private function onMarkerUpdated (evt:FLARMarkerEvent) :void
       {
            trace(“[“+evt.marker.patternId+”] updated”);
            //this.modelContainer.visible = true;
            //this.activeMarker = evt.marker;
           
            if (evt.marker.patternId == 0) {
                markerAdded(0);
                this.activeMarker = evt.marker;
            }
           
            if (evt.marker.patternId == 1) {
                markerAdded(1);
                this.activeMarker1 = evt.marker;
            }
           
            if (evt.marker.patternId == 2) {
                markerAdded(2);
                this.activeMarker2 = evt.marker;
            }
        }
       
        private function onMarkerRemoved (evt:FLARMarkerEvent) :void
       {
            trace(“[“+evt.marker.patternId+”] removed”);
            //this.modelContainer.visible = false;
            //this.activeMarker = null;
           
            if (evt.marker.patternId == 0) {
                markerRemoved(0);
            }
           
            if (evt.marker.patternId == 1) {
                markerRemoved(1);
            }
           
            if (evt.marker.patternId == 2) {
                markerRemoved(2);
            }
           
            this.activeMarker = null;
            this.activeMarker1 = null;
            this.activeMarker2 = null;
        }
       
        private function onEnterFrame (evt:Event) :void {
            // apply the FLARToolkit transformation matrix to the Cube.
            if (this.activeMarker) {
                this.modelContainer.transform = PVGeomUtils.convertMatrixToPVMatrix(this.activeMarker.transformMatrix);
            }
           
            if (this.activeMarker1) {
                this.modelContainer1.transform = PVGeomUtils.convertMatrixToPVMatrix(this.activeMarker1.transformMatrix);
            }
           
            if (this.activeMarker2) {
                this.modelContainer2.transform = PVGeomUtils.convertMatrixToPVMatrix(this.activeMarker2.transformMatrix);
            }
           
            // update the Papervision3D view.
            this.renderEngine.render();
        }
       
        private function markerAdded(markerId:int):void
       {
            switch(markerId) {
                case 0: {
                    if (modelContainer.visible == false) {
                        modelContainer.visible = true;
                        break;
                    } else {
                        break;
                    }
                }
                case 1: {
                    if (modelContainer1.visible == false) {
                        modelContainer1.visible = true;
                        break;
                    } else {
                        break;
                    }
                }
                case 2: {
                    if (modelContainer2.visible == false) {
                        modelContainer2.visible = true;
                        break;
                    } else {
                        break;
                    }
                }
            }
        }
       
        private function markerRemoved(markerId:int):void
       {
            switch(markerId) {
                case 0: {
                    if (modelContainer.visible == true) {
                        modelContainer.visible = false;
                        break;
                    } else {
                        break;
                    }
                }
                case 1: {
                    if (modelContainer1.visible == true) {
                        modelContainer1.visible = false;
                        break;
                    } else {
                        break;
                    }
                }
                case 2: {
                    if (modelContainer2.visible == true) {
                        modelContainer2.visible = false;
                        break;
                    } else {
                        break;
                    }
                }
            }
        }

File collada yang saya gunakan sebagai contoh saya dapatkan dari internet, untuk objek mario saya masih menggunakan contoh collada dari sini

Thanks to: Phat Cool atas sharing ilmunya

Mobile Augmented Reality dengan Metaio SDK untuk Android [Getting Started]

Note: saya mencoba di ACER Liquid Z110 & Lenovo A390

Metaio merupakan salah satu SDK untuk membangun aplikasi Augmented Reality berbasis mobile maupun PC. Metaio dapat digunakan pada platform iOS, Android dan PC. Metaio juga dapat digunakan bersama-sama dengan Unity3D. Official website untuk developer dapat dikunjungi di http://dev.metaio.com.

Minimal Requirement untuk Perangkat Android yang Digunakan (Handphone):
Perlu diketahui minimal requirement untuk menjalankan metaio yaitu:
android 2.2 (proyo), handheld dengan procesor ARMv7(cortex), OpenGLES 2.0, camera, GPS, accelerometer, magnetic sensor.
Cek minimal requirement untuk handheld dapat menggunakan software Android System Info (play.google.com).

Langkah-Langkah Memulai Metaio:
1. Download & Install Metaio SDK
2. Setting up Environment, dapat menggunakan beberapa cara:

  • menggunakan Tegra Android Dev.package
  • menggunakan official android SDK (android SDK+IDE)
  • download android SDK saja dan IDE menggunakan yang sudah ada di komputer
  • menggunakan ADT (Android Dev Tools) bundle.
    Saya menggunakan ADT bundle, cara penggunaan:
    – download ADT bundle
    – unzip
    – jalankan eclipse

3. mencoba menjalankan file contoh. Import project metaioSDK dan SDK_Example yang berada di dalam folder _Android. Folder _Android terletak di dalam folder metaioSDK di komputer anda. Sesudah import, normalnya Eclipse akan melakukan buid projects tersebut secara otomatis. Jika tidak, dapat dilakukan build manual melalui menu Project–> Build, pastikan build  metaioSDK terlebih dahulu.

4. Menjalankan aplikasi melalui handphone. Koneksikan handphone dengan USB atau jaringan. Pastikan opsi USB debugging dalam pengaturan sistem handphone telah diaktifkan. Selanjutnya klik kanan pada project SDK_Example, pilih Run As –> Android Application. Jika tidak terjadi masalah maka Eclipse akan melakukan upload dan install aplikasi pada handphone dan tampilan “Basic tutorials” seperti gambar 1 akan muncul di layar handphone.

Gambar 1. Tampilan Basic Tutorials

Permasalahan yang Sering Muncul:

  1. Terjadi Error Google API’s 17
    Dapat diatasi dengan menjalankan SDK Manager kemudian cari API 17 yang belum terinstall pada check list yang muncul. Lakukan install API secara online.
  2. Error pada Class (Can’t resolved, inconsistence…..)
    Hal ini dapat disebabkan oleh:
    JRE yang ada di dalam komputer tidak compatible dengan versi ADT atau versi Android yang digunakan. Dapat juga karena setting JRE pada compiler Eclipse (Window > Preferences > Java) berbeda versi dengan JRE yang terinstal pada komputer (Window > Preferences > Java > Installed JRE).
  3. Eclipse tidak dapat menginstall aplikasi ke dalam handphone
    Hal ini terjadi kemungkinan karena driver handphone belum terinstall di komputer atau handphone tidak memenuhi minimal requirement untuk menjalankan MetaioSDK.

Double Buffering untuk Mengatasi “Flickering” di JAVA Applet

“Flickering” atau gambar yang berkedip merupakan masalah yang umum terjadi ketika membuat objek dan animasi di JAVA applet menggunakan AWT library. Berikut ini contoh kode untuk animasi sederhana di JAVA applet:

import java.applet.*;
import java.awt.*;
public class AnimasiBola extends Applet implements Runnable
{
   int x_pos = 10; 

   int y_pos = 100; 
   int radius = 20; 

public void init() 

   setBackground (Color.blue); 
 } 

public void start ()

   Thread th = new Thread (this); 
   th.start (); 
 } 

public void run () 

   Thread.currentThread().setPriority(Thread.MIN_PRIORITY); 

   while (true) 
   { 
        x_pos ++; 
        repaint(); 

        try 
        { 
             Thread.sleep (20); 
         } 
        catch (InterruptedException ex) { } 

       Thread.currentThread().setPriority(Thread.MAX_PRIORITY); 
   } 
 } 

public void paint (Graphics g) 
 { 
     g.setColor (Color.red); 
     g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius); 
  } 
}

Jika kode diatas dijalankan, animasi pada layar terlihat kurang “smooth”, terlihat seakan-akan gambar berkedip sekian detik. Hal inilah yang sering disebut dengan istilah “flickering”. Sedangkan penjelasan sederhana dari fenomena “flickering” adalah:

  • Ketika method repaint() dipanggil, method update() akan dijalankan.
  • Method update() secara default akan membersihkan tampilan layar kemudian memanggil method paint(). Method paint() inilah yang bertugas membentuk objek.
  • Karena ada mekanisme “bersihkan layar” dari method update() maka terjadi jeda waktu sekian milidetik antara tampilan layar yang dibersihkan dengan penggambaran kembali objek di layar.

Hal inilah yang mengakibatkan gambar objek berkedip. Untuk mengatasi hal tersebut, ada suatu cara yang cukup mudah yaitu dengan menggunakan ‘double buffering‘. Prinsip double buffering adalah sebagai berikut:

Analogikan layar JAVA applet terdiri dari dua screen layer, background layer dan foreground layer. Segala hal yang ada di background tidak akan terlihat jika ada objek di foreground di posisi yang sama. Ketika repaint() dipanggil, method update() membuat sebuah gambar di background, gambar yang dibuat sama dengan gambar objek yang akan ditampilkan di foreground. Selanjutnya gambar di background diduplikasikan ke foreground. Sehingga jeda waktu ketika layar dibersihkan akan terisi oleh gambar dari background.

Double buffering dilakukan di dalam method update(). Berikut ini contoh kode double buffering dari website ini :

public void update (Graphics g) {
// initialize buffer

if (dbImage == null) {

dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics (); }

// clear screen in background
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

// draw elements in background
dbg.setColor (getForeground());
paint (dbg);

// draw image on the screen
g.drawImage (dbImage, 0, 0, this);
}

Lately, Buku Pemrograman == Buku Resep

Hari ini saya punya kesempatan ngobrol kembali dengan guru saya. Seorang JAVA programmer paling hebat yang pernah saya kenal. Seorang yang lebih memilih ketak ketik daripada drag and drop atau klik sana, klik sini di IDE. Seorang yang hingga saat ini belum pernah menggunakan Netbeans. Seorang yang lebih memilih menulis sendiri JAVA framework untuk para konsumen-nya ketimbang menggunakan framework yang telah ada. Intinya, seorang yang ‘old-fashioned‘ atau lebih tepatnya ‘konvensional’ 🙂 However, itulah yang membuat beliau hebat dan faham betul JAVA “luar dalam”.

Percakapan diawali dengan sapaan yang biasa beliau lontarkan ke saya, “Lagi opo, nduk?” Saya pun menjawab bahwa saya sedang mengajar, kemudian saya bercerita bahwa dalam mengajar JAVA, saya masih menggunakan buku JAVA SL-275 keluaran Sun, dan tutorial-tutorial yang dahulu saya dapatkan ketika saya masih belajar bersama beliau. Kemudian beliau berkomentar, buku materi dasar-dasar JAVA yang baik sepanjang pengetahuan dia adalah:
1. JAVA SL-275
2. Bruce Eckel – Thinking in Java (http://www.mindview.net/Books/TIJ/)
3. Josh Bloch – Effective Java

Beliau berkata “saya tidak cocok dengan buku-buku pemrograman yang banyak beredar di toko-toko buku jaman sekarang, buku-buku tersebut tak ubahnya seperti buku resep masakan saja…”

Beliau melanjutkan, “Buku resep hanya menampilkan nama masakan, nama bahan dan bagaimana cara membuatnya, tanpa menjelaskan bahwa cabai itu pedas, garam itu asin, intinya bersifat instan, tanpa konsep…”

Saya pun berpikir, apa yang beliau sampaikan memang benar. Buku-buku pemrograman yang beliau maksudkan memang seperti buku resep. Intinya, minim konsep. Tetapi kenapa buku-buku tersebut laku keras? Bahkan ada yang direvisi dan dicetak ulang setiap tahun, dan tetap laku! Guru saya pun punya jawabannya, “Jaman sekarang jarang-jarang ada orang belajar pemrograman yang orientasinya konsep. Sekarang semuanya mau cepat, serba instan.” Saya setuju dengan hal tersebut. Hal yang kemudian terlintas dalam benak saya adalah ‘kenapa’?

Beberapa kemungkinan yang terlintas di benak saya adalah:
Pertama, ada tuntutan deadline waktu pembuatan aplikasi. Mahasiswa yang diminta membuat sebuah aplikasi sebagai tugas mata kuliah, kebanyakan akan memilih membeli buku-buku instan tersebut. Hal ini karena pengetahuan tentang konsep membutuhkan waktu yang lebih lama, sedangkan mereka dibatasi deadline oleh dosennya. Maka orientasi para mahasiswa tersebut adalah, yang penting aplikasi jadi.
Kemungkinan kedua, berkaitan dengan perubahan lingkungan dan kultur. Hal ini cukup kompleks untuk dibahas, karena bersifat multidimensi. Bahkan, secara tak sadar, hal-hal kecil yang ada di jaman sekarang, contohnya tayangan televisi pun, secara tidak langsung telah mendidik masyarakat untuk lebih menyukai hal-hal yang serba instan.

Then… Bahkan saya mulai berpikir, blog saya ini -pun jangan-jangan menurut beliau juga seperti buku resep. Sepertinya saya harus merombak tulisan-tulisan saya disini agar lebih menekankan konsep ketimbang langkah-langkah praktis.