Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

Android SDK Augmented Reality: Kamera & Sensor Setup

Read Time:12 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Dika Budiaji (you can also view the original English article)

Augmented reality (AR) adalah hot topic di aplikasi seluler hari ini. Smartphone dan tablet memiliki kekuatan dan hardware yang mampu memungkinkan developer untuk membuat aplikasi baru yang menggabungkan live camera dan video feed, hiper-akurat sensor data dan data real-time user lain dalam cara yang menarik. Hari ini kami akan mulai menjelajahi dunia augmented reality , dan apa Android platform yang ditawarkan untuk developer yang mencari untuk membangun aplikasi AR dan menyediakan deep, rich experience untuk pengguna mereka.


Juga tersedia dalam seri ini:

  1. Android SDK Augmented Reality: Kamera & Sensor Setup
  2. Android SDK Augmented Reality: Lokasi & jarak

Langkah 0: Prasyarat dan persiapan

Tutorial ini bergerak di kecepatan yang cuku cepat. Dengan demikian, kami berharap pembaca untuk menjadi akrab dengan semua dasar-dasar mengenai menciptakan dan menjalankan Android proyek. Kami juga berharap bahwa pembaca akan memiliki perangkat Android yang cukup kuat untuk menjalankan aplikasi AR (seperti Nexus S). Kebanyakan pengujian aplikasi ini akan perlu untuk dilakukan pada perangkat Android yang sebenarnya, karena app sangat bergantung pada kamera, sensor, dan data lokasi yang tidak tersedia di emulator.

Kami telah menyediakan contoh aplikasi dalam hubungannya dengan tutorial ini untuk di-download. Proyek ini akan ditingkatkan selama ini seri tutorial AR premium, jadi pergi download proyek Android dan ikuti!


Bagian 1: AR App apa yang akan kita kembangkan?


Pertama, kita perlu mendefinisikan (dalam istilah luas) apa yang akan dilakukan oleh aplikasi ini. Kami ingin tetap dengan ciri khas aplikasi AR, dan meningkatkan dari waktu ke waktu.

Jadi aplikasi apa yang akan kita bangun? Kita akan membangun sebuah aplikasi AR berbasis lokasi. Jenis AR apps umumnya menunjukkan mana hal-hal di dunia nyata dengan menunjukkan mana app berpikir mereka adalah atas pandangan kamera ketika pengguna memegang telepon dan bergerak.

Berbagai jenis aplikasi AR adalah jenis yang recognizes objek menggunakan algoritma vision komputer dan dapat menarik informasi atas kamera untuk menunjukkan objek apa, bagaimana itu telah berorientasi, atau mungkin menambahkan atau menunjukkan benda-benda lain dalam tampilan. Sementara kita tidak akan membangun aplikasi AR semacam ini, banyak teknik yang kita ajarkan di sini dapat diterapkan untuk kedua jenis aplikasi AR.

Arsitektur dasar aplikasi berbasis lokasi yang melibatkan view kamera, lokasi pengguna, telepon orientasi dibandingkan dengan dunia nyata, dan daftar lokasi untuk item yang kami ingin menunjukkan pada layar-data yang kami menambah kamera vision dunia.



Bagian pertama dari seri kita akan berbicara tentang kamera dan sensor. Dalam bagian selanjutnya, kita akan berbicara tentang data lokasi dan matematika yang terlibat dalam membangun aplikasi.


Aplikasi persyaratan: Fitur perangkat apa Apakah yang perlu oleh aplikasi kami?

Aplikasi AR khas Anda memerlukan akses ke fitur perangkat berikut:

  • Akses ke tampilan kamera
  • Akses ke lokasi pengguna
  • Akses ke sensor perangkat lain, terutama Kompas (accelerometer dan giroskop juga dapat berguna)

Aplikasi mungkin juga memerlukan layanan lainnya dan premission, seperti akses jaringan, tetapi ini tidak terlalu penting kepada aspek AR aplikasi.


Catatan pada perangkat Target: Nexus S


Tidak semua perangkat Android (atau perangkat seluler secara umum) memiliki spesifikasi perangkat keras untuk mampu menangani persyaratan aplikasi AR. Untuk tujuan dari tutorial ini, kami menargetkan Nexus S menjalankan Android 2.3.4, yang memenuhi persyaratan keras tertentu dengan baik. Oleh karena itu, aplikasi kami akan menargetkan versi Android SDK yang sangat spesifik. Ini akan menjaga aplikasi tetap sederhana. Namun, persyaratan SDK dapat lebih fleksibel setelah Android manifest mengidentifikasi semua fitur perangkat keras yang diperlukan, atau Anda menerapkan fungsionalitas alternatif untuk perangkat yang kurang kuat.

