Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

Einstieg in die Anwendung von maschinellem Sehen: Für den Fall, dass die Maschinen sich gegen uns erheben ...

Für diejenigen unter uns, die schon ein paar runde Geburtstage gefeiert haben, war es wahrscheinlich der ursprüngliche Terminator-Film, der uns erstmals mit dem Konzept des maschinellen Sehens bekannt gemacht hat: Darin wurden wir mit der rötlich gefärbten Augmented-Reality-Perspektive des Terminators T-800 konfrontiert.

Terminator_AR_40c31db00b1b41ffd25b02fcca815af8ddf3f938.jpg

 

Aus dieser Perspektive konnten wir miterleben, wie der Terminator Bilddaten erfasste, in Echtzeit verarbeitete und auf der Basis der aus dem Datenstrom ermittelten wesentlichen Informationen Entscheidungen fällte. Interessanter Aspekt am Rande: Wer sich auskannte (und mit dem Befehlssatz vertraut war, zum Beispiel vom Programmieren des Atari 800 [bzw. in diesem Fall des Apple II]), konnte feststellen, dass der T-800 mit 6502-Assembler-Code gesteuert wurde. Wenn man darüber nachdenkt, war das wahrscheinlich der Grund, warum die Maschinen überhaupt erst ein eigenes Bewusstsein entwickelt hatten. Ein Tipp für zwielichtige Entwickler militärischer Waffensysteme: Falls auch Sie planen, einen lernfähigen Killerroboter mit Prozessoren auf der Basis neuronaler Netzwerke zu entwickeln, sollten sie ihm keine Möglichkeit zum Zugriff auf den eigenen Quellcode geben, denn natürlich wird er damit herumspielen! Die Mindestsicherheitsmaßnahme sollte es sein, wenigstens die Kommentare herauszunehmen und den Code zu verschleiern. Ich will damit sagen: Das ist doch das allererste Kapitel in jedem Nachschlagewerk „Bösartige Programmierung für Dummies“, hab ich nicht Recht? …

Aber ich schweife ab. Worauf ich eigentlich hinauswollte, ist Folgendes: Der Terminator verfügte tatsächlich insofern über sämtliche für echtes maschinelles Sehen erforderlichen Komponenten, dass über die Augenkameras eine stereoskopische Bildaufzeichnung (komplett mit justierbarer Optik und multispektraler Erfassung) möglich war. Damit wären Tiefenwahrnehmung über die komplette Wahrnehmungsreichweite und Erfassung auch bei schlechten Lichtverhältnissen gewährleistet gewesen. Im nächsten Schritt wurden digitale Bildverarbeitungstechniken im „lernenden Computer“ mit seinen neuronalen Netzwerken angewendet, um die benötigten Informationen aus der Umgebung herauszurechnen, damit der Terminator Entscheidungen fällen und sein „lebendes Gewebe über einem metallischen Endoskelett“ entsprechend handeln konnte. Das ist gar nicht mehr so weit entfernt vom selbstfahrenden Auto, muss ich sagen.

Natürlich würde der Terminator selbst nicht auf die Augmented-Reality- (AR) Einblendung der Bilddaten angewiesen sein – das war eine Konzession an uns, das Publikum. Vielmehr gab das Verfahren eine Vorahnung auf jene andere Zielrichtung der Technologie des maschinellen Sehens und die Art und Weise, wie AR-Brillen in Zukunft eingesetzt werden könnten, nämlich um zusätzliche Kontextdaten zur Umgebung bereitzustellen, in der sich Menschen im echten Leben (Meatspace) bewegen müssen. Der sozusagen natürliche erste Abnehmer solcher Displaytechnik wäre das Militär, das schon seit vielen Jahren AR in Form der sogenannten Heads-Up-Displays (HUDs) in Raumfahrtanwendungen einsetzt und sicherlich nicht abgeneigt wäre, die Vorteile derartiger Displays für Infanteriekräfte zu übernehmen. Allerdings gilt es, bei der Präsentation entsprechender Daten einen Ausgleich herzustellen, damit eine entsprechende Erweiterung nicht am Ende zur gefährlichen Ablenkung wird.

