Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Grundlagen der Computer Vision

Die ganze Lektion steht hier zum Lesen. Erstellen Sie ein kostenloses Konto, um sie in einem Live-Lab auszuführen.

Container-Lab10 Min. Lesezeit6 Befehle

Wie viele Münzen sind auf dem Bild?

Ein Mensch zählt die Münzen auf einem Foto in einer Sekunde. Ein Computer bekommt nur eine lange Liste von Zahlen, und man muss ihm sagen, wie er daraus „neun Münzen“ macht. Das Schritt für Schritt zu tun, ist Computer Vision.

Am Ende dieser Lektion

Notiz

Ich kann die Pixel eines Bildes lesen und mit einem Schwellenwert die Objekte darin zählen.

Schlüsselwörter

  • Pixel: ein Punkt eines Bildes, gespeichert als Zahlen.
  • Modus: die Art, wie die Zahlen angeordnet sind, zum Beispiel RGB (Rot, Grün, Blau) oder L (eine einzige Graustufe).
  • Graustufe: eine Zahl von 0 (Schwarz) bis 255 (Weiß).
  • Schwellenwert: eine Graustufe, die dunkle von hellen Pixeln trennt.
  • Filter: eine Regel, die jedes Pixel anhand der Pixel um es herum verändert, zum Beispiel ein Weichzeichner.
  • Label: eine Nummer, die jedes einzelne Objekt bekommt, das in einem Bild gefunden wird.

Zum Einstieg: was du schon weißt

Notiz

Antworte im Kopf. 1. Welche drei Farben werden gemischt, um jede Farbe auf einem Bildschirm zu erzeugen? 2. Was ist heller, 40 oder 200, auf einer Skala von 0 bis 255? 3. Was macht > in einem Vergleich? Antworten: Rot, Grün und Blau; 200; es fragt, ob die linke Seite größer ist als die rechte.

Bevor du anfängst

Notiz

Klicke oben in der Leiste dieser Lektion auf Lab starten und warte, bis dort steht, dass es läuft. Es gibt einen Container, jupyter, und das Terminal erreicht sein Python mit docker exec jupyter, das einen Befehl darin ausführt. Der Link JupyterLab öffnet seine Webseite, Port 8888, wo du die Bilder öffnen und ansehen kannst. Jede Schaltfläche Ausführen unten tippt ihren Befehl ins Terminal deines Labs, einen nach dem anderen in derselben Sitzung. Wenn du zuschauen oder eigene Befehle tippen willst, klicke in der Leiste auf Terminal öffnen (neuer Tab).

Ein Bild ist ein Raster aus Zahlen

ls images listet die fünf Bilder auf, die das Lab gezeichnet hat. Das erste Skript öffnet coins.png und gibt aus, was darin steckt. Die Antwort sagt, dass das Bild 320 Pixel breit und 240 hoch ist, im Modus RGB. Das Pixel bei 10, 10 ist (35, 35, 35), fast schwarz: der Hintergrund. Das Pixel bei 50, 50 ist (197, 157, 62), ein Goldton: ein Stück einer Münze. Die mittlere Graustufe des ganzen Bildes ist 57,6, dunkel, weil das meiste Hintergrund ist.

Befehl
docker exec jupyter ls images

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Befehl
docker exec jupyter python3 steps/look.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Grau behält die Helligkeit und lässt die Farbe weg

convert("L") gibt jedem Pixel nur eine Zahl. Das Münzpixel (197, 157, 62) wird zu 158. Danach zählt das Skript die Pixel in vier Graubereichen. 63231 sind dunkel, von 0 bis 63, keines liegt in der Mitte, und 13566 liegen von 128 bis 191: zwei klare Gruppen, der Hintergrund und die Münzen. Es speichert auch coins_grey.png, das du in JupyterLab öffnen kannst.

Befehl
docker exec jupyter python3 steps/grey.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Schwellenwert trennt Dunkel von Hell

Ein Schwellenwert macht aus einem Graubild für jedes Pixel ein Ja oder Nein: Ist es heller als diese Stufe? Das Skript probiert drei Stufen an 76800 Pixeln aus. Bei 30 bleiben 58806 übrig, fast das ganze Bild, weil der Hintergrund an vielen Stellen heller als 30 ist. Bei 100 bleiben 13569 übrig, das sind die Münzen. Bei 160 bleiben 10062 übrig, und es schneidet in die Münzen hinein. Das Ergebnis für Stufe 100 speichert es als coins_mask.png: weiß, wo eine Münze ist.

Befehl
docker exec jupyter python3 steps/threshold.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Prüfe dich

Tipp