Sementara Nexus S lebih dari mampu melakukan tugas-tugas AR yang wajar, banyak perangkat lain juga mampu, termasuk beberapa perangkat yang lebih tua. Jika Anda sedang membangun sebuah aplikasi produksi yang menggunakan teknologi AR, Anda akan menguji hati-hati pada perangkat target untuk respon, kegunaan dan fungsionalitas yang benar.


Bagian 2: Setup proyek


Sekarang kita siap untuk mulai mengembangkan! Mari kita mengatur proyek AR dengan benar. Aplikasi ini dikonfigurasi seperti proyek aplikasi lainnya dalam Eclipse.


Langkah 1: Buat proyek Eclipse baru


Memulai dengan menciptakan sebuah proyek Android baru dalam Eclipse. Berikut adalah rincian proyek yang kita gunakan untuk contoh proyek (tersedia untuk di-download):

  • Proyek Name: ARTUT
  • API Level Min/Target: 10
  • Launch Activity Class: ArtutActivity

Langkah 2: Mengkonfigurasi berkas manifes


Selanjutnya, Anda akan ingin mengkonfigurasi Android Manifest File. Anda akan menentukan pengaturan berikut:

Pada Tab Manifest, tambahkan pengaturan sebagai berikut:

  • android.hardware.camera (Required=true)
  • android.hardware.camera.autofocus (Required=false)
  • android.hardware.location.gps (Required=true)
  • android.hardware.sensor.compass (Required=true)
  • android.hardware.sensor.gyroscope (Required=true)
  • android.hardware.sensor.accelerometer (Required=true)

Pada Tab aplikasi:

  • Debuggable harus ditetapkan ke true

Pada Tab izin, menambahkan pengaturan untuk:

  • android.permission.CAMERA
  • android.permission.FINE_LOCATION

Langkah 3: Menghubungkan perangkat Target


Akhirnya, jika Anda belum melakukannya, Anda akan perlu untuk men-setup perangkat Android untuk testing dan colokkan ke mesin pengembangan Anda melalui USB. Jika Anda tidak melakukan hal ini sebelumnya, Anda mungkin perlu untuk men-download dan menginstal driver sebelum digunakan.

Ini akan memerlukan mengganti dan melaksanakan dua metode baru: onAccuracyChanged() dan onSensorChanged(). Kami akan melakukan semua pengembangan kami dan testing terhadap hardware sebenarnya. Selain menyediakan lingkungan pengujian lebih baik apabila menggunakan sensor, kamera dan perangkat keras lain, kami juga menemukan bahwa pengujian pada hardware sebenarnya jauh lebih cepat karena keterbatasan kinerja dan fitur emulator.


Bagian 2: Bekerja dengan kamera


Langkah nyata pertama kami dalam mengembangkan aplikasi AR melibatkan kamera konten yang ditampilkan pada layar. Kita melakukan ini dengan menerapkan SurfaceView kustom yang ditampilkan dalam tata letak activity tersebut.


Langkah 1: Menentukan tata letak layar App


Pertama, kita perlu mendefinisikan layout resource tata letak yang akan digunakan untuk layar AR utama. FrameLayout paling tepat untuk layar kami, karena memungkinkan lapisan dilihat dalam area tampilan. Oleh karena itu, layout resouce kita, /res/layout/main.xml, bisa sangat sederhana:


Langkah 2: Menentukan SurfaceView kustom untuk hold kamera konten


Selanjutnya, Anda perlu mendefinisikan kustom view kontrol untuk digunakan dalam FrameLayout Anda. Kelas SurfaceView dapat digunakan untuk tujuan ini. Oleh karena itu, Anda dapat menggunakan kelas ini merangkum gambar kamera Anda.

ArDisplayView kelas dimulai dengan konstruktor. Kami telah menambahkan Activity sebagai parameter konfigurasi (lebih banyak di langkah berikutnya). Konstruktor harus menginisialisasi SurfaceHolder mendasari, yang mengontrol drawing pada layar.

(Satu catatan di sini adalah bahwa meskipun setType() metode usang dan dokumentasi Android SDK mengatakan hal ini tidak lagi diperlukan, kami telah menemukan bahwa kode kamera tidak akan berfungsi tanpa itu, hanya gagal untuk memulai, bahkan pada perangkat yang terbaru.)

Kami telah menambahkan variabel member sesuai untuk bekerja dengan kamera, dan kami juga menyimpan Activity di sekitar sehingga kita dapat bereaksi terhadap perubahan orientasi dan lain akses nyaman ke Context atau Activity yang kita butuhkan.


Langkah 3: Menerapkan callback SurfaceHolder


