
Unsere neue Geschichte über Abschlussprojekte von Studenten unserer Studienprojekte ist die letzte in diesem Jahr. Dieses Mal stellen wir Ihnen drei Werke von Studenten des Technoparks, der Technopolis und der Technosphäre vor. Dies sind Abschlussprojekte, die auf den Ergebnissen eines zweijährigen Studiums basieren und von der Jury als beste Arbeit ausgewählt wurden. Wir möchten Sie auch daran erinnern, dass Schulungsprogramme in Technopark, Technopolis und Technosphere ihre eigene Spezialisierung haben und sehr unterschiedlich sind.
Frühere Veröffentlichungen: 1 , 2 , 3 , 4 , 5 .
Dies ist das erste Mal, dass Studenten, die Projekte verteidigt haben, diesen Technologien ausgesetzt sind. Das Projekt dauert ein Semester. Der Artikel soll den Bildungsprozess und die Ergebnisse der Arbeit der Studenten zeigen.
Facepick, Technopolis
Fotosuchdienst nach Gesichtern.
Bei öffentlichen Veranstaltungen - Konferenzen, Feiertagen, Firmenfeiern, Hochzeiten - werden Hunderte, wenn nicht Tausende von Fotos aufgenommen. Und es dauert sehr lange, Bilder zu finden, die Sie und Ihre Freunde oder Verwandten zeigen. Aus diesem Grund hat das Projektteam beschlossen, einen Dienst bereitzustellen, mit dem Fotos mit bestimmten Gesichtern schnell gefunden werden können.
Das System erkennt mithilfe neuronaler Netze zuerst Gesichter in Referenzbildern und gruppiert dann die Basis der Fotografien der gefundenen Personen. Der Dienst kann mit externen Quellen arbeiten: VKontakte, Odnoklassniki, Yandex.Disk und Google Drive.
Das verarbeitete Album besteht aus einer Reihe von Fotopaketen, von denen jedes Fotos einer Person enthält. Auf der Seite des verarbeiteten Albums kann der Benutzer Fotos eines bestimmten Fotopacks anzeigen und auf sein Gerät herunterladen oder mit Freunden teilen. Sie können das verarbeitete Album durchsuchen, indem Sie ein Foto einer Person hochladen.
Der Service ist eine Client-Server-Anwendung mit REST-API. Der Serverteil besteht aus zwei Hauptkomponenten: Java-Anwendung, die die Logik der Benutzerinteraktion mit dem Dienst implementiert; und Python-Anwendungen zum Identifizieren von Gesichtern in Fotos und Extrahieren ihrer einzigartigen Merkmale unter Verwendung eines neuronalen Netzwerks.
Die Autoren konzentrierten sich auf die Skalierbarkeit. Daher verwendeten sie einen Load Balancer, um die Last im Backend auszugleichen. Mithilfe der Redis-Nachrichtenwarteschlange für die Interaktion zwischen Java- und Python-Anwendungen können Sie die Anzahl der Instanzen dieser Komponenten unabhängig ändern.
Alle Dienste werden in separaten Docker-Containern bereitgestellt, und Docker-Compose wird verwendet, um sie zu orchestrieren. Um die Client-Seite der Anwendung zu implementieren, haben wir TypeScript und React verwendet. Die PostgreSQL-Datenbank wird als persistenter Datenspeicher verwendet.
In Zukunft möchten Absolventen die Erkennungsgenauigkeit verbessern, Filter nach Geschlecht und Alter hinzufügen und Facebook und Google Fotos unterstützen. Es gibt auch Ideen zur Monetarisierung des Dienstes durch Einschränkung der kostenlosen Funktionalität und Einführung von Werbung.
Projektteam: Vadim Dyachkov, Egor Shakhmin, Nikolay Rubtsov.
Video mit Projektschutz .
Spielmacher, Technopark
Hard- und Software - Lösung für die Ausbildung Protokollierung Sport.
So kam es, dass alle Mitglieder des Projektteams gerne Sport treiben. Als die Schüler ins Fitnessstudio kamen und beobachteten, wie die Leute ihre Trainingseinheiten und Fortschritte protokollierten, fragten sie sich: Kann dieser Prozess verbessert werden? Nach Recherchen und Umfragen stellte das Team fest, dass vorhandene Trainings-Apps eine zu komplexe Benutzeroberfläche haben und Wearables auf dem Markt hauptsächlich für Cardio-Workouts (Laufen, Ellipse usw.) gut funktionieren. Infolgedessen formulierten sie ihr Arbeitsschema:

Das Gerät wurde unabhängig hergestellt, da sich die Integration in vorhandene Lösungen (z. B. MiBand) als sehr zeitaufwändig herausstellte und die Entwickler bei Uhren und Armbändern mit der Platzierung am Handgelenk nicht zufrieden waren. Dies ergab weniger Informationen über die Bewegungsmuster.
Wir haben das ESP32-WROOM-Modul als Teil des ESP32-devkit-v1 ausgewählt. Es erfüllte bestimmte Anforderungen, Dienstprogramme zum Generieren von Code und Firmware in Python wurden dafür geschrieben, und außerdem kann es wie jedes Arduino-Board über die Arduino IDE programmiert werden. Das Amperka IMU-Modul wurde für die Rolle von Sensoren ausgewählt, zu denen ein Beschleunigungsmesser und ein Gyroskop gehören. Die gesamte Kommunikation mit Sensoren erfolgt über das I2C-Protokoll.
Prototypendiagramm:


Für die nächste Version des Geräts wurden in China Kartendruck und Komponentenlöten bestellt.


Als nächstes musste das neuronale Netzwerk trainiert werden, um verschiedene Übungen zu erkennen. Es gibt jedoch nicht so viele offene Datensätze, die Zeitreihen vom Beschleunigungsmesser und Gyroskop während körperlicher Aktivität enthalten würden. Und die meisten von ihnen decken nur Laufen, Gehen usw. ab. Aus diesem Grund haben wir uns entschlossen, selbst ein Trainingsset zu erstellen. Wir haben drei Grundübungen ausgewählt, für die keine spezielle Ausrüstung erforderlich war: Liegestütze, Kniebeugen und Drehungen.
Beschleunigungsmesserdaten nach dem Filtern.


Gyroskopdaten nach dem Filtern.
Ein wiederkehrendes neuronales Netzwerk mit LSTM-Architektur ist für die Klassifizierung von Übungen verantwortlich. Zur Vereinfachung der Visualisierung der Zeitreihen wurde die Hauptkomponentenanalyse (PCA) verwendet.

Das Ergebnis des neuronalen Netzwerks (orange Linie - die Wahrscheinlichkeit von Liegestützen, grün - Kniebeugen).
Um die Anzahl der Wiederholungen zu zählen, wurde das Verfahren zum Zählen lokaler Maxima unter Berücksichtigung des Basissignalpegels verwendet. Nachdem wir zufriedenstellende Ergebnisse erzielt hatten, nahmen wir die mobile Anwendung auf. Eine der Bedingungen war die Entwicklung einer solchen Schnittstelle, die eine minimale Interaktion mit einem Smartphone erfordern würde. Wir haben MVP als Designmuster gewählt.
Anwendungsschnittstelle:



Zusätzlich zur Client-Anwendung entwickelten die Autoren das Batcher-Dienstprogramm, mit dem Daten für das Training eines neuronalen Netzwerks aufgezeichnet und markiert werden konnten:

Darüber hinaus haben die Autoren einen Mechanismus zum Validieren von Stapeln geschrieben, nachdem diese in der Datenbank gespeichert wurden.
Zum Speichern von Zeitreihen wurde die InfluxDB-Datenbank ausgewählt, die für solche Aufgaben angepasst ist. Um einen maschinellen Lerndienst zu implementieren, haben wir einen Standardstapel von Python, Django und Celery ausgewählt. In der Task-Warteschlange konnte die Klassifizierungsaufgabe asynchron ausgeführt werden, ohne die Hauptanwendungsschnittstelle zu blockieren.
Um Benutzerdaten zu speichern, verwendeten sie Postgres, das Backend der Anwendung selbst wurde in Go mithilfe des Gin-Frameworks implementiert.

