This work was motivated by two IoT applications. Both use cases highlight the need for a programming abstraction that allows developers to take into account what, where, and when data get collected and analyzed.
Smart City Use Case
The first use case is a smart city application that uses data-driven stream processing to provide navigation services to people with special needs. The application relies on edge resources to analyze video feeds from surveillance cameras in real time and evaluate the density of crowds in different public locations to help autistic individuals select less crowded routes . In the smart city use case, what data need to be processed must be defined, since there are multiple video cameras in different locations, and depending on each person needs and final destination, only one set of camera feeds must be analyzed. There is no need to process all camera feeds all the time, only the video feeds from cameras that the user will encounter on his or her route.
Disaster Recovery Use Case
The goal is to provide emergency services to quickly and efficiently determine whether building conditions are safe for evacuees to return after a natural disaster. The figure depicts the content- driven stages that the disaster recovery workflow presents, and its associated reactions. The first step is to capture real-time LiDAR images of the affected zones using a drone. Then, those images are preprocessed at the edge of the network using the on board computational resources of the drone to analyze the content of the data and determine whether any further post- processing is needed. If further processing is needed, data are sent to the cloud to perform a change detection analysis by comparing it to historical data or for storage purposes.