title: Real-time video processing in Apache Flink and the Cloud
title: Επεξεργασία βίντεο σε πραγματικό χρόνο σε περιβάλλον Apache FLINK στο Υπολογιστικό Νέφος
Creators: name: Καστρινακης Δημητριος
Publisher: name: Technical University of Crete
Year: 2022

description: In this work, we present a distributed stream-processing system built with Apache Flink on top of Kubernetes, fueled by the high-speed streaming platform Apache Kafka. Our system’s function will be processing high-resolution raw videos in order to detect camera shot changes. This work has two mains goals. Firstly, we want to make this system highly scalable, and able to efficiently utilize multiple processing nodes. Secondly, we want our system to be able to process a high input throughput of videos in as close to real-time as possible. Flink works by applying a series of operators in a pipeline to transform a video stream into meaningful data (i.e., shots in our case). These operators can be easily duplicated. This allows them to work in parallel by being distributed inside Flink-managed nodes. To allow fully distributed and scalable processing of video files, we suggest partitioning each video frame into smaller blocks. These can then be separately processed by all the distributed operators in parallel. The blocks of each frame are first evenly distributed to multiple Kafka topic partitions. Then, all Flink nodes read in parallel from those partitions. For the purposes of shot change detection, the histogram of the intensity of each separate block is calculated by an operator. Then, a second operator assembles all the histograms of a frame’s blocks into that same frame’s full histogram. In the next step, a third operator receives the full histograms of adjacent frames and calculates their differences. A final operator receives these histogram differences as a stream. If a difference exceeds a predefined threshold, then a camera cut shot change is announced. Otherwise, the operator looks for gradient fades among multiple sequential frames. We deployed our Flink application on a Flink cluster on top of a Kubernetes cluster. Up to 8 Flink nodes were used on the Google Cloud Platform, using Flink’s Native Kubernetes support. To determine the scalability of our system, we compare its performance against a non-distributed system. The experiments produced excellent speed-up results. An important improvement was detected in all tested video resolutions. The highest speedup however was observed in experiments with the videos of the highest resolutions. Up to 7 times better performance was reached compared to the non-distributed system.
description: Σε αυτό το έργο παρουσιάζουμε ένα κατανεμημένο σύστημα επεξεργασίας ροής μέσω Apache Flink πάνω στο Kubernetes, που τροφοδοτείται από την πλατφόρμα ροής υψηλής ταχύτητας Apache Kafka. Η λειτουργία του συστήματός μας θα επεξεργάζεται ακατέργαστα βίντεο υψηλής ανάλυσης για τον εντοπισμό αλλαγών στη λήψη κάμερας. Ένας από τους κύριους στόχους αυτής της εργασίας είναι να καταστήσει αυτό το σύστημα εξαιρετικά επεκτάσιμο και ικανό να επεξεργαστεί μεγάλη ροή εισόδου βίντεο σε όσο το δυνατόν πιο κοντά στον πραγματικό χρόνο. Το Flink χρησιμοποιεί μια σειρά τελεστών για να μετατρέψει μια ροή βίντεο σε ουσιαστικά δεδομένα (δηλαδή, στην περίπτωσή μας διαφορετικές λήψης κάμερας). Αυτοί οι τελεστές μπορούν εύκολα να αντιγραφούν, δηλαδή να εργαστούν παράλληλα και να διανεμηθούν μεταξύ πολλαπλών κόμβων που διαχειρίζεται το Flink. Προκειμένου να καταστεί δυνατή η πλήρως κατανεμημένη και κλιμακούμενη επεξεργασία αρχείων βίντεο, προτείνουμε τη διαίρεση κάθε καρέ ενός βίντεο σε μικρότερα σύνολα ή ομάδες (blocks), τα οποία στη συνέχεια μπορούν να υποβληθούν σε χωριστή επεξεργασία από διάφορους κατανεμημένους τελεστές. Όλα τα blocks των καρέ ενός βίντεο διανέμονται πρώτα ομοιόμορφα σε topic partitions του Kafka. Στη συνέχεια, όλοι οι Flink κόμβοι διαβάζουν παράλληλα τα partitions. Για να μπορέσει να ανιχνευθεί αλλαγή λήψης μεταξύ καρέ, υπολογίζεται πρώτα το ιστόγραμμα έντασης του κάθε block από έναν τελεστή. Στην συνέχεια, μαζεύονται σε επόμενο τελεστή όλα τα blocks ενός καρέ και υπολογίζεται το συνολικό ιστόγραμμα έντασης του καρέ αυτού. Ένας τρίτος τελεστής έπειτα, υπολογίζει τις διαφορές των ιστογραμμάτων μεταξύ των διαφορετικών καρέ του βίντεο και εξάγει στη συνέχεια μια συνεχόμενη ροή διαφορών ιστογραμμάτων. Ένας τέταρτος τελεστής χρησιμοποιεί την ροή αυτήν και εάν εντοπίσει μια διαφορά που υπερβαίνει ένα προκαθορισμένο όριο, ανακοινώνεται μια αλλαγή λήψης κάμερας. Διαφορετικά, ο τελεστής αναζητά αλλαγές σκηνών “fade” μεταξύ πολλαπλών συνεχόμενων καρέ. Αναπτύξαμε την Flink εφαρμογή μας σε ένα Flink cluster το οποίο με την σειρά του ήταν πάνω σε ένα Kubernetes cluster. Χρησιμοποιήθηκαν έως και 8 Flink κόμβοι, μέσω της πλατφόρμας Google Cloud και χρησιμοποιώντας την εγγενή υποστήριξη του Flink για Kubernetes clusters. Για να καθορίσουμε την επεκτασιμότητα του συστήματός μας, συγκρίνουμε την απόδοσή του με ένα μη κατανεμημένο σύστημα. Τα πειράματα παρήγαγαν εξαιρετικά αποτελέσματα επιτάχυνσης. Σημαντική βελτίωση εντοπίστηκε σε όλες τις δοκιμασμένες αναλύσεις βίντεο. Ωστόσο, παρατηρήθηκε μεγαλύτερη επιτάχυνση σε πειράματα με βίντεο υψηλότερων αναλύσεων. Επιτεύχθηκε έως και 7 φορές καλύτερη απόδοση σε σύγκριση με το μη κατανεμημένο σύστημα.