Projektarbeiten

Aktuell habe ich folgende Ideen für Projektarbeiten. Interessierte Studenten können sich gerne bei mir melden.

Dialogbasiertes Bewerberportal

Der Bewerbungsprozess der Fachhochschule Wedel soll modernisiert werden. Ein Ansatz ist "mobile first". Anstelle einer unübersichtlichen Website soll ein dialogbasiertes Bewerberportal entworfen und umgesetzt werden. Der Bewerbungsprozess wird durch das Senden einer Kurznachricht (Signal, Telegram, WhatsApp,…) gestartet. Ein automatisierter Dialog fragt den Bewerber sequentiell nach allen notwendigen Informationen und Dokumenten ("schicke mir jetzt Photos von deinem Zeugnis"). Die Verarbeitung der Eingaben darf beliebig dumm sein ("Sende 1 für Hauptmenü"), darf aber auch Ansätze der künstlichen Intelligenz für einen natürlicher wirkenden Dialog verwenden.

Editor für Straßendaten

OpenRoadEd hat viele Interessenten auf der ganzen Welt – obwohl es noch nichtmal funktioniert. Jemand sollte sich drum kümmern. Vorkenntnisse in Qt und OSG sind hilfreich, aber nicht MInf oder CGT beschränkt.

Software für Spezialhardware

In der Robotik verwenden wir gerne ArUco Marker. Das Erkennen dieser Marker braucht mehr Rechenleistung als die CPU des Steuerungsrechners. In diesem Projekt sollen die rechenintensiven bildverarbeitenden Schritte mit Hilfe von CUDA auf die GPU ausgelagert werden.

Trotz des Bezugs zur Robotik und Bildverarbeitung ist dies Softwarearbeit mit allgemeinen Herausforderungen. Jeder Inf, TInf, MInf, CGT, STec, ITE ist willkommen.

Click here to see details in English

At the Robotics Lab at the Fachhochschule Wedel, we like to use ArUCO markers. In particular the function cv::aruco::detectMarkers provided by OpenCV. However, on some systems, we experience performance problems. Since the systems we are working on do have powerful GPUs, I would like to use CUDA. There is a project that allegedly implements ArUCO marker detection with CUDA. However, it does not work for the markers we have and the code looks so messy I cannot really read it: https://github.com/nbergst/cuda_aruco

