Let's start by understanding the project's architecture.
The project we'll be building in this chapter is mainly divided into two parts:
- The Jupyter Notebook, which creates the model that performs super-resolution.
- The Flutter app that uses the model, which, after being trained on the Jupyter Notebook, is hosted on a Droplet in DigitalOcean.
From a bird's-eye view, the project can be described with the following diagram:
The low-resolution image is put into the model, which is fetched from the ML Kit instance hosted on Firebase and put into the Flutter app. The output is generated and displayed to the user as a high-resolution image. The model is cached on the device and only updates when the model is updated by the developer, hence allowing for faster predictions by cutting down on network latency.