For ExoGame, we are tasked to host ExoGame API in the Cloud. It has to be scalable and have a consistent architecture that take advantage of the cloud elements.
We have chosen Amazon AWS to host our API and the framework we chose for the backend is Django, written in Python, because of the following:
Amazon AWS:
-
Cross-platform: First of all, AWS is transportable across platforms. It provides virtual environments that could be tinkered with, failure of which causes minor to no damage to the service, as setting up an another instance is a quick and easy process.
-
Built-in monitoring services: Second of all, AWS has built in load-balancing and other monitoring services, which notify the developers in extreme circumstances such as memory exhaustion and CPU overuse. This helps us to keep the server running in a consistent manner, resulting in a stable service.
-
Built-in management systems: Last of all, AWS has built in management systems, which allows easy access to the configurations of the server. It also helps to create images of the virtual environments, creating backups and restoring them, if required. Also, scaling the services as the service grows and exporting the server to different instances is painless.
Django:
-
Django is non-blocking: Through handling requests in non-blocking manner(concurrent), the server is able to respond to other requests while handling longer requests such as database queries. Therefore, the server is able to handle more requests at once, and be more responsive compared to blocking servers.
-
Built-in ORM(Object-Relational Mapping): Which has multiple benefits in the platform. First of all, it helps to form Object-Oriented Databases using modelling of the fields. Second of all, access to database becomes really fast. As an instance, selecting a single row from 4 million records will consume about ~20 sec in normal select query. However, using Django ORM, it often takes only about 0.5 sec. Last of all, it provides easy access to managers of the objects, which manages the read / write operations of the database.
-
Familiarity: The third reason for choosing Django as our backend platform is the familiarity that the developers in the team has with the platform. As one of us have high familiarity with the platform, implementation of the framework and functions were quick. This saved us time to do more testings and focus more on the research part, rather than the implementation.
In order to utilise the ExoGame API to the fullest, we have been tasked to create an augmented reality game for iOS.
The game which we will refer to as PoC would be a geo-cache game, using the advertisement screens in London (a set of them). In order to achieve those features, we've chosen the following:
- iOS: Due to the well known fact that iOS is much more stable than Android, this decision would reduce the time of testing and fixing bugs on different versions. This platform was also suggested to us by our client initially. Additionally our team has got experience in Objective-C and Swift programming which will be useful to get us started quickly.
- OpenCV: For image processing, OpenCV is the most popular because it is open source, fast, efficient and comes with many useful algorithms that will be beneficial for ExoGame. We can take advantage of OpenCV with C/C++ and Python in order to test and improve algorithms on our computers, it is suitable for mobile platform like iOS, which uses Objective-C. Additionally, OpenCV was the suggested solution by our teaching assistant. However after a few months of trial, we’ve determined that OpenCV, while it is a very robust computer vision library, it over complicates the development of the PoC which will cost us a lot of time without being able to fully integrate and use the ExoGame API which is the main goal of the project. However, reading about OpenCV helped us learn about the foundation of image processing and augmented reality.
- Tesseract OCR: Tesseract is a well known OCR Engine built on top of OpenCV. It is one of the very few iOS-compatible library available for free uses and incorporable with the native iOS AVFoundation library. Also, it has optimization parameters, which helps to accelerate the OCR process.
- Vuforia: Vuforia is a software platform for creating Augmented Reality applications. Developers can easily add advanced computer vision functionality to any application, allowing it to recognize images and objects, or reconstruct environments in the real world. Vuforia features:
· Image Targets
· VuMark
· Multi-Targets
· Text Recognition
· Cloud Recognition
· Cylinder Targets
· Frame markers
· Smart Terrain
Vuforia supports native Windows, macOS, iOS and Android. It enables easier and more flexible development using Unity3D, a popular game engine. All of which will allow us to make a PoC with amazing features.
Therefore we have decided to use Vuforia along with Unity 3D for building the PoC.
- Apple MapKit: We have decided to use the Apple MapKit for the development of PoC. Apple's counterpart to Google Maps API has a much better integration with iOS with CoreLocation and CoreAnimation. The "Follow user location" mode is missing in Google Maps, the ability to add advance animations to annotations is also not one of the features of Google Maps SDK.