title: Ανίχνευση κίνησης και αντικειμένων από ροές βίντεο στο περιβάλλον Apache Flink

title: Motion and object detection from streaming video on Apache Flink
Creators: name: Μπανελας Δημητριος
Publisher: name: Technical University of Crete
Year: 2023

description: In this thesis, we present distributed video processing system, built with Apache Flink and Apache Kafka, and deployed on the cloud using the Kubernetes orchestration platform. The system facilitates multiple object tracking and motion pattern extraction from multiple streaming or batch video sources. The goal of implementing this system is to observe whether such a system is feasible on Apache Flink. Additionally, we aim to explore the performance, both in terms of theoretical expectations and practical benchmarks. Our focus will be on assessing the accuracy of the results and evaluating the speed and scalability of the system. Leveraging the distributed stream processing capabilities of Apache Flink and Apache Kafka as an intermediate message broker, this system utilizes a combination of computer vision algorithms, including background subtraction, connected component labeling, and centroid-based tracking. These algorithms are implemented using the dataflow model that Flink provides. Hence, each algorithm is implemented within a Flink operator. In order to achieve the full utilization of the distributed architecture, each frame is split into smaller blocks, which are distributed and processed by a number of different Flink operators. Initially, the blocks are evenly distributed to multiple partitions of an input topic in Kafka. Then equal number of Flink pipelines consume the blocks in parallel. In the first stage, each block undergoes background subtraction and component labeling. This process results in the bounding box and centroid of each object present in the blocks. Then, all the connected components from each frame are grouped, and the eligible components are merged into objects. In the last stage of the pipeline, all objects from each frame are concentrated in an operator responsible for creating the trajectory of each object present in the video. When every frame of the video has been processed, the extracted trajectories are announced to another Kafka topic. The application is deployed as a Flink cluster on top of a Kubernetes one, using the newly established Flink Kubernetes Operator. Experimenting in a 7 machine environment (1 CPU from each machine is allocated to Flink), we observed that the system both scales and outperforms a single machine monolith implementation, while providing accurate motion patterns for each video. In fact, the Flink application, configured with a parallelism setting of 7, attained a speedup of up to 6x in comparison to a single-node monolithic implementation, and up to 4.9x compared to the Flink application with a parallelism setting of 1.
description: Στην παρούσα διπλωματική εργασία, παρουσιάζουμε ένα κατανεμημένο σύστημα για επεξεργασία βίντεο, με τη χρήση του Apache Flink και του Apache Kafka, εγκατεστημένο σε cloud υποδομή, με τη βοήθεια του Kubernetes ως πλατφόρμα ενορχήστρωσης. Το παρόν σύστημα πραγματοποιεί παρακολούθηση πολλαπλών αντικειμένων, καθώς και τη δημιουργία και εξαγωγή των μοτίβων κίνησης τους σε μορφή τροχιών, από πολλαπλές ροές βίντεο. Οι στόχοι αυτής της υλοποίησης είναι να συμπεράνουμε εάν ένα τέτοιο σύστημα είναι εφικτό με τη χρήση του Apache Flink. Ακόμη, στοχεύουμε να εξερευνήσουμε την απόδοση, τόσο σύμφωνα με τις θεωρητικές προσδοκίες όσο και με πρακτικά benchmarks. Η ακρίβεια των αποτελεσμάτων, η ταχύτητα και η δυνατότητα κλιμάκωσης του συστήματος, είναι σημαντικά αποτελέσματα αυτής της εργασίας. Αξιοποιώντας τις δυνατότητες κατανεμημένης επεξεργασίας ροών του Apache Flink, και το Apache Kafka ως μεσάζοντα μηνυμάτων, το σύστημα χρησιμοποιεί ένα συνδυασμό αλγορίθμων μηχανικής όρασης, συμπεριλαμβανομένης της αφαίρεσης φόντου, της αναγνώρισης συνδεδεμένων στοιχείων και της παρακολούθησης με βάση το κέντρο του αντικειμένου. Οι αλγόριθμοι αυτοί υλοποιούνται με βάση το datalflow μοντέλο το οποίο υπαγορεύει το Apache Flink. Αυτό σημαίνει ότι κάθε αλγόριθμός υπάρχει σε έναν τελεστή του Flink, ο οποίος μπορεί να κλιμακωθεί ανεξάρτητα, ανάλογα με το φόρτο του. Με στόχο να αξιοποιηθεί πλήρως η κατανεμημένη αρχιτεκτονική που προτείνουμε, κάθε καρέ χωρίζεται σε μικρότερα κομμάτια, τα οποία μπορούν να διαμοιραστούν και να επεξεργαστούν στους διάφορους τελεστές του Flink. Αρχικά, όλα τα κομμάτια ενός βίντεο διανέμονται ομοιόμορφα στα partitions του Kafka. Στη συνέχεια, όλοι οι κόμβοι του Flink διαβάζουν παράλληλα αυτά τα κομμάτια. Στο πρώτο στάδιο της επεξεργασίας, κάθε κομμάτι υφίσταται αφαίρεση φόντου και αναγνώριση συνδεδεμένων στοιχείων. Αυτή η διαδικασία παράγει το κέντρο και το ορθογώνιο οριοθέτησης του κάθε συνδεδεμένου στοιχείου που υπάρχει σε κάθε κομμάτι. Σε δεύτερο στάδιο, τα συνδεδεμένα στοιχεία από κάθε καρέ συγκεντρώνονται σε έναν τελεστή, ο οποίος συγχωνεύει αυτά τα οποία πληρούν κάποιες προϋποθέσεις συγχώνευσης. Η διαδικασία αυτή παράγει τα αντικείμενα του κάθε καρέ. Τέλος, τα αντικείμενα από όλα τα καρέ συγκεντρώνονται στον τελευταίο τελεστή, ο οποίος σχηματίζει τις τροχιές του κάθε αντικειμένου ανάλογα με τη θέση του κέντρο τους. ΄Οταν όλα τα καρέ του βίντεο έχουν επεξεργαστεί, οι τελικές τροχιές ανακοινώνονται σε άλλο ένα Kafka topic. Η εφαρμογή εγκαταστάθηκε ως ένα Flink cluster πάνω από ένα Kubernetes cluster με τη βοήθεια του Flink Kubernetes Operator. Πραγματοποιώντας πειράματα σε ένα περιβάλλον με 7 μηχανές, παρατηρήσαμε ότι το προτεινόμενο σύστημα και έχει τη δυνατότητα κλιμάκωσης, και ξεπερνά σε απόδοση ένα μονολιθικό σύστημα, ενώ παράγει ακριβείς τροχιές για τα αντικείμενα των βίντεο. Πράγματι, η εφαρμογή στο Flink με παραλληλισμό 7 είναι έως και 6 φορές καλύτερη σε απόδοση σε σχέση με ένα μονολιθικό σύστημα και έως 4.9 φορές πιο αποδοτική από την εφαρμογή στο Flink με παραλληλισμό 1.