Algorithmenentwicklung mit MATLAB für 2D und 3D Bildanalyse-Systeme Csaba Beleznai Csaba Beleznai Senior Scientist Video- and Safety Technology Safety & Security Department AIT Austrian Institute of Technology GmbH Vienna, Austria Co-Autoren: Michael Rauter, Christian Zinner, Andreas Zweng, Andreas Zoufal, Julia Simon, Daniel Steininger, Markus Hofstätter und Andreas Kriechbaum Research pages: http://ivs.ait.ac.at
Inhalte Kurze Vorstellung - Austrian Institute of Technology Motivation - Entwicklung komplexer HW/SW Systeme Konzepte - Zusammenspiel von Matlab und C/C++ Matlab C++ und C++ Matlab Anwendungsfall: Personenflusserfassung mittels Bildanalyse Verfolgung mittels Optischem Fluss Warteschlangenanalyse (Länge, Wartezeit) 2D Zusammenfassung 3D
Einleitung Motivation Herausforderungen im Entwicklungsprozess: Komplexität Bildanalyse-Systeme Nichtlinearer Ablauf der Suche nach einer Lösung RESEARCH DEVELOPMENT Alg. A MATLAB C++ Alg. B branch & bound research methodology Alg. C IDEE ANWENDUNG PRODUKT
Einleitung Unser Entwicklungskonzept Fortgeschrittene Methoden Standard Methoden 3D Optical Flow Automatic Calibration Soft Biometrics Person Detection and Tracking Person Detection Advanced Background Model Moving Objects Blob based processing Innovations CPU GPU Embedded Products MATLAB C++ 4
Zusammenspiel von Matlab und C/C++ Unser Entwicklungskonzept Methode, Prototyp mex rechenintensive Methoden Verifikation Produkt MATLAB Matlab engine shared library Portierung Datengenerator C/C++ MATLAB: Breites Spektrum von algorithmischen Bibliotheken, Für Bildanalyse sehr gut geeignet, Visualisierung, Debugging, Kurze Entwicklungszeiten Methode, Prototyp, Demonstrator C/C++ Echtzeitfähigkeit 5
Zusammenspiel von Matlab und C/C++ Beschleunigtes Prototyping / Verifikation MATLAB C/C++ berechnungsintensiver Algorithmus oder Algorithmusteil 1. C/C++ Umsetzung beschleunigen und rückführen über ein mex-interface algorithmische Kette 2. Portierung von Matlab-Algorithmus unter Zuhilfenahme eines mex-interfaces zur Verifikation der Implementierungen
Zusammenspiel von Matlab und C/C++ Schnelle Integration neuer Algorithmen (1) MATLAB C/C++ neue algorithmische Methode Matlab Engine algorithmische Kette
Zusammenspiel von Matlab und C/C++ Schnelle Integration neuer Algorithmen (2) MATLAB C/C++ Eine oder mehrere neue algorithmische Methoden Matlab Compiler Methoden als shared lib algorithmische Kette
Zusammenspiel von Matlab und C/C++ Matlab Engine als Unterstützung für C/C++ Debugging MATLAB C/C++ Matlab Engine Interaktive Matlab Session Abfrage / Visualisierung von Variablen komplexe Variablen algorithmische Kette
Was ist Bildanalyse in unserem Kontext? Bildanalyse im Bereich der digitalen Videoüberwachung Algorithmen: Objektdetektion und Klassifikation Zählen, Dichte, Overcrowding Abgestellte Objekte Eindringlinge Verfolgung Vereinzelte Objekte Flußanalyse Typisches Überwachungsszenario: Erkennung von Aktivitäten Wer Personen, Fahrzeuge, Objekte, Wo befinden sie sich? Nahbereich (Artikulation) Welche Aktivität? Entfernung (Bewegungspfad) Wann passiert es?
Zusammenspiel von Matlab und C/C++ Matlab C++: Matlab-Engine Offizielles Beispiel: engdemo.c MATLAB Funktion Beispiel für eine Berechnung: function [DescrTempl] = ComputeDescr(iminTempl, Params) Eingabe: Bildausschnitt + Parameter Ausgabe: MATLAB arbeitet im Hintergrund als eine mächtige und programmierbare mathematische Algorithmenbibliothek #include "engine.h" // including the Matlab engine Engine *ep; // instancing the Matlab engine //======== 1. Initializing the Matlab engine ============================== if (!(ep = engopen("\0"))) return STATUS_MATLAB_INIT_ERROR; // otherwise return error code Signatur (z.b. Histogramm) engputvariable(ep, "Params", mxparams); engputvariable(ep, "imintempl", mximt); // Place variable Params into the MATLAB workspace // Inserting image data into Matlab // Evaluating the expression in Matlab engevalstring(ep, "DescrTempl = ComputeDescr(iminTempl, Params);"); // Deallocating Matlab-specific C-variables mxdestroyarray(mxparams); mxparams = NULL; mxdestroyarray(mximt); mximt = NULL; // closing the Matlab engine engclose(ep);
Zusammenspiel von Matlab und C/C++ Matlab C++: shared library Shared Library: Funktionssammlung die in einer C/C++ Anwendung während der Laufzeit dynamisch geladen wird. MATLAB code MATLAB compiler shared library Compiler Aufruf: mcc -W lib:matchlib -T link:lib ComputeDescr.m #include "matchlib.h" // Compiled interface of Matlab code //============= 1. MCR and library initialization functions ======== if(!mclinitializeapplication(null, 0) ) { fprintf(stderr, "Could not initialize the application.\n"); exit(1); } if (!matchlibinitialize()) { fprintf(stderr, "Could not initialize the library.\n"); exit(1); } // compiled function call mlfcomputedescr(1, &mxdescrt, mximt, mxparams);// first argument is the number of outputs matchlibterminate(); mclterminateapplication(); // library termination // application-level resource termination
Anwendungsfall Personenflussanalyse in 2D Public dataset: Grand Central Station, NYC: 720x480 pixels, Rechengeschwindigkeit 35 fps (C++)
Anwendungsfall Warteschlangenanalyse: Schätzung der Länge und Wartezeit Was ist die Wartezeit bei einer Warteschlange? Stereokamera Benötigte Zeit für die hinterste Person von A nach B zu gelangen. A B Checkpoint Wartezeit Warum ist diese Problemstellung relevant? Beispiel: Automatische Erfassung von Wartezeiten (App) Kundenzufriedenheit Beispiel: Infrastrukturbetreiber load balancing
Anwendungsfall Analyse von Warteschlangen (Länge, Dynamik) Geradlinig Rechengeschwindigkeit: 6 fps inkl. Stereo-Tiefenberechnung (C++) 15
Anwendungsfall Analyse von Warteschlangen (Länge, Dynamik) Gebogen Rechengeschwindigkeit: 6 fps inkl. Stereo-Tiefenberechnung (C++) 16
Anwendungsfall: Warteschlangenanalyse Visuelle Analyse von Warteschlangen Herausforderndes Problem Wartezeit = Länge Geschwindigkeit 1. Wie verläuft die Warteschlange? 2. Wie groß ist die Fortschrittsgeschwindigkeit? Form Kein vordefinierbarer Verlauf (Situationsabhängig und zeitlich variabel) Bewegung keine reine Translation Propagierendes Stop-and-Go Verhalten Entfernung (Kopplung mit Bewegungspfad) DEFINITION: Zielorientierte Bewegung von Personen mit räumlicher und zeitlicher Kohärenz
Anwendungsfall: Warteschlangenanalyse MATLAB Simulationstool Daten mit großer Variabilität Einige Konfigurationen: Zwei Simulationsbeispiele in Matlab: 18
Anwendungsfall: Warteschlangenanalyse Adaptive Schätzung der räumlichen Konfiguration Geschätzte Warteschlangenkonfiguration (top-view) Detektionsergebnisse Linke Bildhälfte ist aus datenschutzrechtlichen Gründen ausgeblendet
Zusammenfassung MATLAB unterstützt die Entwicklung komplexer Algorithmik Entwicklung von Algorithmen gleicher Komplexität sind in C/C++ mit hohem Aufwand verbunden Ein technisches Problem hat oft mehrere Lösungswege: Schnelle Erprobung mehrerer Alternativen durch Integration in eine bestehende Algorithmenkette. Unerwähnte nützliche Aspekte Befehl pcode Schutz eigener Matlabskripten Versionsverwaltung (Git, SVN) 2014b User Interfaces mit Tab-Panels 2014b MatlabCentral und FileExchange MATLAB C++ 20
Vielen Dank! CSABA BELEZNAI Senior Scientist Digital Safety & Security Department Video- and Security Technology AIT Austrian Institute of Technology GmbH Donau-City-Straße 1 1220 Vienna Austria T +43(0) 664 825 1257 F +43(0) 50550-4170 csaba.beleznai@ait.ac.at http://www.ait.ac.at Research pages: http://ivs.ait.ac.at http://www.d-sens.eu/