My preliminary research using gporf leads me to believe that I found a repeated call to cv::adaptiveThreshold. This may offer an opportunity for a speed-up, since about a third of the total time is spent there: %32cv::ParallelJob::execute77.17%(0.00%)165×26cv::::ParallelLoopBodyWrapper::operator97.52%(0.00%)626×2->2677.17%433×5std::_Function_handler::_M_invoke84.65%(0.00%)93×26->584.65%93×28TegraCvtColor_gray2rgb_Invoker::operator6.03%(0.00%)391×26->286.03%391×1527std::_Function_handler::_M_invoke6.84%(0.00%)151×26->15276.84%151×3cv::WorkerThread::thread_body77.17%(0.00%)3->277.17%165×4cv::WorkerThread::thread_loop_wrapper77.17%(0.00%)4->377.17%6cv::adaptiveThreshold46.57%(25.86%)81×5->646.57%81×16cv::approxPolyDP7.68%(0.00%)17149×5->167.68%17149×1540cv::findContours30.31%(0.00%)112×5->154030.31%112×10cv::boxFilter20.70%(0.00%)89×6->1020.70%89×32cv::_InputArray::getMat_1.72%(0.86%)150183×16->320.21%18257×23int cv::approxPolyDP_6.90%(6.90%)17130×16->236.90%17130×46cv::Mat::copyTo0.51%(0.00%)19370×16->460.48%18379×7cv::findContours30.31%(0.00%)110×1540->730.31%110×12cv::FilterEngine::apply20.69%(0.00%)77×10->1220.69%77×8cvFindNextContour26.15%(25.86%)115877×7->826.15%115877×7->321.19%103985×34cv::_OutputArray::create1.18%(0.86%)127985×7->340.98%106138×38cvCvtSeqToArray0.86%(0.00%)115926×7->380.86%115674×39cvTreeToNodeSeq0.86%(0.86%)92×7->390.86%92×44cv::Mat::~Mat0.86%(0.86%)347305×7->440.27%109741×40cv::Mat::Mat0.86%(0.86%)159693×32->400.86%159083×37cvStartReadSeq.constprop.280.86%(0.86%)116844×38->370.86%116844×9main22.83%(0.00%)13cv::aruco::detectMarkers15.52%(0.00%)41×9->1315.52%41×18cv::imshow7.31%(0.00%)41×9->187.31%41×14std::_Function_handler::_M_invoke15.30%(0.00%)82×13->1415.30%82×42std::_Function_base::_Base_manager::_M_manager0.86%(0.86%)205×13->420.17%41×17cv::impl::GTKWindow::imshow7.31%(0.00%)41×18->177.31%41×11cv::cpu_baseline::FilterEngine__proceed20.69%(0.00%)107×12->1120.69%107×15cv::cpu_baseline::::ColumnSum::operator7.76%(7.76%)13959×11->157.76%13959×25cv::cpu_baseline::::RowSum::operator6.03%(6.03%)53368×11->256.03%53368×30cv::cpu_baseline::::RowSum::operator3.45%(3.45%)26752×11->303.45%26752×31cv::cpu_baseline::::ColumnSum::operator3.45%(3.45%)6981×11->313.45%6981×14->420.69%164×24cv::parallel_for_27.42%(0.00%)1000×14->2414.61%82×29cv::ThresholdRunner::operator5.17%(5.17%)235×24->295.17%235×35cv::RemapInvoker::operator0.98%(0.00%)292×24->350.98%292×36cv::WarpPerspectiveInvoker::operator0.91%(0.00%)237×24->360.91%237×1531cv::ThreadPool::run20.36%(0.00%)123×24->153120.36%123×46->320.22%19003×46->340.19%20925×19cvImageWidgetSetImage7.31%(0.00%)41×17->197.31%41×21cv::cvtColor7.31%(0.00%)41×19->217.31%41×20cv::cvtColorGray2BGR7.31%(0.00%)41×21->207.31%41×22cv::hal::cvtGraytoBGR7.31%(0.00%)41×20->227.31%41×22->247.31%41×43void cv::remapNearest0.86%(0.86%)170×35->430.86%170×41cv::WarpPerspectiveLine_ProcessNN_CV_SIMD0.86%(0.86%)5060×36->410.86%5060×1531->2620.36%193×27carotene_o4t::gray2rgb6.03%(6.03%)404×28->276.03%404×57cv::aruco::_identifyOneCandidate [clone .constprop.508]6.84%(0.00%)154×1527->576.84%154×33cv::aruco::_extractBits [clone .constprop.509]6.76%(0.86%)105×64cv::threshold5.52%(0.00%)174×33->645.52%76×64->245.50%237×45cv::Mat::create0.86%(0.86%)2356×57->336.76%105×
One of the first things you should do is verify my findings by using gporf yourself. For details, look at the parallel_for-loop in _detectInitialCandidates calling _threshold. cv::findContours looks also pretty costly in terms of run-time, but I have no idea on how to speed that up.

I would like to move the repeated call to cv::adaptiveThreshold into the GPU using CUDA. I have no experience with CUDA and do not know how to use it efficiently in this context. I could imagine that one would upload the input image into the VRAM once, then the GPU runs the loop, creating N images (or one image with N layers, or one image of N-times the size) which are then downloaded back to the RAM. The result must be checked for correctness: The traditional implementation and our CUDA implementation should calculate the same images. The result also must be evaluated using gporf to see whether it actually offers an improvement in terms of speed. The implementation can be done in a relatively non-intrusive manner and may be puglished. If you manage to write code so good that it is accepted into the OpenCV project, I will give you the best possible grade. ;)

So far, the result should help us with all our CUDA-enabled systems. For an additional and optional challenge, we can take a closer look at our Nvidia Jetson TX2 system. It features a powerful GPU and a relatively weak CPU. For this reason, the camera (it is called "argus", but I do not know if the name refers to the camera, the interface or a library) writes images directly into the VRAM. This may offer opportunity for a huge increase in performance since we can bypass the (slow) CPU for everything up to (but excluding) the call to cv::findContours. I did some preliminary research on this topic. Find my test programs attached. Since I do not have any experience with CUDA, the problems I ran into are plentiful. I took code and information from these sources:

https://www.ximea.com/support/wiki/apis/Using_OpenCV_with_CUDA_on_the_Jetson_TX2
https://medium.com/@aleozlx/live-streaming-from-jetson-tx2-with-custom-cuda-filters-part-i-ef06366a92c1
https://forums.developer.nvidia.com/t/gstreamer-nvmm-opencv-gpumat/52575/21
https://forums.developer.nvidia.com/t/nano-not-using-gpu-with-gstreamer-python-slow-fps-dropped-frames/107291/22

Unfortunately, because this is the way Nvidia does things, you must use the dated Ubuntu 18 in this context.

All things considered, this project is best done by someone who knows their way around Linux, C++, CUDA, and gporf. Or is really eager to learn about it.

Konstruktion und Elektrik: Sicherheitseinrichtung KUKA Roboter

