Am Puls von Microsoft

Projekt: Wir bauen eine dem Gesicht folgende Kamera mit Windows 10 IoT

Projekt: Wir bauen eine dem Gesicht folgende Kamera mit Windows 10 IoT

Ein Gastbeitrag von Tobias Scholze.

Nachdem mir in Skype-Videocalls immer wieder sich mit der Zeit von der Kamera wegbewegende Menschen begegnet sind, stellte sich die Frage: Wie könnte man denn eine Gesichts-verfolgende Kamera auf Basis von zu Hause mehr oder weniger herumliegenden Materialen basteln?

Was dabei heraus kam, war ein Proof-of-Concept, wie man mit Windows 10 IoT Core einen mittels Servomotoren betriebenen Kameraarm ansteuern kann, sodass ein von der angeschlossenen Kamera erkanntes Gesicht in der Mitte des Bildes ist. Wie gesagt keine produktive Lösung, sondern ein Lernprojekt, an dem ich euch gerne teilhaben lassen möchte. Den Quellcode dazu gibt es natürlich auch, siehe dazu am Ende des Artikels.

Motivation

Nachdem das letztmalige Projekt auf Dr. Windows zur Visualisierung des Raumklimas mit Microsofts Graph API und einem Pimoroni Enviro pHAT mehr um ein Software Projekt ging, sollte diesmal mehr anfassbare Hardware involviert sein. Da kam mir ein mittels Servomotoren angetriebener Arm für den Raspberry Pi gerade recht.

Dabei entstand das Projekt als auch die UWP-App HomeBear.Tilt. Eine prototypische Spielwiese von verschiedenen Eingabemethoden als auch Bildverarbeitung für Windows 10 IoT Core.

Benötigte Komponenten

Für den exakt gleichen Versuchsaufbau werden neben einem Raspberry Pi 3B auch ein (Touch-) Bildschirm, ein Pimoroni Pan-Tilt HAT auf Basis eines PIC16F1503 8-Bit Mikrocontrollers und zweier Servomotoren, eine kompatible Kamera als auch ein kabelgebundener Xbox 360 Controller benötigt.

Pan Tilt Hat

PIC16F1503 8-Bit Mikrocontroller

Hierzu ist zu beachten, dass die Oberfläche der UWP-App, welche auf dem Windows 10 IoT Core ausgeführt wird, exakt auf den offiziellen, berührungsempfinden Bildschirm des Raspberry Pis ausgerichtet ist. Die Verwendung eines via HDMI verbundenen externen Monitors mit Mauseingabe ist dennoch möglich.

Weiter ist es hilfreich, etwas relativ Schweres auf die Platte des Arms zu legen, um diesen, welcher sonst am HAT festgeschraubt ist, bei Bewegungen sicher auf dem Tisch zu halten.

Das Dashboard von Windows 10 IoT Core zeigt an, ob alle Geräte erfolgreich angeschlossen und vom System erkannt wurden.

Windows 10 IoT Core

Softwareseitig reicht ein Windows 10 auf dem Desktop mit installieren Visual Studio 2019 in der kostenfreien Community Edition.

Vor dem Spaß kommt die (Hardware-) Arbeit

Windows 10 IoT Core unterstützt nicht den offiziellen, jedoch proprietären Flachband Kameraanschluss des Raspberry Pi. Da in der Liste der unterstützen Webcams von Microsoft nur Schwergewichte zu finden sind, musste eine Logitech CS 270 HD Kamera auseinandergenommen werden. Dieser Prozess macht zwar Spaß, ist jedoch in den meisten Fällen nicht reversibel. Bei einem Preis von unter dreißig Euro dürfte dies jedoch verschmerzbar sein.

Logitech CS 270 HD

Logitech CS 270 HD

 

Als Werkzeug ist eine Zange zur Entfernung der Zugentlastung (Crimp-Zange) als auch eine kleine Säge oder Schere für dickeres Plastik zu empfehlen. Somit lässt sich das Kabel als auch das Kamerainnenleben an sich vom nicht benötigten und für die Servomotoren zu schwerem Gehäuse befreien.

Gesichtserkennung auf dem Raspberry Pi

Die Möglichkeiten zur Entwicklung von Apps für ein Windows 10 IoT Core Device beziehen viele Funktionalitäten des UWP-Ökosystems von Microsoft mit ein.

Das von Haus aus mit ausgelieferte Windows.Media.Core, welches eine Sammlung von Kernschnittstellen rund um die Verarbeitung von Medieninformationen beinhaltet, ermöglicht die Erkennung von Gesichtern in Bewegtbildern auf dem Gerät zu realisieren. Die Schnittstelle liefert Koordinaten zurück, wo sich dieses Gesicht im Bildstream befindet. Mit etwas Datentransformation lassen sich diese gewonnen Informationen für die anders dimensionierte Vorschau als auch zur Steuerung des Arms verwenden, um das Gesicht wieder in die Mitte des Bildes zu bekommen. Dies ist bei der Benutzung der Kamera auf die x-Achse beschränkt.

Pimoroni Pan Tilt

