## 2 Related Work
### Software Pipeline Frameworks
These frameworks, including Apache Ray [26], Spark [39], Celery [27] and Spotify's Luigi [28], provide many of the concepts we are looking for with regards to the modular design of complex pipelines. However, the intended use-case of these frameworks is different in that it focuses on task scheduling, tracking, dependency resolution, and coordination across a cluster of machines. These lead to additional serialisation and increased latency that are unnecessary on a single local device, causing difficulty in scaling pipelines to fit constrained devices [40]. Ultimately, they were designed for use on the server-side and are much better suited for aggregating the data extracted from sensing platforms, rather than running on them. The most comparable framework for our target use case is Apache Ray. Ray is a universal API for building distributed applications that enable end users to parallelise machine code across multiple CPUs and machines [41]. The foundational library that Ray is built on is Apache Arrow [42], a data management library focused on the fast movement and processing of large amounts of data, which includes their own highly efficient array serialisation formats [43]. Part of Arrow's offering is a shared memory server called Plasma Store [44], which supports memory mapping on Unix-based devices to minimise the overhead of data serialisation in multiprocessing applications. While these tools are very useful for facilitating multi-tasking applications, Ray and other big data libraries were designed to run on larger computing clusters and are too heavy to scale to edge devices. REIP's software framework capitalises on parts of these existing solutions (e.g., the Plasma Store) suitable for efficient sensor development while remaining lightweight and accessible for lower power embedding platforms. Multimedia Frameworks  
Highly popular multimedia libraries designed to handle large streams of video and audio data on a variety of devices are GStreamer [29], NVIDIA DeepStream [30] and FFmpeg [31]. GStreamer is an open-source pipeline/graph-based multimedia framework for complex data workflows, used in a variety of multimedia applications such as video editing, transcoding or streaming media. GStreamer is multi-platform and has been used reliably in pipelines for decades, but it is written in C and requires low-level programming expertise to extend it by implementing custom components outside of the scope of processing video/audio data types. These characteristics make it fall short to be a viable candidate for an easily-extensible and generalizable framework for the development of full application pipelines for sensor networks [45]. Similarly, FFmpeg that was designed for the processing of video and audio files in a CLI (Command Line Interface) does not offer an API for extending it to other modalities. Some of the GStreamer limitations have been partially addressed by NVIDIA DeepStream, a scalable framework for building and deploying AI-powered video analytics on the edge. DeepStream provides ready-to-use AI components, such as object detection on video frames, but it follows GStreamer's API; thus, new components cannot be efficiently implemented in a high level programming language, such as Python, but rather are only used through Python bindings. The framework still presents a steep barrier to entry for beginners and has limited flexibility to extend for applications other than audio-visual. Unlike GStreamer, NVIDIA DeepStream is not cross-platform and is dependent on NVIDIA platforms such as the Jetson family [5].