Die Sicherheitseinrichtung des KUKA Roboters im Labor für Robotik erfüllt nur die Mindestanforderungen. Eine Erweiterung auf Grundlage der Erfahrungen mit der bestehenden Einrichtung ist erwünscht.

Technische Mediengestaltung: Übersichtsplan

Es existieren verschiedene Übersichts- und Raumpläne der Fachhochschule Wedel. Sie sind je nach Variante aktuell, intuitiv verständlich, leicht lesbar, hilfreich und wiederverwendbar (wähle eins). Es soll ein neuer Übersichtsplan erstellt werden, welcher auch als Basis für einen virtuellen Rundgang oder ein Leitsystem dienen kann. Passende Pläne (Grundrisse) liegen vor. Eine Abstimmung mit den Mitarbeitern der Öffentlichkeitsarbeit, Mediengestaltung, Computergraphik und Web-Anwendungen muss erfolgen.

Medientechnik, Netzwerktechnik und Robotik: Gerät zur virtuellen Anwesenheit

Die FH Wedel besitzt eine Insta 360 Pro, einen Eddie Roboter und diverse VR Brillen. Es sollte möglich sein, einen Live-Stream mit niedriger Latenz von der Panoramakamera direkt an die VR Brille zu senden. Das Anpassen der Blickrichtung geschieht also beim Empfänger. Über ein beliebiges Eingabegerät (VR Controller, Gamepad, Gesten) kann der Roboter bewegt werden.

Es ist unklar, ob die Panoramakamera sich zur Kooperation überreden lässt. Dieser Teil des Projektes hat daher zunächst den Charakter einer Machbarkeitsstudie. 

Für Gruppen sind Zusatzfunktionen wie beispielsweise das bidirektionale Übertragen von Ton oder ein automatisches Ausrichten des Roboters (Fahrtrichtung in Sichtrichtung) denkbar.

Click here to see details in English

For this project, we need a team that brings combined knowledge of a wide range of fields:

The currently existing proof of concept implementation supports moving the robot with the game-pad. Making this work remotely with a simple UDP server/client approach (gamepad on one PC, the robot's high-level system being the other PC) is too easy for a 5 ECTS project. Creation of a package for ROS 2 "humble" using ROS's built-in communication features with clean code a nice documentation which can then be used for future projects would be okay. I would like to see some measurements illustrating the delay between the remote input and actual movement.

Robotik und wissenschaftliches Arbeiten

Im Wintersemester 2020 wurde ein virtuelles Modell des BFFT/digitalwerk ADAS Audi Modellfahrzeugs erstellt. Sie Genauigkeit der Simulation soll erhöht werden. Dazu sind umfangreiche Messreihen am Realweltfahrzeug (Beschleunigung, Bremsverhalten, Wendekreis, …) notwendig. Programmiersprache des Simulators gazebo ist C++.

Web-Anwendung und Kryptogaphie: Digitaler Parkausweis

Die FH Wedel bietet für Studentys Parkplätze an. Leider werden diese Parkplätze auch von anderen Personen genutzt. Es soll ein digitaler Parkausweis entwickelt werden. Der Parkausweis soll das eingeschriebene Studenty selbst ausdrucken können. Gleichzeitig soll die Echtheit des Parkausweises öffentlich überprüft werden können.

Idee zur Umsetzung: Ein Server erzeugt nach Login mit studentischen Daten einen QR-Code. Der QR-Code enthält das Nummernschild des zu registrierenden Fahrzeugs sowie die Matrikelnummer des registrierenden Studenty. Die Daten sind geschützt durch eine digitale Signatur mit zeitlich begrenzter Gültigkeit. Den privaten Schlüssel zum Erzeugen der Signatur hat nur der Server.

Eine öffentliche Web-Anwendung kann den QR Code von der intergrierten Kamera eines mobilen Gerätes einlesen mit Hilfe einer JavaScript Implementierung des kryptographischen Verfahrens (RSA bietet sich an) und überprüfen. Jeder kann Falschparker beim Sekretariat melden. Eine Fahrzeugdatenbank muss nicht angelegt werden.

Web-Anwendung: Baukasten für schematische Darstellung von Flechten

In der Biologie kommen häufig schematische Darstellungen für die Struktur von Blüten zum Einsatz. Auch für die optisch etwas weniger ansprechenden Flechten sind solche Piktogramme definiert, wie dieses Beispiel zeigt:

Die Abteilung für Lichenologie der Biologischen Fakultät der Universität Hamburg sucht nach einer Software zur Erstellung solcher Darstellungen.

In diesen modernen Zeiten bietet sich eine Implementierung als Web-Anwendung an. Ein Minimalbeispiel sowie ein Lastenheft zur Zieldefinition einer vollständigen Ausarbeitung existiert bereits. Es gibt zwei unvollständige Implementierungen, auf welchen aufgebaut werden kann.