Ich habe OpenCV auf Raspberry für verschiedene Projekte verwendet (Gesichtserkennung, Synchronisierungskamera, Stitcher usw.). Ich habe einen Himbeer-Pi 2 gekauft, um die Vorteile der neuen Hardwarekonfiguration zu nutzen.
Ich konnte die 4 Kerne jedoch nicht für die Verarbeitung verwenden, zum Beispiel zum Zusammenfügen von Bildern. Wenn ich 3 Bilder zusammennehme, ergibt der Lastmesser in X 25% der Last (1 Kern). Wenn ich zwei Stitching-Skripte mit 2 Paaren von 2 Bildern starte, ist die CPU immer noch zu 25% belastet.
Ist es möglich, OpenCV zu verwenden und die Anweisungen auf jedem Kern auszuführen, oder müssen die OpenCV-Kernfunktionen geändert werden? Könnte es möglich sein, zum Beispiel mit Python die Bibliotheken zu verwenden, die Multiprocessing auf mehreren Himbeeren, aber auf den verschiedenen Kernen von Raspberry Pi 2 ermöglichen?
htop
) überprüfen , ob das System wirklich nicht das Beste aus den Dingen herausholt.Antworten:
Sie sollten die Multiprozessor- Bibliothek überprüfen . Wenn Sie Teile Ihres Programms haben, die Sie parallel ausführen können, z. B. das Verarbeiten mehrerer Bilder und das Erkennen von Gesichtern, können Sie einfach einen Prozess definieren
Pool
. Standardmäßig startet ein Pool so viele Prozesse gleichzeitig, wie Sie über Prozessoren verfügen. Sie können auch die Poolgröße definieren und auf 4 festlegen.z.B:
Sie sollten auch Kasse sherlock , eine Sammlung von Beispiel dafür, wie Multiprocessing und opencv zu kombinieren.
Einschränkungen:
Die Algorithmen in OpenCV selbst lassen sich nicht einfach in mehreren Prozessen ausführen. Da OpenCV in C ++ geschrieben ist, hängt ihre Ausführung stark von ihrer Implementierung ab.
quelle
Wenn Sie die OpenCV-Bibliothek mit der
OpenMP
in der cmake-Datei aktiven Option kompilieren (diese ist standardmäßig deaktiviert), verwenden viele Algorithmen automatisch mehrere Kerne, ohne dass Sie Änderungen an Ihrem Quellcode vornehmen müssen. In meinem Fall konnte ich eine bis zu 4,5-fache Leistungssteigerung erzielen. Ja, der Raspberry Pi 2 hat nur 4 Kerne, aber wenn Sie stark mit Zahlen arbeiten, kann eine gute Aufteilung der Aufgaben die Wartezeiten erheblich verkürzen. Erwarten Sie für kürzere Algorithmen nicht viel mehr als eine dreifache Beschleunigung.Seien Sie vorsichtig, beim Kompilieren der OpenMP-Bibliotheken gibt es einen Fehler im libpng-Paket. Wenn das
make
mit einem Fehler angehalten wird, weillibpng
es nicht gefunden werden kannzlib
, kann eine schnelle und schmutzige Lösung darin bestehen, dass Sie einfach die Quelle von zlib in den libpng-Quellordner kopieren (oder deaktivierenlibpng
, wenn Sie sie nicht benötigen).quelle