Inhaltsverzeichnis:

OpenCV-Basisprojekte - Gunook
OpenCV-Basisprojekte - Gunook

Video: OpenCV-Basisprojekte - Gunook

Video: OpenCV-Basisprojekte - Gunook
Video: Gesichtserkennung mit ESP32 Cam und Arduino IDE | Tutorial 2024, Juli
Anonim
OpenCV-Basisprojekte
OpenCV-Basisprojekte

In diesem Projekt untersuchen wir einige grundlegende OpenCV-Funktionen anhand von 4 einfachen Projekten mit einem Live-Videostream. Dies sind Gesichtserkennung, Hintergrundentfernung, spezielle visuelle Darstellung von Kanten und das Anwenden eines Unschärfeeffekts auf den Live-Videostream. Mein Hauptzweck beim Ausprobieren dieser Projekte war es, einfach meine Füße mit der OpenCV-Schnittstelle nass zu machen, da ich vorhabe, tiefer in das Gebiet der Computer Vision einzutauchen

Lieferungen

  • Computer mit Python
  • Offene CV-Bibliothek, Numpy-Bibliothek, tkinter-Bibliothek, sys-Bibliothek
  • Kamera zum Anschließen an den Computer (falls der Computer noch keine enthält)
  • Python-Datei des Programms (in dieser Anleitung enthalten)
  • haarcascade xml-Datei (in dieser Anleitung enthalten)

Schritt 1: FaceDetect-Funktion

FaceDetect-Funktion
FaceDetect-Funktion
FaceDetect-Funktion
FaceDetect-Funktion

Diese Funktion zeigt das Video Ihrer Kamera mit grünen Quadraten auf allen Gesichtern, die sie aufnimmt. Im Code verwenden wir die Funktion cv2. VideoCapture(), um das Video, das wir aufnehmen, in einem Objekt namens "capture" zu speichern. Der CAPTURE_INDEX ist eine von Ihrem Computer festgelegte Zahl, die dem Index Ihrer Kamera in der Videoeingangsliste des Computers entspricht. Wenn keine Außenkamera an Ihren Computer angeschlossen ist, sollte 0 oder 1 funktionieren.

Das face_cascade-Objekt wird mit der Funktion cascadeClassifier und der Datei "haarcascade_frontalface_default.xml" im OpenCV-Github initialisiert. Wir verwenden dieses Objekt, um die in der Liste "Gesichter" erkannten Gesichter als Eintrags-Vier-Wege-Tupel zu speichern, das die Gesichter x-Koordinate, y-Koordinate, Breite und Höhe enthält. Anschließend zeichnen wir mit der Funktion cv2.rectangle ein Rechteck, das das Gesicht perfekt umschließt

Aus diesem Video erfasst OpenCV viele Bilder in unserer while-Schleife mit capture.read() und speichert das Bild in einem Frame namens "img". Jedes Bild wird dann nach unseren Wünschen interpretiert und modifiziert. Für faceDetect machen wir das Bild mit der Funktion cvtColor grau, die das im ersten Parameter angegebene Bild in eine bestimmte Art von Bildfarbe konvertiert, die im zweiten Parameter angegeben ist. Die Liste der zulässigen Werte für den zweiten Parameter finden Sie online. Anschließend zeigen wir das Bild in einem Fenster namens "Detecting the face" mit der Funktion imshow() an, die einen String für den Fensternamen und den anzuzeigenden Bildrahmen benötigt.

Schließlich warten wir, bis der Benutzer die q-Taste mit der Funktion cv2.waitKey() eingibt. Die 0xFF-Maske wird als Konvention für 64-Bit-Computer verwendet. Nachdem der Benutzer den Videostream beendet hat, gibt die faceDetect-Funktion das Aufnahmeobjekt frei und zerstört dann alle anderen Fenster, die unter der OpenCV-Schnittstelle geöffnet sind. Alle anderen Funktionen folgen einer ähnlichen Designstruktur.

Schritt 2: BackgroundRemove-Funktion

BackgroundRemove-Funktion
BackgroundRemove-Funktion
BackgroundRemove-Funktion
BackgroundRemove-Funktion

Diese Funktion versucht, den Hintergrundteil unseres Videos zu entfernen und nur das Vordergrundbild zu belassen. Bei einigen Kameras funktioniert es möglicherweise nicht, da sie eine Beleuchtungsanpassungsfunktion verwenden, die aktiviert wird, wenn verschiedene Objekte/Fokus in den Rahmen gelangen. Wenn Ihre backgroundRemove-Funktion nicht funktioniert, machen Sie sich keine Sorgen - es könnte nur Ihre Kamera sein!