All das einmal außer Acht gelassen, wäre es bis vor Kurzem unerschwinglich teuer gewesen, optische Instrumente mit Framegrabber-Schaltungen zur Bilderfassung oder Kameras mit Prozessoreinheiten zur Bildverarbeitung in Echtzeit für eine Anwendung zum maschinellen Sehen zusammenzustellen, es sei denn, man hätte über ein großzügig finanziertes Forschungslabor bzw. eine industrielle Prüfautomatik oder Robotersteuerung verfügt: In solchen Fällen hätte man derartige Ausrüstung schon einmal vorfinden können. Da ist es eine gute Nachricht, dass maschinelles Sehen zu überschaubaren Kosten mittlerweile für jedermann verfügbar wird. Wir müssen also nicht mehr auf den „Tag des jüngsten Gerichts“ aus der Terminator-Geschichte warten, um so etwas in die Hände zu bekommen.

Vorstellung: die Intel RealSense™ ZR300

Mit der Kamera ZR300 ist es ein bisschen so, als bekäme man ein eigenes Computer-Bildlabor an den Intel Joule angeflanscht, denn sie ist vollgepackt mit Funktionen. Im Paket mit dem in das Gerät integrierten Imaging-ASIC ist Folgendes enthalten:

  • eine Full HD-1080p-RGB-Farbkamera
  • ein Paar VGA- (640 x 480-) IR-Kameras links und rechts für die stereoskopische Bilderfassung
  • ein IR-Laserprojektor (zur Unterstützung der Tiefenbestimmung in Umgebungen mit geringer Zeichnung, zum Beispiel bei großflächigen flachen Strukturen wie Innenwänden)

Weiterhin gibt es:

  • eine Monochrom-VGA- (640 x 480-) Fischaugenkamera
  • ein Trägheitsmessgerät mit sechs Freiheitsgraden (6DoF)
  • Zeitstempelsynchronisierung mit einer 50-µs-Referenzuhr

Innerhalb des ZR300-Gehäuses sind diese Komponenten folgendermaßen angeordnet:

ZR300_casing_layout4_fde62594ad27f056125456489314de25317024d2.jpg

Insgesamt bedeutet das, dass mit einem einzelnen Gerät Anwendungen in folgenden Bereichen umgesetzt werden können:

  • Objekterkennung, -lokalisierung und -verfolgung
  • Personenerkennung, -verfolgung und Gestenerkennung
  • 6DoF Simultaneous Localisation And Mapping (SLAM) (6DoF-Verfahren zur simultanen Lokalisierung und Kartierung)

Im Grunde hat man damit alles, um eine eigene Terminator-Sichtoptik zu konstruieren. Nur das lebende Gewebe über einem metallischen Endoskelett wird nicht mitgeliefert; dafür müssen Sie schon selbst sorgen. Und noch eins: Wo der USB-3.0-Anschluss des Terminators versteckt ist, kann ich Ihnen auch nicht verraten …

Verbinden der ZR300 mit Ihrem Intel Joule

Dagegen ist, wie ich bereits erwähnte, die Verbindung einfach, wenn Sie einen Intel Joule verwenden. Damit genießen Sie Zugriff auf wunderbare Softwarebeispiele, die mit der RealSense Object Library von Intel, der Person Library und mit SLAM-Bibliotheks-APIs für die ZR300 zusammenarbeiten. So haben Sie ein wunderbares „Schnellstart“-Paket für beliebige Robotikprojekte, die auf eine Wahrnehmung der Umgebung angewiesen sind (damit sie zum Beispiel in einer solchen Umgebung autonom agieren können) oder die dazu in der Lage sein müssen, Objekte oder Personen zu erkennen, die möglicherweise erfasst werden.

