Transkripte
1. ÜBERSICHT: Hallo! In diesem Kurs werden wir sehen,
wie Objekte in
Bildern und Videos mithilfe von
Deep Learning und Open CV erkannt werden. Mein Name ist Yossi und ich werde dein Lehrer
in dieser Klasse sein. Ich programmiere
seit 2019. Und ich bin der Autor des Vlogs. Wiederhole nicht yourself.org,
wo ich jeden
Monat
über 5.000 Entwicklern helfe jeden
Monat
über 5.000 Entwicklern ,
mehr über Python,
maschinelles Lernen
und Computer Vision zu erfahren . Was ist Objekterkennung? Objekterkennung
ist der Prozess des
Lokalisierens von Objekten
mit Begrenzungsrahmen, einem Bild oder einem Video. Es ist eine der wichtigsten
Aufgaben in der Computer Vision. Und es hat viele Anwendungen
in verschiedenen Bereichen, wie Überwachung, Personen, Zählen, selbstfahrende
Autos usw. Jetzt gibt es einen
Unterschied zwischen Objekterkennung und
Bildklassifizierung. Objekterkennung ist also im Grunde der Prozess, bei dem
Objekte in einem Bild lokalisiert werden. Bei der Bildklassifizierung
handelt es sich um den Prozess, bei dem Bildern
anhand ihres Inhalts Beschriftungen
zugewiesen werden. Also lasst uns in die Klasse und mit dem Aufbau unseres Projekts beginnen.
2. Installation: Das erste, was wir tun
müssen, ist die Installation der erforderlichen Pakete, die
für die Bildverarbeitung nützlich sind. Also werden wir
OpenCV und die Non-Pipe installieren. Beginnen wir zunächst mit OpenCV, öffnen ein neues
Terminalfenster und führen den Befehl pip,
Install OpenCV polygon aus. In meinem Fall können Sie sehen, dass ich Open CV bereits installiert
habe. Anforderung, bereits erfüllt. Aber ich möchte nur
eine virtuelle Umgebung schaffen. So kann das Trio sehen, was Sie
erhalten, wenn Sie es installiert haben. Erstellen wir also die
virtuelle Umgebung. Wir beneiden. Reden wir über Fernsehen. Lassen Sie uns jetzt Open CV
vorinstalliert haben. Cv. Hier können Sie sehen, dass OpenCV
zusammen mit einem offenen CV ohne Pipe
erfolgreich installiert wurde . Also muss
ich NumPy nicht installieren. Hier können Sie sehen, dass
ich eine offene CV 4.54.5 Version von OpenCV habe und die Version von
non pi air 1.22 zu eins ist.
3. Objekterkennung in Bildern: In diesem Video werden
wir nun den
Single-Shot-Detektor
aus der Arbeit in Kombination mit
der MobileNet-Architektur als
unseren
Deep-Learning-basierten Objektdetektor verwenden aus der Arbeit in Kombination mit der MobileNet-Architektur als . Das erste, was wir
tun müssen, ist unsere Bibliotheken
zu importieren. Also werden wir sagen Import CB2. Und wir können auch unser Bild laden. Also sagen wir hier Marine, der Topf für unser Image. Und wir können es auch
skalieren. Wenn wir also CV sagen
, um die Größe des Bildes zu ändern, sagen
wir 644 der Breite. Und für 84 die Höhe. Lassen Sie uns nun die Höhe aus
dem Bild und die Breite ermitteln. Wir würden also nicht
Bildpunktform 0 sagen. Und für die Höhe
wird Form eins sagen. Jetzt benötigen wir die Gewichte und die
Konfigurationsdatei für unser Modell. Sie haben dieses Phi
aus der OpenCV-Dokumentation heruntergeladen . Wir haben also zwei Akten hier. Ich werde in
der Textversion dieses Teils einen Link
zu diesen Leuten setzen . Jetzt, da wir alle
Dateien haben, die wir benötigen, können
wir unser Modell laden. Also können wir
hier unser Netzwerk schreiben. Wir werden also nicht sehen, dass V2 dot DNN dot auf einer Art Flow gelesen wird. Und in der Kopfzeile geben
wir die Gewichte und die
Konfigurationsdatei an. Also können wir diese
beiden Variablen hier nicht schreiben. Wenn Sie sagen, dass das
Gewicht gleich ist und wir den
Weg zu unserem Gewicht angeben. Das ist also die
Datei, die
die Gewichte für das Modell enthält . Man kann Modell sagen. Dies ist die
Architektur unseres Modells. Was wir jetzt tun können, ist das, also hier haben wir die
Cocoa-Namensdatei. Wenn du es hier
in das Projekt steckst. Im Grunde enthält diese Datei also die Klauseln, die wir erkennen können. So können wir die
Datei öffnen und
die Klassenbezeichnungen in der Liste installieren . Wir können den Context
Manager für Erwachsene verwenden, also sagen wir mit offen. Und hier bieten wir den Weg
zu unserem Kakaonamen in Ordnung. Kopiere es einfach von hier. Hier sagen wir Datei lesen. Hier speichern wir die
Klassenbeschriftungen
in der Liste, in der wir Namen benennen
werden. Also werden wir hier sagen dass
Clusternamen einer leeren Liste entsprechen
. Hier können wir f, lot,
rained, stripped und dots schreiben . Und wir werden uns
basierend auf der neuen Linie trennen. Jetzt müssen wir
unser Bild vorverarbeiten und wir haben eine Funktion, die
die gesamte Vorverarbeitung für uns erledigt. Also können wir hier sagen, blob ist gleich c v2 dot DNN. Und hier werden wir das
funktionale Hüllkurvenbild verwenden. Hier stellen wir unser Bild zur Verfügung. Und jetzt haben wir hier ein paar Parameter, die standardmäßig eingestellt
sind. Diese sind
der Dokumentation zu entnehmen. Also im Grunde ist hier
der erste der Skalierungsfaktor. Wir können 1 setzen, wir teilen durch 127,5. Und dann haben wir hier die
Größe für das Ausgabebild. Wir können nicht 320 schreiben. Und das letzte Argument hier sind die Mittel der Produktionswerte. Wir können jetzt
eins zu eins auf 7.5 schreiben. Das Gleiche hier und das
Gleiche hier. Als nächstes können wir den,
diesen Blob als Eingabe für
das Netzwerk setzen diesen Blob als Eingabe für und
die Ausgabevorhersage erhalten. Also können wir hier sagen, nicht viel. Eingabe. Und wir werden unseren Blob zur Verfügung stellen. Um die Vorhersage zu treffen. Wir werden sagen, dass die Ausgabe gleich vier
ist. Jetzt haben wir
unsere Vorhersagen. Lassen Sie uns also die
Form dieser Variablen ausdrucken. Wir werden sagen, dass die Ausgabeform
darin besteht, unseren Code zu schreiben. Wie Sie sehen können, haben
wir hier eine Form von 11107. Also hier haben wir die
Entdeckungen, die Haare sieben, wir haben die Bounding Boxes, das Vertrauen und
einige andere Informationen. Was wir jetzt tun können, können
wir diese Variable durchgehen,
um die Erkennungen zu erhalten. Wir werden also für die
Erkennung in der Ausgabe sagen. Hier sagen wir 00. Und hier nehmen wir alles. Und hier
nehmen wir auch alles mit. Jetzt erhalten wir hier
das Vertrauen
des Modells für die
aktuelle Erkennung. Wir können also sagen, dass Pro
Really t
dem zweiten Argument
aus dem zweiten Element
unserer Entdeckung entspricht dem zweiten Argument . Jetzt können wir
die Fehlererkennungen filtern. Wir können jetzt binden, wenn unsere Wahrscheinlichkeit oder das
Vertrauen des Modells beispielsweise unter 0,5 liegt , wir werden weiter schleifen. Also werden wir nichts tun. Und wenn nicht, holen wir uns den Begrenzungsrahmen
von der Entdeckung. Die Begrenzungsbox befindet sich also. Sie können die Erkennung
von drei bis sieben sehen. Nun, dieser Begrenzungsrahmen, oder relativ in
Bezug auf
die Breite und die
Höhe des Bildes gegeben . Drucken wir also unsere
Schachtel aus. Und die Haare. Wie Sie sehen können,
haben wir 0.30.350.5. Wir müssen
sie also mit der Breite
und der Höhe des Bildes multiplizieren sie also mit der Breite
und der Höhe des , um
die tatsächlichen x
- und y-Koordinaten
des Begrenzungsrahmens zu erhalten . Hallo, was wir tun können, wir können die Zip-Funktion verwenden und wir werden
kein Listenverständnis schreiben. Wenn wir also die ZIP schreiben, nehmen
wir die Erkennungen
von drei auf sieben. Und das zweite Argument hier geben
wir die Breite, die Höhe, die Breite
und die Höhe an. Und hier sagen wir Für a, b in dieser Zip-Funktion nehmen
wir die
Multiplikation dieser beiden Elemente. Hier. Die erste Koordinate ist das x der oberen linken Ecke
des Begrenzungsrahmens. Wir multiplizieren es mit der Breite. Dann haben wir das y. Wir
multiplizieren es mit der Höhe. Und dann haben wir das
x unten, rechts mal die Breite. Und dann die Y-Koordinaten
unten, rechts mal die Höhe. Also brauchen wir das nicht mehr. Und wir müssen
unsere Liste auch in ein Tupel umwandeln. Jetzt können wir die Rechtecke zeichnen, also sagen wir c
v2 Punktrechteck. Hier. Lass mich Bild sagen. Für die Koordinaten
des Rechtecks verwenden
wir den Begrenzungsrahmen. Nehmen
wir als Ausgangspunkt die ersten beiden Elemente aus der Begrenzungsbox. Dann werden wir hier
die letzten beiden Elemente sagen. Der Grund für
den Aufruf zur Dicke. Lassen Sie uns nun
die Cluster-ID
des erkannten Objekts extrahieren und die Klassenbezeichnung
abrufen. Also können wir in Ordnung sein,
Klassen-ID ist gleich und hier die Cluster-ID. Wir können so darauf zugreifen. Für den Klassennamen können
wir hier das Label schreiben. Die Bezeichnung, die der
Textpunkt ist, den wir in das Bild einfügen werden, das wir
schreiben werden, entspricht einer f-Zeichenfolge. Das erste Element. Wir nehmen das Klassenlabel. Wir haben also unsere Klassennamen. Und unsere Klassennamen sind eine Liste. Es beginnt bei 0. Wir müssen also
einen von der Cluster-ID subtrahieren. Also schreiben wir die Zulassungs-ID
und subtrahieren eine. Jetzt können wir auch hören, wie
die Wahrscheinlichkeit zusammen
mit den Klassenbeschriftungen angezeigt wird . Also sagen wir
Wahrscheinlichkeit mal 100. Und schließlich können wir
unseren Text auf das Bild zeichnen. Wir werden also sagen, dass Lebenslauf angenommen werden
soll, Text hier einfügen, Bild. Hier für den Text haben
wir das
Etikett für den Ursprung. Wir können unsere Boxen benutzen. Also 0 hier und die Box eins. Aber hier fügen wir einige Pixel , um sicherzustellen, dass sich der Text innerhalb des Begrenzungsrahmens
befindet. Fügen wir 15 Pixel hinzu. Jetzt können
wir für die Schrift die Schrift verwenden. Sucht einfach nach der Haut, sagen
wir 0,5 grüne Farbe. Und zwei, für die Dicke. Ich denke, wir sind fertig, damit
wir unser Bild zeigen können. Also sagen wir V2 Punkt IM zeige
Bild und Bild. Und CB2-Punktgewicht 0. Lass uns unseren Code ausführen. Und hier wird der
Begrenzungsrahmen nicht angezeigt. Hier müssen wir
die letzten beiden Elemente
in der Begrenzungsbox nehmen . Wenn wir das noch einmal ausführen, wurde die Person hier,
wie Sie sehen können , erkannt, aber hier ist der Text
etwas komisch. Wir können uns ändern. Die Schrift wird sagen,
Frauen sagen hier. Auf Tertiär sieht es einfach aus. Wie Sie sehen können, wurde
die Person hier korrekt
erkannt. Und hier haben wir das
Vertrauen, das bei 78% liegt
4. Objekterkennung in Videos: Fahren wir nun mit
dem nächsten Schritt fort, nämlich
Objekte in einem Video zu erkennen. Also hier müssen wir zuerst die Videoaufnahme
initialisieren. Wir werden schreiben, dass v d u gleich CV ist , um die Videoaufnahme zu übernehmen. Und hier habe ich ein Video
, das ich in diesem Beispiel
verwenden werde . Also werden wir hier schreiben, sagen
wir wiederholen einen Punkt mp4. Jetzt
bleibt hier alles beim Alten. Aber zweitens kann es eine Liste
zufälliger Farben erstellen , um jede Klasse
darzustellen. Also können wir jetzt hier schreiben. Zuerst
müssen wir numpy importieren. Und hier
brauchen wir diese beiden Pakete eigentlich nicht. Also hier werden wir einen zufälligen Seed ohne
Pi-Punkt für T2 und T4 schreiben . Die Farben werden wir sagen,
nicht pi, nicht um sie herum. der Nähe. Für den niedrigen Wert sagen
wir 0 und für
den hohen Wert 255. Es werden also Werte
zwischen diesen beiden Werten generiert. Die Größe, die wir verwenden werden, ist die
Länge unserer Klassennamen. Und hier werden wir drei sagen
, um die RGB-Farben zu erzeugen. Als nächstes können wir mit
der Verarbeitung unserer Forams beginnen. Also zwar wahr. Und hier werden wir ein Up-Frames
machen. Also werden wir hier sagen, warum das stimmt. Wenn der Becher und wenn wir
das in die ganze Schleife legen. Hier haben wir uns vorgenommen, um die
Höhe unserer Rahmen zu ermitteln. Also für ihn, nicht geformt 0. Und auch die Breite und die Haare, alles bleibt beim Alten. Wir werden also Frame sagen hören. Das einzige, was wir tun
wollen, ist das Farbforum zu bekommen,
die aktuelle Erkennung. Wir werden also sagen,
dass Farben gleich unseren sind. Und hier müssen wir
die ID der Entdeckung angeben. Also können wir diese Linie
vor den Parkplatz stellen. Und hier können wir Klasse sagen. Jetzt müssen wir die
Farbe in eine Ganzzahl umwandeln. Wir werden also sagen, dass r gleich
der Ganzzahl der Farbe ist ,
der ersten Farbe. Das Gleiche gilt für die BGF. Und die Kopfzeile, wir können unsere benutzerdefinierte Farbe
verwenden. Wir sagen B, G und R. Und hier der
Name und Rahmen. Und hier müssen wir einen für
eine Millisekunde für das
Gewicht k verwenden , sonst wird
unser Rahmen eingefroren. Also können wir jetzt unseren Code ausführen. Also los geht's. Unser Auto wurde auf dem Video
erfolgreich erkannt. Jetzt können Sie verschiedene
Videos verwenden, um zu sehen, ob dies Dies wird gut funktionieren. Aber ich hoffe, dass Sie auf die
Idee der Objekterkennung kommen.