Um diese Funktion zu verwenden, entfernen Sie sich vom Kamerarahmen und drücken Sie die Taste "d", um das Hintergrundbild aufzunehmen. Es ist wichtig, dass sich im Hintergrund, den Sie aufnehmen möchten, keine bewegten Objekte befinden. Dann können wir in den Kamerarahmen zurücktreten. Wenn die Funktion funktioniert hat, sollte sich der Benutzer nur im Videostream der Funktion sehen. Jegliches Rauschen/schwarze Fleck im Vordergrundbild kann auf die Beleuchtungseinstellung der Kamera zurückzuführen sein. Um einen anderen Hintergrund aufzunehmen, drücken Sie die Taste "r", um die Initialisierung erneut durchzuführen, und drücken Sie dann erneut "d".

Einige wichtige Erkenntnisse für diese Funktion ist die Verwendung des booleschen "Flag"-Werts, der in dem Moment ausgelöst wird, in dem der Benutzer die d-Taste drückt. Dies erfasst den Hintergrund und ermöglicht es uns, ihn aus dem Video zu entfernen, das von der Funktion gestreamt wird. Unser Ziel ist es, das Hintergrundbild in ref_img zu speichern, damit wir es vom Vordergrundbild unterscheiden können, das jedes sich bewegende Objekt einfängt. Wir verwenden die Funktion cv2.subtract(), um das Vordergrundbild vom Hintergrundbild zu subtrahieren und umgekehrt, und heben dann alle winzigen Unterschiede in den beiden Bildern unmittelbar danach auf. Der Hintergrund ist geschwärzt.

Die fgmask wird aus der Differenz zwischen diesen beiden Bildern erstellt und dann mit der OpenCV-Funktion cv2.bitwise_and() auf den Videostream der Funktionen angewendet.

Schritt 3: VideoEdges-Funktion

VideoEdges-Funktion
VideoEdges-Funktion
VideoEdges-Funktion
VideoEdges-Funktion

Diese Funktion gibt einen Live-Videostream zurück, aber die erkennbaren Kanten werden weiß gerendert, während alles andere geschwärzt wird. Was diese Funktion von den anderen Funktionen unterscheidet, ist die Konvertierung unseres Originalvideos vom RBG-Format in HSV, was für Farbton, Sättigung und Variation steht – eine andere Methode zur Verarbeitung von Licht und Farbe aus einem Video. Mit dieser Methode können wir Umrisse im Video leichter unterscheiden, indem wir einen Filter anwenden (red_low bis red_high).

Canny Edge Detection wird verwendet, um die Kanten in einem Bild zu erkennen. Es akzeptiert ein Graustufenbild als Eingabe und verwendet einen mehrstufigen Algorithmus.

Schritt 4: VideoBlur-Funktion

VideoBlur-Funktion
VideoBlur-Funktion
VideoBlur-Funktion
VideoBlur-Funktion

Diese Funktion wird verwendet, um unserem Videostream einen Unschärfeeffekt hinzuzufügen. Die Funktion simple ruft die Funktion GaussianBlur cv2 in unserem Frame auf. Weitere Informationen zur Funktion GaussianBlur finden Sie hier:

opencv-python-tutroals.readthedocs.io/en/l…

Schritt 5: Verbesserungen

Die empfindlichste Funktion in diesem Projekt ist die Funktion zum Entfernen des Hintergrunds, da hierfür eine Kamera ohne Beleuchtungsanpassungsfunktion erforderlich ist. Möglicherweise gibt es in der OpenCV-Bibliothek bessere Funktionen, die diese Beleuchtungsanpassung berücksichtigen und den Hintergrund reibungslos entfernen können (ähnlich einem grünen Bildschirm).

Wir könnten auch andere Gesichtserkennungsfunktionen verwenden, die Objekte mit mehr Funktionalität als nur der Rückgabe von (x, y)-Koordinaten erzeugen können. Vielleicht wäre ein Gesichtserkennungsprogramm mit der Fähigkeit, sich Gesichter zu merken, nicht allzu schwer zu implementieren.

Die Unschärfefunktion kann durch intuitive Steuerung durch den Benutzer individueller gestaltet werden. Der Benutzer möchte beispielsweise die Intensität des Unschärfeeffekts anpassen oder einen bestimmten Bereich innerhalb des Rahmens zum Unschärfen auswählen.