Mal angenommen, Sie haben meinen letzten Beitrag gelesen, dann sollten Sie ziemlich genau darüber Bescheid wissen, wie Sie Ihren Intel Joule für den Betrieb mit Ubuntu 16.04 LTS einrichten. Diesmal jedoch wollen wir eine Hardware- und eine BIOS-Modifikation vornehmen, um unser Bildverarbeitungsprojekt in Gang zu bringen.

Hardware-Modifikation

Die Bildverarbeitungsanwendungen, die wir betreiben wollen, sind reichlich rechenintensiv und bringen Ihren Atom-Prozessor fast buchstäblich ins Schwitzen, wenn Sie nicht das im Set enthaltene passive Kühlelement mit einer aktiven Kühllösung (sprich: einem Kühlelement mit Lüfter) ersetzen. Achten Sie darauf, nachdem Sie den entsprechenden Mechanismus installiert haben, dass der Luftstrom von oben in das Kühlelement geleitet wird, damit die Luft durch die Leitbleche fließen muss. Jetzt haben Sie die Möglichkeit, den Rest der Ausstattung mit folgenden Elementen anzuschließen:

Die ZR300: Verbinden Sie die Kamera über das im ZR300-Lieferumfang enthaltene USB-3.0-Kabel mit dem USB-A-Anschluss der Joule-Entwicklungsplatine. Auf der Rückseite der ZR300 ist ein Magnet für zwei verschiedene Installationselemente vorhanden, die im Kamera-Kit enthalten sind. Das eine ist ein Block, mit dessen Hilfe die ZR300 auf einem Standard-Kamerastativ montiert werden kann. Auch gibt es Schraublöcher für die Befestigung, damit eine im Kit ebenfalls enthaltene Halterung angebracht werden kann (siehe Bilder unten).

Labelled_RZ300_15_4c851d1888a840e946106caa5c6c681cf35d1377.jpg
























Labelled_RZ300_23_c5126d1c9833064b3676a1794f0de1ae2a84a81c.jpg
























    • Diesmal werden wir unseren USB-Hub mit Stromversorgung (für Tastatur, Maus und andere USB-Peripheriegeräte) mit dem USB-C-Anschluss verbinden. Das heißt, wir benötigen irgendeine Form von Standardadapter USB A nach USB-C, denn ein solcher ist nicht Teil des Kits.
    • Der Vollständigkeit halber will ich noch hinzufügen, dass eine ordnungsgemäße (852-5352) und/oder Adapter erforderlich sind, mit deren Hilfe Ihr Monitor mit einem Mikro-HDMI-Anschluss der Joule-Platine verbunden werden kann. Außerdem wird ein (018-8769) mit einer Stromversorgung von mindestens 3 A bei 12 V benötigt.

    BIOS-Modifikation

    Wenn wir mit der Hardwareausstattung so weit sind, müssen wir den Strom so richtig aufdrehen, auf 11, na ja, sagen wir 8, während wir die Leistungsgrenze im BIOS einstellen:

    • Drücken Sie beim Einschalten, noch bevor der Ubuntu-Ladevorgang beginnt, die Taste [F5], damit Sie in den Gerätemanager des BIOS gelangen.
    • Folgen Sie der Menüstruktur: System Setup (Systemeinrichtung) > CPU Configuration (Prozessorkonfiguration) > CPU Power Management (Prozessor-Energieverwaltung).
    • Dort angekommen, achten Sie darauf, dass die Option „Power Limit 1 Enable“ (Aktivierung Leistungsgrenze 1) auf <Enabled> (Aktiviert) eingestellt ist:

  • Screen_Grab_14_225e9494b360d8eab6a3bcca8bfd1ce8e760d257.jpg
























  • Anschließend blättern Sie ein paar Positionen nach unten und stellen die Option „Power Limit 1 Power“ (Leistungsgrenze 1 Energie) auf „aberwitzige Geschwindigkeit“ bzw. 8 ein:

  • Screen_Grab_24_ad3bc76f33ccf1555424419f9f715643e5ee03ae.jpg

























  • Zum guten Schluss speichern wir die Einstellungen und starten das Ganze für eine neue Runde Spaß.

