Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.
Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!
1. YOLO auf dem Raspberry Pi ausführen
YOLO (You Only Look Once) ist ein revolutionärer Objekterkennungsalgorithmus, der sich durch seine Geschwindigkeit und Genauigkeit auszeichnet. Er transformiert die Objekterkennung in ein Regressionsproblem, bei dem alle Objektkategorien und -positionen in einem Bild durch einen einzigen Durchlauf eines neuronalen Netzes vorhergesagt werden.
Stellen Sie sich ein Bildverarbeitungssystem vor, das „alles auf einen Blick erfasst“. Ob in der Videoüberwachung, im autonomen Fahren oder bei der industriellen Qualitätskontrolle – überall dort, wo Echtzeit-Objekterkennung benötigt wird, ist YOLO im Einsatz.
Abbildung: YOLOv8n in Echtzeit auf dem Raspberry Pi. Objekte im Kamerabild werden präzise erkannt und annotiert, wobei die erkannten Klassen und Konfidenzwerte auf der linken Seite angezeigt werden. Dieses Bild zeigt, wie das Modell erfolgreich Objekte wie eine Person, einen Stuhl und einen Fernseher identifiziert.
Kernprinzipien
Im Gegensatz zu älteren zweistufigen Methoden (wie R-CNN), die „zuerst Kandidatenregionen finden und diese dann identifizieren“, verfolgt YOLO einen grundlegend anderen Ansatz:
Einheitliches Framework: Unterteilt das Bild in ein Raster (z. B. das ursprüngliche 7x7-Raster).
Rasterbasierte Vorhersage: Jede Rasterzelle ist für die Vorhersage von Objekten verantwortlich, deren Mittelpunkt in diese Zelle fällt. Jede Zelle sagt mehrere Begrenzungsrahmen (einschließlich Position und Größe) zusammen mit ihren Konfidenzwerten voraus und sagt auch die Wahrscheinlichkeiten der Objektklassen voraus.
Ein-Stufen-Verarbeitung: Klassifizierung und Lokalisierung werden gleichzeitig innerhalb desselben neuronalen Netzes durchgeführt, was wirklich „You Only Look Once“ ermöglicht und daher in der Geschwindigkeit früheren Methoden deutlich überlegen ist.
Ausführen des Codes
cd ~/ai-lab-kit/yolo
python3 yolo_test.py
Der Code lädt automatisch ein Modell (ca. 6 MB) herunter und führt es auf der Kamera aus. Die Ergebnisse werden in einem Fenster mit dem Titel „YOLOv8“ angezeigt.
(Beim ersten Start wird automatisch ein etwa 6 MB großes Modell heruntergeladen):
#!/usr/bin/env python3
import cv2
from picamera2 import Picamera2
from ultralytics import YOLO
model = YOLO("yolov8n.pt") # nano-Modell
# Kamera initialisieren
picam2 = Picamera2()
picam2.preview_configuration.main.size = (640, 480)
picam2.preview_configuration.main.format = "RGB888"
picam2.configure("preview")
picam2.start()
print("YOLO gestartet, drücken Sie 'q' zum Beenden...")
try:
while True:
# Einzelbild erfassen
frame = picam2.capture_array()
# YOLO ausführen und imgsz=320 setzen
results = model(frame, imgsz=320)
# Ergebnisse zeichnen
annotated = results[0].plot()
# Ergebnisse anzeigen
cv2.imshow("YOLO auf dem Raspberry Pi", annotated)
# 'q' zum Beenden drücken
if cv2.waitKey(1) & 0xFF == ord('q'):
break
finally:
cv2.destroyAllWindows()
picam2.stop()
print("Beendet")
Fehlerbehebung
F: Fehler aufgrund einer Größenänderung von Numpy.dtype
Die Numpy-Version zurücksetzen:
# Wenn Version 2.x, auf 1.x zurücksetzen
pip3 install "numpy<2.0" --break-system-packages --force-reinstall
F: Fehler wegen fehlender libopenblas.so.0
Die OpenBLAS-Bibliothek installieren:
sudo apt install libopenblas-dev
F: Kamera kann nicht geöffnet werden
Kameraverbindung prüfen und sicherstellen, dass sie aktiviert ist:
sudo raspi-config
# Interface Options -> Camera -> Enable auswählen
F: Fehler aufgrund von Speichermangel
Auslagerungsspeicher (Swap) vergrößern:
sudo dphys-swapfile swapoff
sudo nano /etc/dphys-swapfile
# CONF_SWAPSIZE=2048 ändern
sudo dphys-swapfile setup
sudo dphys-swapfile swapon
Methoden zur Leistungsoptimierung
Der Betrieb von YOLO auf einem Raspberry Pi (selbst 4B/5) kann anspruchsvoll sein. Hier sind mehrere bewährte Optimierungsmethoden:
YOLO-Inferenzauflösung anpassen: Der obige Code verwendet bereits imgsz=320, was eine ausgewogene Einstellung ist. Anpassbare Werte:
imgsz=224- Niedrigste Auflösung, höchste Geschwindigkeitimgsz=320- Standardeinstellungimgsz=416- Höhere Genauigkeit, langsamere Geschwindigkeitimgsz=640- Höchste Genauigkeit, sehr langsam auf dem Raspberry Pi
Das richtige Modell wählen:
yolov8n.pt(6 MB) - Am schnellsten, geeignet für Echtzeiterkennungyolov8s.pt(22 MB) - Etwas langsamer, aber genaueryolov8m.pt(49 MB) - Langsamer, höhere Genauigkeityolov8l/x.pt- Auf dem Raspberry Pi in der Regel nicht nutzbarSie können auch Ihr eigenes trainiertes Modell verwenden, z. B.
"/home/pi/my_model.pt". Wie Sie eigene Modelle trainieren, wird in späteren Kapiteln behandelt.
Erkennungsklassen einschränken: Wenn nur bestimmte Objekte erkannt werden sollen (z. B. nur Personen), ändern Sie den Code:
results = model(frame, classes=[0], imgsz=320) # 0 ist die Klassen-ID für Person
Häufige Klassen-IDs:
0 - Person
1 - Fahrrad
2 - Auto
3 - Motorrad
5 - Bus
7 - Lastwagen
Leichte Modellvarianten verwenden:
# Verwenden einer beschnittenen Version von YOLOv8n (falls verfügbar)
model = YOLO("yolov8n.pt")
# Oder TensorRT-Beschleunigung verwenden (erfordert zusätzliche Konfiguration)
# model = YOLO("yolov8n.pt")
# model.export(format="engine") # Als TensorRT-Engine exportieren
Bildverarbeitungsrate reduzieren: Wenn keine Echtzeitanzeige aller Einzelbilder benötigt wird, verarbeiten Sie die Bilder intermittierend:
frame_count = 0
while True:
frame = picam2.capture_array()
# Jedes 3. Bild verarbeiten
if frame_count % 3 == 0:
results = model(frame, imgsz=320)
annotated = results[0].plot()
cv2.imshow("YOLO auf dem Raspberry Pi", annotated)
frame_count += 1
if cv2.waitKey(1) & 0xFF == ord('q'):
break
Multithreading verwenden: Kameraerfassung und YOLO-Inferenz in verschiedene Threads aufteilen:
import threading
import queue
frame_queue = queue.Queue(maxsize=2)
result_queue = queue.Queue(maxsize=2)
def capture_frames():
while True:
frame = picam2.capture_array()
if frame_queue.full():
frame_queue.get()
frame_queue.put(frame)
def process_frames():
while True:
frame = frame_queue.get()
results = model(frame, imgsz=320)
annotated = results[0].plot()
if result_queue.full():
result_queue.get()
result_queue.put(annotated)
# Threads starten
threading.Thread(target=capture_frames, daemon=True).start()
threading.Thread(target=process_frames, daemon=True).start()
while True:
if not result_queue.empty():
cv2.imshow("YOLO auf dem Raspberry Pi", result_queue.get())
if cv2.waitKey(1) & 0xFF == ord('q'):
break
Fortgeschrittene Anwendung
Verwendung von Videodateien als Eingabe
import cv2
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("input_video.mp4")
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
results = model(frame, imgsz=320)
annotated = results[0].plot()
cv2.imshow("YOLO-Erkennung", annotated)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Zusammenfassung
Durch dieses Tutorial haben Sie gelernt:
Wie Sie die YOLO-Umgebung auf dem Raspberry Pi einrichten
Wie Sie eine Echtzeit-Objekterkennung mit der Kamera durchführen
Wie Sie häufige Installations- und Laufzeitprobleme beheben
Verschiedene Methoden zur Optimierung der Erkennungsleistung
Die Stärke von YOLO liegt in seiner Einfachheit und Effizienz, die eine respektable Objekterkennungsleistung selbst auf eingebetteten Geräten wie dem Raspberry Pi ermöglicht. Wenn Sie weiter experimentieren, können Sie verschiedene interessante Anwendungen wie intelligente Überwachung, Objektverfolgung und Personenzählung entwickeln.