Guten Tag an alle! Mein Name ist Maxim, ich bin ein führender Entwickler bei Habilect.
Im Leben eines jeden Programmierers kommt ein Moment, in dem Sie mitteilen möchten, wofür 2/3 Ihres Lebens ausgegeben werden - eine Beschreibung der Arbeit und der Projekte :)
Historisch gesehen war das Hauptfeld meiner Tätigkeit die Entwicklung von Systemen, die auf kontaktlosen Sensoren basieren.
Seit fast 7 Jahren wurden viele Optionen ausprobiert - Microsoft Kinect (sowohl die Version für die XBOX 360 als auch Kinect One für Windows), Intel RealSense (beginnend mit der ersten auf dem Markt erhältlichen Version - F200, Fortsetzung des SR300 und derzeit die letzte veröffentlichte - D435), Orbbec (Astra und Persee), Leap Motion (worüber ich hier sogar über die Verarbeitung benutzerdefinierter Gesten geschrieben habe). Natürlich könnte es nicht ohne gewöhnliche Webcams auskommen - Bildanalyse, OpenCV usw.
Interessierte - ich bitte um eine Katze.
Nur für den Fall, ein kurzes Schulungsprogramm zu diesem Thema kontaktloser Sensoren:
Stellen Sie sich eine Situation vor, in der Sie die Aktionen einer bestimmten Person programmgesteuert verfolgen müssen.
Natürlich können Sie eine normale Webcam verwenden, die Sie in jedem Geschäft kaufen können. In diesem Anwendungsfall müssen Sie jedoch die Bilder analysieren. Dies ist ressourcenintensiv und offen gesagt wichtig (das Problem der Speicherzuweisung in demselben OpenCV ist immer noch relevant).
Daher ist es optimaler, Personen nicht als Teil des Kamerabildes zu erkennen, sondern als „Skelett“, das von einem speziellen Sensor unter Verwendung aktiver Entfernungsmesser erhalten wird. Auf diese Weise können Sie eine Person (oder mehrere Personen) verfolgen und mit einzelnen Teilen des "Skeletts" arbeiten.
In der Microsoft Kinect SDK-Terminologie werden diese Einzelteile als "Gelenke" bezeichnet. Bei einem Sensor wird dessen Status standardmäßig alle 30 ms aktualisiert.
Jedes Gelenk enthält:
- Daten zur Position des entsprechenden Skelettpunktes im Raum (X-, Y- und Z-Koordinaten) relativ zur optischen Achse des Sensors,
- Zustand der Sichtbarkeit des Punktes (bestimmt, nicht bestimmt, vom Sensor berechnete Position),
- Rotationsquaternion relativ zum vorherigen Punkt
Die Abbildung zeigt Gelenke, die von Kinect v2 am Beispiel von Leonardo Da Vincis Vitruvian Man verarbeitet wurden.
Durch die Arbeit mit einem berührungslosen Sensor erhält der Entwickler die Möglichkeit, die Aktionen einer Person oder einer Gruppe von Personen zu analysieren (mit Kinect ist es beispielsweise möglich, 6 Personen gleichzeitig in einem Frame zu verfolgen). Und was mit dem empfangenen Datenarray zu tun ist, hängt von der jeweiligen Anwendung ab.
Die Anwendungen für solche Sensoren sind endlos. Die Hauptbereiche meiner Arbeit sind Werbung und Medizin.
Beachten Sie die
Werberichtung . Für den Betrieb interaktiver Werbestände werden nun mehrere Grundmodule benötigt, nämlich:
- Werbematerial selbst
- Sammlung von Statistiken darüber, inwieweit die Aufmerksamkeit der Besucher auf die Anzeige einer bestimmten Anzeige gelenkt wird, was für den Werbetreibenden interessant ist
- Möglichkeit der Fernkonfiguration eines Werbestands
- Der attraktive Effekt, der einen interaktiven Stand von herkömmlichen Fernsehgeräten mit Werbung und gedruckten Bannern unterscheidet
Wenn mit den Werbematerialien selbst alles klar ist, werden Sensoren verwendet, um Statistiken zu sammeln. Zum Beispiel interessiert sich jeder Werbetreibende dafür, wie viele Personen auf seine Werbung geachtet haben? Männer, Frauen oder Kinder? Wann hören sie am häufigsten auf? Wie viel Zeit sehen sie sich die Anzeigen an und stehen nicht nur neben dem Stand und graben sich ins Telefon? Mithilfe eines Sensors kann dies verfolgt und ein Bericht in einer für den Werbetreibenden geeigneten Form erstellt werden.
Für die Remote-Konfiguration wird das wahrscheinlich einfachste und offensichtlichste Modell verwendet - Google Kalender. Jeder Kalender ist an einen bestimmten Stand gebunden. In St. Petersburg können Sie Stände überall auf der Welt verwalten.
Und der anziehende Effekt ist die Funktionalität, aufgrund derer der Stand als interaktiv bezeichnet wird. Sie können ein personenbezogenes Spiel mit dem Sponsorenlogo erstellen, einen Begrüßungston erzeugen, wenn eine Person im Sichtfeld des Sensors erscheint, einen QR-Code mit einem Rabattcoupon im Geschäft des Werbetreibenden erstellen, wenn beispielsweise eine Person eine Minute lang stand und eine Werbung sah. Die Optionen sind hauptsächlich durch Fantasie und nicht durch Technologie begrenzt.
Warum Sensoren in der
Medizin einsetzen ? Die Antwort auf diese Frage ist einfach und unkompliziert - die Kosten für Untersuchungen und Rehabilitation werden reduziert, während die Genauigkeit erhalten bleibt.
Eines der bemerkenswerten Beispiele ist die Entwicklung auf dem Gebiet der Stabilometrie - die Wissenschaft von Abweichungen des Schwerpunkts beim Gehen, die die Haltung, die Wirbelsäule und die ordnungsgemäße Muskelfunktion beeinflussen. Sie können spezielle Zentren für spezielle Simulatoren aufsuchen, was ein sehr teures Verfahren ist, das jedoch nicht immer bereitgestellt wird. Sie können einen Sensor und eine Software zu Hause kaufen, eine Verbindung zu einem Fernseher herstellen und Diagnosetests durchführen, deren Ergebnisse automatisch an Ihren Arzt gesendet werden.
Ein weiteres Beispiel ist die Rehabilitation zu Hause. Es ist für niemanden ein Geheimnis, dass es bei der Rehabilitation zwei Hauptprobleme gibt: den teuren Anruf eines Arztes im Haus (was mehrmals pro Woche durchgeführt werden muss) und die Zurückhaltung einer rehabilitierten Person, ähnliche Übungen für lange Zeit durchzuführen. Zu diesem Zweck wurden mehrere grundlegende Postulate des Systems entwickelt, nämlich:
- Fernzusammenstellung von Rehabilitationsprogrammen durch einen Arzt zur Fernüberwachung der Umsetzung. Beispielsweise kann ein Arzt aus St. Petersburg den einem Patienten aus Wladiwostok verschriebenen Übungsverlauf aus der Ferne überwachen und bei Bedarf die Übungen ändern, die Komplexität und Intensität des Unterrichts erhöhen oder verringern, Statistiken in Echtzeit studieren usw.
- Gamified Übungsprozess. Wenn sich moderne Simulatoren hauptsächlich auf die Ausführung grundlegender Bewegungen konzentrieren, um beschädigte Muskeln und Gelenke zu entwickeln, können Sie mit dem interaktiven Rehabilitationssystem buchstäblich und mühelos Übungen ausführen. Zum Beispiel mit Hilfe des bekannten Tetris, der anstelle des Knopfdrucks durch die vom Arzt vorgeschriebenen Bewegungen gesteuert wird (Anheben der linken Hand, Bewegen des rechten Beins, Neigen des Kopfes nach vorne usw.).
- Implementierung von Übungsleistungskriterien. In der Zusammenarbeit mit dem Patienten überwacht der Arzt die Übung mithilfe von Tipps und taktiler Hilfe (z. B. können Sie Ihren Arm nicht am Ellbogen beugen, wenn Sie Ihren Arm wegbewegen - dies wirkt sich auf die Arbeit des Schultergelenks aus). Das interaktive System schätzt die relativen Winkel zwischen den Gelenken und gibt beim Überschreiten des zulässigen Bereichs eine Warnung an den Benutzer aus und berücksichtigt nicht die fehlerhafte Ausführung der Übung.
Mit einem solchen System können Sie sowohl die Zeit (sowohl der Arzt als auch der Patient - um zueinander zu reisen) verkürzen und die Genauigkeit der für den Fortschritt erforderlichen Übungen aufrechterhalten.
Für die Implementierung von Projekten mit dem .NET-Technologie-Stack. Ich arbeite nur unter Windows :). Ja, aus diesem Grund musste ich mehrmals Wrapper für das native SDK schreiben (als anschauliches Beispiel habe ich Adapter für das Intel RealSense SDK erstellt, da es sich zu diesem Zeitpunkt nur um nicht verwalteten Code handelte). Es kostete viel Zeit, Nerven und graues Haar, ermöglichte es jedoch, die Bibliothek mit verschiedenen Projekten zu verbinden, die auf der Windows-Plattform entwickelt wurden.
Es ist erwähnenswert, dass die Hauptsensoren (Kinect und RealSense) für die Entwicklung eine x64-Auflösung benötigen.
Um die Arbeit von Clientanwendungen zu vereinfachen, wurde ein separater Dienst implementiert, der mit einem Sensor arbeitet, Daten in einem für uns geeigneten Format verpackt und Daten mithilfe des TCP-Protokolls an Abonnenten sendet. Auf diese Weise konnten wir übrigens ein System entwickeln, das mit mehreren Sensoren arbeitet und die Erkennungsgenauigkeit erheblich verbessern kann.
Das vereinfachte Diagramm zeigt die Vorteile der Verwendung mehrerer Sensoren zur Verfolgung eines Objekts. Blaue Punkte (Gelenke) werden stabil vom ersten und zweiten Sensor bestimmt, grün - nur vom zweiten. Natürlich wird die entwickelte Lösung unter dem "N-Sensor-Modell" implementiert.
Ein detaillierter Prozess zur Verarbeitung von Daten von mehreren Sensoren ist in der obigen Abbildung dargestellt.Bei fast jeder Entwicklung ist das Interesse eines der Hauptkriterien für einen Künstler. Nachdem ich mehrere Jahre hintereinander dieselbe Art von Webanwendung in ASP.NET und PHP implementiert hatte, wollte ich etwas Neues und mehr, sagen wir, Smart. In der Webentwicklung (mit seltenen Ausnahmen) wurde bereits alles erfunden. Gute Seite, guter Service, gute Datenbank. Bei der Arbeit mit Sensoren ergeben sich immer interessante und kontroverse Aufgaben, zum Beispiel: „Wie würde ich HD-Video vom Sensor über TCP übertragen, damit das System nicht hängen bleibt?“ (Ein Beispiel aus dem Leben, obwohl es vor sehr langer Zeit gemacht wurde). Und es ist schwer vorherzusagen, dass Folgendes erforderlich sein wird, um das System zu verbessern und weiterzuentwickeln. Es ist klar, dass es einen Hauptentwicklungssprint gibt, in dem globale und vorgeplante Verbesserungen beschrieben werden. Aber solche lokalen Unteraufgaben sind eine der interessantesten im Handwerk eines Programmierers.
Ein solcher Job ist definitiv keine Routine. Wenn jemand daran interessiert ist, detaillierter zu lernen, oder wenn jemand wissen möchte, wo er in diesem Bereich anfangen soll, bin ich offen für Kommunikation. Bereit, alle Fragen zu beantworten :) Und möge die Macht mit dir sein!