Installieren des The RealSense SDK

Nach Abschluss dieser Modifikation sind wir fast bereit, es richtig krachen zu lassen. Was wir jetzt noch brauchen, ist das SDK mit der Beispielsoftware. 

Zeit

Bevor wir das angehen, müssen Sie allerdings noch dafür Sorge tragen, dass Ihr Joule auf die richtige Zeit für Ihre Zeitzone eingestellt ist. Der Joule verfügt nicht über eine Uhr mit Echtzeitbatterie und deshalb würde normalerweise bei der Installation Ubuntu so eingestellt, dass Zeit und Datum über das Internet automatisch ermittelt und eingestellt werden. Die einfachste Methode zur Prüfung, ob eine entsprechende Einstellung bei Ihrem Joule vorgenommen worden ist, ist die im Folgenden beschriebene: Klicken Sie auf „System Settings“ (Systemeinstellungen), normalerweise das letzte Standardsymbol in der Startleiste. Unten im Fenster der Systemeinstellungen (unter „System“) findet sich die Option „Time & Date“ (Uhrzeit und Datum):

 

Screen_Grab_32_e390a7964c09f286a2ab6cdb597c14ad1cbfdbc5.jpg

 

Klicken Sie auf diese Option und achten Sie darauf, dass der Optionsschalter „Automatically from the Internet“ (Automatisch über das Internet) der Eigenschaft „Set the time“ (Zeit einstellen) aktiviert ist:

Screen_Grab_4.jpg3_df08f1215500297c18772b3d3c0ad18ac53119b7.png

 

Sollten Sie aber einen unkontrollierbaren Drang verspüren, die Zeit lieber von Hand einzustellen, können Sie auch das über dieses Fenster oder von der Befehlszeile aus mit einem Befehl wie dem folgenden erledigen:

$ sudo date –s "13:20 7/31/2017"

Übrigens können Sie mit diesem Befehl auch ermitteln, auf welchen Wochentag ein entsprechend angegebenes Datum fällt …

Repository

Im nächsten Schritt wird dem Ubuntu Package Manager das RealSense-Repository hinzugefügt:

$ echo 'deb "http://realsense-alm-public.s3.amazonaws.com/apt-repo" xenial main' | sudo tee /etc/apt/sources.list.d/realsense-latest.list

$ sudo apt-key adv --keyserver keys.gnupg.net --recv-key D6FB2970

$ sudo apt update

Installieren des Laufzeitmoduls und der Beispiele

Zum Installieren des Laufzeitmoduls und der Beispiele installieren wir einfach das Paket aus dem soeben hinzugefügten Repository:

$ sudo apt install librealsense-samples beignet-opencl-icd

Und wenn wir schon dabei sind, können wir gleich auch die Hilfsprogramme für den Kamerazugriff installieren:

$ sudo apt install librealsense-utils

Wenn diese Hilfsprogramme installiert sind, können wir die Video-Streams der verschiedenen Kameras der ZR300 mit folgendem Befehl live beobachten:

$ cpp-capture

Zum Schluss können wir das RealSense SDK installieren, das wir brauchen, um unsere eigenen Apps zu entwickeln:

 $ sudo apt install librealsense-object-recognition-dev librealsense-persontracking-dev librealsense-slam-dev

… und die Beispielsoftware von Github kopieren, damit wir uns den Quellcode ansehen können, um zu analysieren, wie die Beispiele entwickelt worden sind und wie wir sie selbst kompilieren können. Fangen wir mit der Installation von Git und weiteren Voraussetzungen an:

$ sudo apt install git cmake libjpeg-dev libopencv-dev

Normalerweise ist Git bereits installiert, aber unter Umständen ist es erforderlich, build-essential anzuhängen, damit die Liste oben installiert wird, falls Sie die Beispielsoftware nicht kompilieren können. Im nächsten Schritt kopieren wir die Beispiele von Github. Ich habe sie in einem neuen Ordner namens „Projects“ (Projekte) untergebracht:

$ mkdir Projects

$ cd Projects

$ git clone http://github.com/IntelRealSense/realsense_samples

$ cd realsense_samples

Wenn Sie wollen, können Sie anschließend die Beispiele kompilieren: 

$ mkdir build

$ cd build

$ cmake ..

$ make

Nachdem die Builds abgeschlossen sind, können wir unsere ZR300 anschließen und sind bereit, mit der Magie des maschinellen Sehens zu arbeiten.

Beispielsoftware

Builds für den kompletten Satz mit Beispielsoftware sind über das RealSense SDK bereits angefertigt worden (sie sind in „/usr/bin“ zu finden). Das heißt, Sie können auch diese Builds verwenden und müssen dann nicht alles selbst kompilieren. Die entsprechenden ausführbaren Dateien weisen rs_-Präfixe in jedem Namen auf: Zum Beispiel trägt das bereits vorkompilierte Ausführungsprogramm für das Beispiel „slam_tutorial_1_web“ den Namen „rs_slam_tutorial_1_web“.

Sofern Sie Builds für diese Beispiele selbst anfertigen, finden Sie die blitzsauberen neuen ausführbaren Programme in dem Ordner unterhalb des „build“-Ordners, der auch den Quellcode für das jeweilige Beispiel enthält. Um bei unserem Beispiel zu bleiben, würde sich das ausführbare Programm für das „slam_tutorial_1_web“-Beispiel im folgenden Ordner finden lassen: /Projects/realsense_samples/build/samples/slam_tutorial_1_web.

Es gibt separate Sätze von Beispielen, die auf die Object Library, die Person Library und die SLAM Library zurückgreifen. Jeder Beispielsatz wird mit einer grundlegenden Tutorial-Anwendung eingeleitet, die zeigt, wie die jeweiligen Funktionen im Zweifelsfall eingesetzt werden. Darauf folgen jeweils weitere Tutorial-Apps, die auf dem bereits Gezeigten aufbauen, sodass am Ende der Beispielserien für die einzelnen SDK-Bibliotheken jeweils ziemlich fortgeschrittene Anwendungen rund um maschinelles Sehen oder die Raumwahrnehmung stehen. Die Bibliotheken und demnach auch die Softwarebeispiele sind alle in C++ geschrieben.

Es ginge über den Rahmen dieses Artikels hinaus, diese Beispiele einzeln anzusprechen, aber immerhin können wir einen kurzen Blick auf eines der Multimodus-Beispiele werfen, in dem viele der Ressourcen der ZR300 in einer Webbrowser-Anwendung zusammengebracht werden. Das sollte Ihnen einen kleinen Eindruck davon verschaffen, wie viel Sie gleich am ersten Tag mit Ihrer an den Intel Joule angeschlossenen ZR300 anstellen können.

slam_or_pt_tutorial_1_web

Dieses Beispiel zeigt einen Livestream der Farbkamera und der Fischaugenkamera. Zur gleichen Zeit zeigt die Webseitenausgabe im Browser eine SLAM-Auslastungskarte der Umgebung sowie FPS- (Bilder-pro-Sekunde-) Daten für Eingang und Verfolgung der Fischaugen- und der Tiefenkamera, des Gyroskops und des Beschleunigungsmessers, sofern vorhanden.

Der Quellcode dafür ist unter „/realsense_samples/build/samples/slam_or_pt_tutorial_1_web“ zu finden.

Die vorkompilierte ausführbare Datei für das Beispiel kann aus jedem beliebigen Verzeichnis heraus über die Befehlszeile gestartet werden:

$ rs_slam_or_pt_tutorial_1_web

Damit wird ein Webserver gestartet, der anschließend manuell mit einem Webbrowser verbunden werden muss:

Screen_Grab_5.jpg3_1d77dcf9f950b9b21c490e130edcd23df843eeb0.png

 