Allgemeine Architektur.
Infolgedessen hat das Team seine Ziele erreicht und eine MVP-Version des Produkts entwickelt, mit der Sie die Aufgabe des Protokollierens von Schulungen mit einer einzigen Schaltfläche lösen können. Jetzt arbeiten die Schüler daran, die Kosten und die Größe des Geräts zu reduzieren, die Genauigkeit des neuronalen Netzwerks zu verbessern und die unterstützten Übungen zu erweitern.
Projektteam: Oleg Soloviev, Temirlan Rakhimgaliev, Vladimir Elfimov, Anton Martynov.
Video mit Projektschutz .
GestureApp, Technosphäre
Ein Framework für eine kontaktlose Schnittstelle.
Manchmal wird es unpraktisch oder unerwünscht, vertraute taktile Schnittstellen zu verwenden. Zum Beispiel, wenn Sie ein Auto fahren, einen Geldautomaten oder ein Zahlungsterminal benutzen oder wenn Ihre Hände einfach schmutzig sind. Um dieses Problem zu lösen, haben die Autoren ein kontaktloses Schnittstellen-Framework erstellt, mit dem Gesten die Anwendung steuern können.
Zum Arbeiten benötigt GestureApp eine Videokamera, deren Signal in Echtzeit verarbeitet wird, um die Gesten des Benutzers zu erkennen. Abhängig von den Gesten gibt das Framework der Anwendung die entsprechenden Befehle.

Die Rechenlast ist relativ gering, das Framework kann auf eher schwachen Geräten arbeiten und erfordert keine spezielle Ausrüstung.
Gesten werden vom neuronalen Netzwerk MobileNet3D erkannt. Das neuronale Netzwerk gibt die Wahrscheinlichkeiten von Klassen von Gesten sowie eine spezielle Klasse "keine Geste" an. Diese Architektur ermöglicht die Erkennung sowohl statischer als auch dynamischer Gesten. Das neuronale Netzwerk wurde auf dem Jester-Datensatz trainiert. Die Genauigkeit der Vorhersage von F 1 = 0,92 wurde erreicht .
Der Aufnahmestream empfängt Bilder von der Frontkamera und platziert sie am Ende der Liste. Wenn seine Länge mehr als 32 beträgt, aktiviert der Capture-Thread den Modellausführungsthread. Es dauert 32 Frames vom Anfang der Liste, sagt die Klassen voraus und entfernt dann Elemente vom Ende, bis ein Element übrig bleibt. Dadurch entfällt die Notwendigkeit einer starken Synchronisierung und die Leistung wird erheblich verbessert: 20 FPS auf dem iPhone 11, 18 FPS auf dem iPhone XS Max, 15 FPS auf dem iPhone XR. Mit einer intelligenten Pipeline für die Vor- und Nachbearbeitung wird der Energieverbrauch auf ein Minimum reduziert.
Bisher funktioniert das Framework nur für iOS und Windows. Die Entwicklung verwendete das PyTorch-Framework, die TwentyBN-Plattform und die Swift-Sprache.
Die Pläne umfassen: Verbesserung der Erkennungsqualität, Hinzufügen der Erkennung neuer Gesten ohne Umschulung aller Modelle, Erstellen einer Version für Android, Hinzufügen nicht nur Schaltflächengesten, sondern auch Schiebereglergesten.
Projektteam: Maxim Matjuschin, Boris Konstantinowski, Miroslaw Morosow.
Video mit Projektschutz .
Weitere Informationen zu unseren Bildungsprojekten finden Sie unter diesem Link . Und öfter gehen Sie zum Technostream- Kanal , dort erscheinen regelmäßig neue Trainingsvideos über Programmierung, Entwicklung und andere Disziplinen.