Welche der drei Stufen hat die Münzen vom Hintergrund getrennt, und warum ist 30 gescheitert? Antwort: 100, weil sie in der leeren Lücke zwischen dem dunklen Hintergrund und den hellen Münzen liegt; 30 liegt im Rauschen des Hintergrunds selbst, also bleibt auch ein großer Teil des Hintergrunds übrig.

Ein Weichzeichner beruhigt Rauschen

Der Seitenscan scan.png hat Sprenkel, wie eine schmutzige Fotokopie. Ein Weichzeichner ersetzt jedes Pixel durch einen Durchschnitt seiner Nachbarn. Das Skript misst, wie stark eine leere Stelle der Seite ohne Schrift schwankt. Vor dem Weichzeichnen schwankt sie um 25,3 Graustufen. Danach nur noch um 4,9. Das Rauschen ist fast weg, und die Schrift wirkt auch weicher. Es speichert scan_blurred.png, damit du vergleichen kannst.

Befehl
docker exec jupyter python3 steps/blur.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Objekte zählen

Um die Münzen zu zählen, erzeuge die Maske mit der Stufe, die funktioniert hat, und lass scikit-image sie beschriften: Jede Gruppe zusammenhängender weißer Pixel bekommt ihre eigene Nummer. Die Antwort ist 9 Objekte, die neun Münzen, die das Lab gezeichnet hat. Die Flächen gibt es in drei Größen: dreimal 657 Pixel, dreimal 1313 und dreimal 2553, also kleine, mittlere und große Münzen.

Befehl
docker exec jupyter python3 steps/count.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, der Computer finde den richtigen Schwellenwert von allein. Das tut er nicht: Du hast 100 gewählt, weil du dir die beiden Gruppen von Graustufen angesehen hast. Bei einem Bild mit ungleichmäßigem Licht wie scan.png kann eine Stufe, die links funktioniert, rechts versagen. Prüfe die Maske immer mit dem Auge, bevor du einer Zählung traust.

Dieselbe Arbeit in einem Notebook

Öffne JupyterLab über die Leiste und doppelklicke auf start.ipynb. Es macht, was die Skripte gemacht haben, Zelle für Zelle. Klicke auf eine Zelle und drücke Umschalt und Eingabe, um sie auszuführen. Das Bild erscheint unter der Zelle. In der letzten Zelle steht deine eigene Frage: Öffne road.png oder scan.png und frag etwas.

Abschlusscheck

Tipp

Antworte, ohne zurückzublättern. 1. Welchen Zahlenbereich hat eine Graustufe? 2. Was entscheidet ein Schwellenwert für jedes Pixel? 3. Warum hat der Weichzeichner die Schwankung der leeren Stelle verringert? 4. Wie viele Münzen hat das Beschriften gefunden, und woher wusstest du, dass das stimmt? Antworten: 0 bis 255; ob es heller als die Stufe ist; jedes Pixel wurde zu einem Durchschnitt seiner Nachbarn, also wurden die einzelnen hellen und dunklen Punkte zur Mitte gezogen; 9, genau so viele, wie gezeichnet wurden.

Für Lehrkräfte

Tipp

Diese Lektion ist ein kleines Beispiel für eine Lektion, die in einem Lab abläuft: Die Schritte und die Schaltflächen „Ausführen“ sind die Lektion, und das Lab ist die eigene Kopie jeder lernenden Person. Das Lab ist ein Dienst, JupyterLab mit Pillow, NumPy und scikit-image, und nichts hier wertet sich selbst aus: Die lernende Person gibt ein eigenes Notebook zu einem der Bilder ab, aus JupyterLab heruntergeladen, und einen Satz dazu, was es gezeigt hat. Kernpunkte: 1. Ein Bild ist ein Raster aus Zahlen. 2. Ein Schwellenwert teilt Pixel in zwei Gruppen. 3. Ein Filter verändert ein Pixel anhand seiner Nachbarn. Häufiger Fehler: einem Schwellenwert oder einer Zählung zu trauen, ohne die Maske anzusehen. Material: das Lab und ein Browser. Tipp: Lassen Sie die Lernenden jede Zahl raten, bevor sie auf Ausführen klicken. Die Bilder werden aus einem festen Startwert gezeichnet, also liefert jede Kopie dieselben Zahlen, und das Lab hat weder neuronale Netze noch OpenCV. Kopieren Sie sie in Ihr eigenes Modul und ändern Sie sie, oder bauen Sie mit dem Menü Lab im Lektionsbauer eine von Grund auf.

Über dieses Lab und seinen Quellcode: Computer-Vision-Lab: Pixel, Schwellenwerte und Objekte zählen in JupyterLab

Sie unterrichten eine Klasse? Weisen Sie diese Lektionen Ihren Lernenden zu, mit Bewertung und einem Lab für jede lernende Person.