Implementing VR feature camera on Android platform
Viljanen, Aleksi (2020)
Viljanen, Aleksi
2020
Tieto- ja sähkötekniikan kandidaattiohjelma - Degree Programme in Computing and Electrical Engineering, BSc (Tech)
Informaatioteknologian ja viestinnän tiedekunta - Faculty of Information Technology and Communication Sciences
This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Hyväksymispäivämäärä
2020-07-24
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:tuni-202006196167
https://urn.fi/URN:NBN:fi:tuni-202006196167
Tiivistelmä
As humans we have used to see the world as it is with an overwhelming number of details. This raises the question, could we live in a world that would only be reflected by lines and very harsh details. Since mobile devices processing power has gone up dramatically as well as camera capabilities, it is possible to demonstrate this effect by using, among other things, Google’s Cardboard software development kit, OpenGL ES application programming interface as well as OpenCV library.
This thesis aims to provide a pipeline for implementing an Android application that provides a feature camera to a VR view. In this particular case, the VR view means a real time camera view drawn on a mobile device screen which is again watched through VR glasses. The program implemented can roughly be divided into four parts which carry out steps in the following order. First of all camera is being initialized after which every image is being processed in own dedicated module. To make processing possible, Android’s generic YUV_420_888 image format must be converted to a matrix format used by OpenCV. After processing, image is rendered for both eyes in the VR view offered by Cardboard SDK. Rendering is done by using the OpenGL interface. The application implemented by this is capable of providing an image at a rate of 30 FPS even though the device used has a great impact on this.
In implementation OpenCV library is being used, but there would have been other alternatives to choose from. By using the BoofCV library initializing camera could have been avoided, but this would have been a tradeoff between ease of implementation and malleability. The most significant factor in choosing OpenCV was the faster implementation of used algorithms between BoofCV and OpenCV. Despite the decisions made, the frame refresh rate is rather slow compared to dedicated VR devices. In addition to that, there is a slight delay between movement and image which might cause nausea and discomfort. This is one of the known problems in VR applications. Based on these experiments we can state that our eyesight is not in vain considered the most important sense of humans. It would be rather difficult to get used to living in a world without details and luckily we do not have to. Ihmisinä olemme tottuneet näkemään maailman sellaisena kuin se on kaikkine yksityiskohtineen. Tämä herättääkin kysymyksen, voisiko ihminen elää maailmassa, jota kuvastaisi pelkät reunat ja karkeat yksityiskohdat. Mobiililaitteiden laskentatehon ja ominaisuuksien lisääntymisen myötä tätä on mahdollista demonstroida VR-näkymässä käyttäen muun muassa Googlen Cardboard ohjelmistokehityspakettia, OpenGL ES ohjelmointirajapintaa ja OpenCV-kirjastoa.
Tässä työssä esitetään toimintoketju VR-näkymän tuottavan piirrekameran toteuttamiseksi Android-alustalla. Tässä tapauksessa VR-kuvalla tarkoitetaan mobiililaitteen näytölle piirtyvää reaaliaikaista kameran kuvaa, jota katsotaan VR-lasien läpi. Ohjelma pystytään jakamaan karkeasti neljään osaan, jotka suorittavat toimintoja seuraavassa järjestyksessä. Aivan ensimmäiseksi kamera alustetaan, jonka jälkeen jokainen kuva prosessoidaan omassa moduulissaan. Prosessoinnin mahdollistamiseksi Androidin geneerinen YUV_420_888 kuvaformaatti muutetaan OpenCV:n käyttämään matriisimuotoon. Prosessoinnin jälkeen kuva renderöidään kullekin silmälle Cardboard SDK:n tarjoamaan VR-näkymään käyttämällä OpenGL:n rajapintaa. Näin toteutettu ohjelma saadaan renderöimään kuvaa noin 30 FPS:n ruudunpäivitysnopeudella joskin mobiililaiteen tehokkuus vaikuttaa tähän huomattavasti.
Toteutuksessa käytetään OpenCV-kirjastoa, mutta muitakin vaihtoehtoja olisi ollut. Esimerkiksi BoofCV-kirjastoa käyttämällä kameran manuaalinen alustaminen olisi voitu jättää tekemättä, mutta toisaalta tämä olisi rajoittanut sovelluksen muokattavuutta. Merkittäväksi tekijäksi valinnassa nousi myös OpenCV-kirjaston suhteessa nopeampi Canny edge -algoritmin toteutus. Tästä huolimatta, vaikka tuotettu kuva on sujuvaa, on ruudunpäivitysnopeus kuitenkin varsin hidas. Tämän lisäksi liikkeen välillä on pieni viive mikä saattaa aiheuttaa pahoinvointia. Tämä on yksi VR-sovellusten tunnetuista ongelmakohdista. Voidaankin todeta ettei näköaistiamme turhaan pidetä ihmisen tärkeimpänä aistina. Olisi varsin vaikeaa totutella elämään ilman yksityiskohtia ja onneksi meidän ei näin tarvitse tehdäkään.
This thesis aims to provide a pipeline for implementing an Android application that provides a feature camera to a VR view. In this particular case, the VR view means a real time camera view drawn on a mobile device screen which is again watched through VR glasses. The program implemented can roughly be divided into four parts which carry out steps in the following order. First of all camera is being initialized after which every image is being processed in own dedicated module. To make processing possible, Android’s generic YUV_420_888 image format must be converted to a matrix format used by OpenCV. After processing, image is rendered for both eyes in the VR view offered by Cardboard SDK. Rendering is done by using the OpenGL interface. The application implemented by this is capable of providing an image at a rate of 30 FPS even though the device used has a great impact on this.
In implementation OpenCV library is being used, but there would have been other alternatives to choose from. By using the BoofCV library initializing camera could have been avoided, but this would have been a tradeoff between ease of implementation and malleability. The most significant factor in choosing OpenCV was the faster implementation of used algorithms between BoofCV and OpenCV. Despite the decisions made, the frame refresh rate is rather slow compared to dedicated VR devices. In addition to that, there is a slight delay between movement and image which might cause nausea and discomfort. This is one of the known problems in VR applications. Based on these experiments we can state that our eyesight is not in vain considered the most important sense of humans. It would be rather difficult to get used to living in a world without details and luckily we do not have to.
Tässä työssä esitetään toimintoketju VR-näkymän tuottavan piirrekameran toteuttamiseksi Android-alustalla. Tässä tapauksessa VR-kuvalla tarkoitetaan mobiililaitteen näytölle piirtyvää reaaliaikaista kameran kuvaa, jota katsotaan VR-lasien läpi. Ohjelma pystytään jakamaan karkeasti neljään osaan, jotka suorittavat toimintoja seuraavassa järjestyksessä. Aivan ensimmäiseksi kamera alustetaan, jonka jälkeen jokainen kuva prosessoidaan omassa moduulissaan. Prosessoinnin mahdollistamiseksi Androidin geneerinen YUV_420_888 kuvaformaatti muutetaan OpenCV:n käyttämään matriisimuotoon. Prosessoinnin jälkeen kuva renderöidään kullekin silmälle Cardboard SDK:n tarjoamaan VR-näkymään käyttämällä OpenGL:n rajapintaa. Näin toteutettu ohjelma saadaan renderöimään kuvaa noin 30 FPS:n ruudunpäivitysnopeudella joskin mobiililaiteen tehokkuus vaikuttaa tähän huomattavasti.
Toteutuksessa käytetään OpenCV-kirjastoa, mutta muitakin vaihtoehtoja olisi ollut. Esimerkiksi BoofCV-kirjastoa käyttämällä kameran manuaalinen alustaminen olisi voitu jättää tekemättä, mutta toisaalta tämä olisi rajoittanut sovelluksen muokattavuutta. Merkittäväksi tekijäksi valinnassa nousi myös OpenCV-kirjaston suhteessa nopeampi Canny edge -algoritmin toteutus. Tästä huolimatta, vaikka tuotettu kuva on sujuvaa, on ruudunpäivitysnopeus kuitenkin varsin hidas. Tämän lisäksi liikkeen välillä on pieni viive mikä saattaa aiheuttaa pahoinvointia. Tämä on yksi VR-sovellusten tunnetuista ongelmakohdista. Voidaankin todeta ettei näköaistiamme turhaan pidetä ihmisen tärkeimpänä aistina. Olisi varsin vaikeaa totutella elämään ilman yksityiskohtia ja onneksi meidän ei näin tarvitse tehdäkään.
Kokoelmat
- Kandidaatintutkielmat [8314]