Selanjutnya, Anda harus menerapkan callback SurfaceHolder dalam kelas. Memperbarui kelas ArDisplayView Anda sehingga menerapkan interface SurfaceHolder.Callback, seperti ini:

Ini akan overriding dan implementing tiga metode baru: surfaceCreated(), surfaceChanged() dan surfaceDestroyed().

Ketika bekerja dengan kamera, ada serangkaian langkah-langkah yang diperlukan untuk startup dan shutdown. Langkah-langkah ini jelas didokumentasikan dalam docs Android SDK untuk kelas kamera. Kita pada dasarnya drop langkah ke callback SurfaceHolder yang sesuai.


Langkah 4: Menerapkan surfaceCreated() Callback


Kita mulai dengan callback surfaceCreated() metode. Di sini kita meminta kamera, mengatur tampilan kamera orientasi Berdasarkan orientasi saat ini perangkat (sehingga pratinjau kamera selalu menampilkan sisi kanan atas), dan memanggil metode setPreviewDisplay() untuk mengikat pratinjau kamera untuk SurfaceHolder kami.


Langkah 5: Menerapkan surfaceChanged() Callback


Banyak kode yang menarik untuk di lihat pratinjau kamera di surfaceChanged() callback. Di sini kami meminta kamera parameter dan memeriksa apa ukuran didukung Tinjauan. Kita perlu menemukan ukuran tinjauan yang dapat ditampung oleh surface, sehingga kami mencari kecocokan terdekat dan menggunakannya sebagai ukuran Tinjauan kita. Selanjutnya, kita mengatur format pratinjau kamera, mengkomit perubahan parameter kamera, dan akhirnya memanggil metode startPreview() untuk mulai menampilkan pratinjau kamera dalam surface kami.


Langkah 6: Menerapkan surfaceDestroyed() Callback


Kita berakhir dengan metode callback surfaceDestroyed(). Di sini kami tutup preview kamera dan rilis kamera sumber daya.


Langkah 7: Kustom Kamera View dan Main Activity

Sekarang Anda perlu menambahkan tampilan kustom Anda ke FrameLayout kontrol. Untuk melakukan ini, memperbarui metode onCreate() kelas ArtutActivity, seperti ini:

Hal ini menambah kamera Tinjauan kelas, yang disebut ArDisplayView untuk FrameLayout. Jika Anda menjalankan aplikasi sekarang, activity mulai dan Anda harus melihat preview kamera pada layar.

Catatan: default DDMS layar capture tidak menangkap pratinjau kamera. Menjalankan app untuk melihat fungsionalitas yang benar.


Bagian 3: Bekerja dengan sensor perangkat


Langkah berikutnya dalam pengembangan aplikasi AR melibatkan mengakses data sensor perangkat. Kita juga perlu cara untuk tampilan konten di atas pratinjau kamera. Kita melakukan ini dengan menerapkan kustom view yang dapat berlapis-lapis di atas ArDisplayView yang saat ini ditampilkan dalam pengendalian FrameLayout activity.


Langkah 1: Menampilkan konten Overlay


Pertama, Anda perlu mendefinisikan kustom view kontrol untuk menarik tampilan konten. Membuat sebuah class baru yang disebut OverlayView yang berasal dari kelas View. Kelas ini dimulai sederhana untuk bagian ini. Kami hanya ingin tampilan beberapa data sensor di atas pandangan kamera (belum ada matematika yang wahh). Untuk melakukan ini, kami menciptakan variabel member untuk menyimpan data dikenal sensor terakhir untuk setiap sensor yang kita inginkan. Kami kemudian menerapkan metode onDraw() view kita dan menggambar beberapa teks pada kanvas.

Metode onDraw() yang melakukan semua pekerjaan di sini. Kami mengkonfigurasi Paint dengan atribut teks dan kemudian draw beberapa teks di atas kanvas menggunakan metode drawText().

Mengapa menggunakan tampilan kustom bukan kontrol biasa? Kita akan ingin presisi kemudian untuk menempatkan objek AR dalam view kamera yang berasal dari lokasi tempat-tempat dunia nyata. Alternatif untuk metode ini adalah dengan menggunakan 3D rendering Dapatkan lebih baik menangani kedalaman dan jarak. Di lokasi AR app, itu biasanya kurang penting seperti jarak sering cukup luas (kilometer, bukan meter).


Langkah 2: Menerapkan callback SurfaceHolder


Selanjutnya, Anda akan perlu untuk mengimplementasikan interface SensorEventListener dalam kelas. Memperbarui kelas OverlayView Anda sehingga implmenting interface SensorEventListener, seperti ini:

Ini akan memerlukan overriding dan implementing dua metode baru: onAccuracyChanged() dan onSensorChanged(). Untuk tujuan dari tutorial ini, kami benar-benar hanya tertarik pada metode onSensorChanged().


Langkah 3: Mendaftar pembaruan Data Sensor


Sebelum kita menerapkan callback SensorEventListener, kami ingin mendaftar untuk pembaruan data sesuai sensor. Untuk melakukan ini, memperbarui metode onCreate() kelas OverlayView.

Mulai dengan meminta SensorManager dan mengambil sensor Anda inginkan view untuk di tonton. Dalam kasus ini, kita akan menonton accelerometer, Kompas dan giroskop. Selanjutnya, mendaftar untuk listen event-event pada setiap sensor ini.

Sekarang Anda siap untuk implement callback sensor, onSensorChanged(), untuk menanggapi pembaruan sensor ini.


Langkah 4: Menerapkan onSensorChanged() Callback


Banyak kode menarik untuk update sensor yang terjadi di onSensorChanged() callback. Di sini kita perlu memiliki view yang bereaksi terhadap perubahan sensor. Kami telah terdaftar untuk beberapa jenis perubahan, sehingga metode ini mungkin disebut untuk perubahan sensor. Untuk sekarang, kami hanya ingin menyimpan dari sensor data yang berubah dan kemudian memaksa view untuk memperbarui konten. Kita dapat melakukan ini dengan invalidating view, dan memaksanya untuk menjadi digambar ulang.


Langkah 5: Custom Overlay dan Main Activity


Sekarang Anda perlu menambahkan view kustom ke FrameLayout kontrol. Untuk melakukan ini, memperbarui metode onCreate() kelas ArtutActivity. Tambahkan kode berikut tepat di bawah addView() panggilan yang menambahkan ArDisplayView:

Ini tumpukan dua views: pertama kelas camera view, disebut ArDisplayView, dan kemudian lapisan OverlayView yang menampilkan data sensor di atasnya. Jika Anda menjalankan aplikasi sekarang, activity mulai dan Anda harus melihat preview kamera pada layar dengan sensor data ditampilkan di atasnya (ingat Anda tidak dapat mengambil screenshot dari view kamera, sehingga gambar berikut hanya menunjukkan tampilan konten).



Jika Anda menjalankan app saat ini, Anda mungkin telah memperhatikan bahwa sensor data update sangat cepat, meskipun meminta tingkat cukup lambat untuk bekerja dengan orientasi perubahan. Sensor perangkat ini memiliki tingkat sensitivitas yang sangat tinggi. Pada akhirnya, hal ini akan mengakibatkan kegoyahan di UI. Kita akhirnya akan perlu menerapkan beberapa algoritma smoothing untuk menjaga kegugupan pergi ketika kita mulai menggunakan sensor data dalam aplikasi kami.

Anda mungkin juga bertanya-tanya jika kita akan menggunakan semua sensor ini dan apakah unit mereka. Kita tidak perlu menggunakan semua sensor, tapi kami pikir kami akan menunjukkan kepada Anda terlihat seperti apa, dan bagaimana untuk mengaksesnya, dalam kasus kepentingan AR tertentu dengan sensor yang berbeda.

  • Nomor accelerometer berada dalam unit SI (m/s ^ 2, yaitu meter per detik kuadrat, dimana bumi gravitasi adalah 9,81 m/s ^ 2).
  • Unit sensor magnetik di mikro-Teslas. Ketika mereka datang di x, y dan z bentuk kita dapat mengukur vektor dan bandingkan dengan gravitasi untuk menentukan mana Utara (magnetik) adalah dengan menghormati ke perangkat.
  • Langkah-langkah giroskop rotasi mengelilingi setiap sumbu di radian per detik. Ini dapat digunakan untuk menghitung orientasi perangkat yang relatif.

Kesimpulan

Ini menyimpulkan bagian pertama dari tutorial AR kami. Augmented reality adalah genre yang menarik untuk aplikasi pada Android platform. Android SDK menyediakan segala yang diperlukan untuk mengembangkan aplikasi AR yang menarik, tetapi tidak semua perangkat dapat memenuhi persyaratan perangkat keras yang diminta aplikasi tersebut. Untungnya, generasi terbaru dari perangkat Android adalah yang paling kuat namun, dan banyak dari perangkat Android di luar sana mampu menjalankan aplikasi AR canggih.

Dalam bagian selanjutnya dari seri tutorial ini, kita akan melanjutkan untuk mengumpulkan data lokasi dan menempatkan AR objek pada layar dalam lokasi tertentu. Ini akan melibatkan berbagai algoritma matematika, tetapi hasil akhirnya akan... augmentation!

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.