Als kleine Funktionalität nebenbei lassen sich vom Kamerabild, welches benutzt wird, um Gesichter zu erkennen, Schnappschüsse speichern. Windows-typisch werden diese im „Bilder“-Order des Systems gespeichert. Dieser kann mittels des Device Portals, welches auf dem Pi automatisch mitläuft, heruntergeladen werden. Die Auflösung entspricht dabei der des Low-Latency-Streams der Kamera und nicht der Vorschau mit 640 auf 480 Bildpunkten.

File Explorer

Gamepad Unterstützung

Die Unterstützung von Gamepads ist auch wie die Gesichtserkennung bereits Bestandteil von mitgelieferten APIs (Windows.Gaming.Input) des UWP-Ökosystems.

Diese werden, falls erkannt, als Eingabegeräte ähnlich zu Tastaturen erkannt. Nur dass eben die App nicht das Ereignis „User hat Taste “B“ gedrückt erhält, sondern „User hat den linken Joystick des Gamepads nach oben verschoben“ empfängt.

Laut Berichten auf Stackoverflow soll Windows 10 IoT Core den kabelgebundenen als auch den kabellosen XBox 360 Controller unterstützen.

Bei meinen Versuchen verlor der zum kabellosen Controller gehörige Receiver bei Last auf anderen USB-Kanälen oft die Verbindung zu System und Gamepad. Somit konnte ich diesen nicht nutzen. Weitere Tests mit preisgünstigen und kabelgebundenen Klonen verliefen problemfrei.

Servolein dreh dich!

Nach dem die Richtungsinformationen entweder von Berührungen des Bildschirms, Gesichtserkennung oder Gamepad vorliegen, muss sich die Kamera drehen und manchmal auch neigen. Dies geschieht über die Ansteuerung zweier Servomotoren, welche jeweils die x-, oder y-Achse des Kameraarms verändern können.

Dies geschieht über die Ansteuerung des auf dem Pimoroni Pan-Tilt HAT vorhandenen PIC16F1503 mittels des I2C-Buses (Wiki). Hierbei werden von Grad in Impuls(zeit) umgerechnete Werte über eine Bitfolge bestehend aus Befehls- und Wertemaske an das entsprechende I2C-Register geschickt, welche im Falle eines Erfolges eine Bewegung des Arms zur Folge hat.

I2C

Dabei ist darauf zu achten, dass Arm (Grad) und Servos (Intervallzeiten) nur in den zugelassenen Maximal- als auch Minimalwerten angesteuert werden.

Wieder etwas gelernt

Als reiner Software-Mensch ist es ein großartiges Gefühl, etwas Greifbares drehen zu sehen. Das hierbei ganz andere Gefahren lauern, zeigte ein überbelasteter Servo, wo eine „Stopp“-Programmroutine nicht gegriffen hat und somit falsche Impulse an den Mikrocontroller geschickt wurden.

Das Projekte zeigte mir auch auf, wie weit mittlerweile die Plattform Windows 10 und das dazugehörige Ökosystem gediehen ist. Wie unkompliziert sich eine funktionierende Gesichtserfassung in die eigenen Apps integrieren lässt und wie schnell Gamepads unterstützt werden können, hat mich sehr stark beeindruckt.

Hinzu kommt, dass durch die Implementierung der Gamepad-Unterstützung klar wurde, dass sich Windows 10 (IoT Core) auch außerhalb jeglicher Apps mit Controllern, Joysticks und Co. steuern lässt. Dies ist einerseits wirklich super, andererseits auch schwer, wenn man eigentlich die herankommenden Informationen dieser Eingabegeräte in einem anderen Kontext weiterverarbeiten möchte. Hierzu gibt es explizit noch Verbesserungsbedarf an der Applikation.

Bei all dem ausgesprochenen Lob zur Plattform bleibt zu wünschen, dass Microsoft Windows 10 IoT Core weiterhin treu bleibt und weiterentwickelt. Gerade die Fähigkeiten hinsichtlich der Bildverarbeitungen würden enorm vom leistungsstarken Raspberry Pi 4 profitieren.

Alternativen

Wie anfangs erwähnt, ist dieses Projekt ein spielerisches Proof-of-Concept gewesen und nie für einen realen Anwendungsfall entwickelt werden. Sinnvolle und mehr oder weniger produktiv einsetzbare Applikationen und Aufbauten lassen sich auf Hackster.io zum Nachbauen finden.

So gibt es ein Projekt welches eine Tür nur öffnet, wenn das richtige Gesicht davor steht (Link), oder Roboter, die gegeneinander Fußball spielen können (Link).

Quellcode

Die Quelldateien zur App sind im Repository auf GitHub und Hackster.io für jeden frei verfügbar. Forken, mitentwickeln und bewerten ist ausdrücklich erwünscht.

Ein Großteil der Logik zur Kontrolle des Pan-Tilt-HATs ist portierter Quelltext auf Basis der offiziellen Python Bibliothek von Pimoroni.

Zur aktiven Continuous Integration werden Azure Pipelines eingesetzt als auch zur statischen Quelltextanalyse Sonar Cloud.

Über den Autor

Dr. Windows

Dr. Windows

Dies ist der allgemeine Redaktions-User von Dr. Windows. Wird verwendet für allgemeine Ankündigungen, Anzeigen- und Gastartikel

Anzeige