Wenn Sie mit der Maus auf die hervorgehobene Webadresse zeigen (in unserem Beispiel oben http://172.30.44.97:8000/view.html) und rechtsklicken, können Sie im eingeblendeten Menü die Option „open link“ (Link öffnen) auswählen, damit die Adresse in Ihrem Standardbrowser geöffnet wird.

Sobald der Server einen Client aufweist, macht sich das Beispiel daran, Objekte zu identifizieren und diese Objekte über das Terminal zu melden. Gleichzeitig werden die Livefeeds zum Webbrowser übertragen, ebenso wie die Kartierungsdaten aus der SLAM-Analyse der Umgebung vor der Kamera (große Karte oben links). Die Datenraten der Sensoren werden oben rechts im Browser gemeldet. Die ZR300 fährt fort, Daten zu übermitteln. Mit ihr kann man nicht verhandeln. Mit ihr kann man auch nicht vernünftig reden. Sie kennt weder Mitleid, noch Reue oder Angst. Und absolut nichts wird sie aufhalten ... niemals, bevor Sie nicht über das Terminal [Esc] oder [Ctrl]-[C] drücken.

Screen_Grab_61_ee2df1300c2a724d9b97a04e0259aab25bf625d1.jpg

 

SLAM-Karte

Die SLAM-Karte wird erstellt, wenn Sie die Kamera bewegen. Es gibt einen „Kegel“, der das Blickfeld der Kamera in Echtzeit und in 3D kennzeichnet. Wenn Sie also die Kamera im Raum bewegen, bewegt sich auch der Kegel. Die Karte wird aufgebaut, wo sich Hindernisse vor der Kamera zeigen (die grauen Flecken auf der Karte), oder wo im Raum Objekte identifiziert worden sind (über den Farbbild-Feed). Das geschieht in drei Dimensionen, wie Sie in der Karte im nächsten Bild sehen können:

Screen_Grab_72_f730026bbdf816e374c8f45b994940721eb6f63e.jpg

 

Objekterkennung

Während noch die SLAM-Karte aufgebaut wird, gleicht die Software das im Farbvideo-Feed Gesehene mit der Objektbibliothek ab und bestimmt einen Prozentwert der Sicherheit, mit der einzelne Objekte zutreffend identifiziert (und gekennzeichnet) worden sind. Gleichzeitig werden die relativen Koordinaten zwischen der Position der Kamera selbst und den gefundenen Objekten bestimmt.

Der Quellcode für dieses und die anderen Beispielen ist ein ausgezeichneter Ausgangspunkt für Ihre jeweils eigene Anwendung zur Objekt-, Personen oder Gesichtserkennung und/oder Anwendungen, die voraussetzen, dass das System Informationen über seine Umgebung einholen kann.

Fazit

Was die Technologie angeht, die erforderlich wäre, damit ein Terminator sich zurechtfindet, ist die Zukunft bereits Gegenwart. Skynet müsste sich noch nicht einmal Sorgen über Verhandlungen mit der Finanzabteilung machen, denn für alle, die es in puncto maschinelles Sehen ernst meinen, sind Intel Joule und ZR300 preiswert genug, dass selbst Bastlerclubs mit kleinem Budget sich das Doppel leisten können, also ein Klacks für bösartige Multimilliarden-Computersysteme.

Und als ob das nicht schon genug Argumente wären, gibt es noch tonnenweise Beispiele dafür, wie man Skynet ganz schnell Beine macht, sowie eine Support-Community, falls das schurkische System doch einmal schwer an einem Problem zu knabbern hat, weil es zum Beispiel die Seite mit den Einträgen für diverse „Connor, S.“-Anschlüsse aus einem Telefonbuch reißen muss. Wer hätte

Mark completed his Electronic Engineering degree in 1991 and worked in real-time digital signal processing applications engineering for a number of years, before moving into technical marketing.
DesignSpark Electrical Logolinkedin