Rote Lichter auf PLCnext mit OpenCV und Python erkennen
OpenCV ist eine der meistgenutzten Computer-Vision-Bibliotheken. OpenCV kann für Gesichtserkennung, Objekttracking, Barcode-Scanning und – was für diesen Blog am wichtigsten ist – zum Erkennen, ob ein Licht an oder aus ist, verwendet werden. In diesem Blog helfe ich Ihnen, mit OpenCV und Python auf PLCnext zu starten und präsentiere ein kleines Codebeispiel zur Bildvorverarbeitung für die Rotlicht-Erkennung. Dieser Blog ist ein alternativer Weg, OpenCV auf einem PLCnext-Controller zu nutzen, wie in früheren Blogposts erklärt.
Voraussetzungen
Heute verwende ich den AXC F 2152 Controller, aber es ist möglich, das gleiche Verfahren auf dem AXC F 1152 und einem sehr ähnlichen Verfahren auf dem AXC F 3152 und RFC 4072s zu befolgen. Die einzige Voraussetzung für heute ist, dass Balena-Engine auf dem verwendeten Controller installiert ist. Die Schritte für eine erfolgreiche Installation der Balena-Engine finden Sie auf der PLCnext GitHub-Seite. Es wird empfohlen, eine 8-GB-SD-Karte zu verwenden. Wir werden eine SSH-Verbindung und WinSCP für den Zugriff auf den Controller verwenden. Die Verwendung dieser Tools liegt außerhalb des Rahmens dieses Blogposts. Sie finden eine gute Anleitung zur Verwendung im Forum oder mit einer schnellen Google-Suche.
OpenCV-Python-Image herunterladen
Eine SSH-Sitzung zum Controller starten und nach der Installation der Balena-Engine erneut als Root-Benutzer anmelden.
Führen Sie den folgenden Befehl aus und holen Sie sich einen Kaffee – es dauert eine Weile, bis das Image auf den Controller heruntergeladen ist.
balena-engine pull pxcbe/opencv-python
Installation validieren
In diesem Schritt validieren wir das Image und erhalten die installierte OpenCV-Version. Führen Sie den nächsten Befehl aus.
Wenn alles gut geht, gibt der Container die OpenCV-Version aus und entfernt sich selbst.
Zum Zeitpunkt des Schreibens ist die installierte Version: 4.1.0
balena-engine run -it --rm \
pxcbe/opencv-python \
python -c "import cv2; print(cv2.__version__)"
Arbeitsverzeichnis einrichten
WinSCP öffnen und einen Ordner „opencv“ im Verzeichnis /opt/plcnext erstellen. Ihr Pfad sollte also /opt/plcnext/opencv sein.
Den Inhalt dieses Repositorys herunterladen und in das soeben erstellte Verzeichnis kopieren.
Sie können die .jpg-Datei durch Ihr eigenes Bild ersetzen und die app.py an Ihre Bedürfnisse anpassen.
Skript testen
Jetzt testen wir das von der GitHub-Seite heruntergeladene Skript und führen den Container interaktiv aus. Führen Sie den nächsten Befehl als Root aus:
balena-engine run -it --rm -v /opt/plcnext/opencv/:/opencv_app pxcbe/opencv-python /bin/bash
Sie sind nun in einer Shell-Sitzung innerhalb des Containers. Wechseln Sie in das opencv_app-Verzeichnis mit:
cd opencv_app
Und starten Sie das Skript mit:
python app.py
Sie sollten einige Ausgaben in der Shell sehen und 3 neue Bilder im Ordner /opt/plcnext/opencv. Möglicherweise müssen Sie Ihren WinSCP-Ordner zuerst aktualisieren, um sie zu sehen!
Was haben wir gemacht?
Bevor wir herausfinden können, ob unser Licht an oder aus ist, müssen wir einige Vorverarbeitungsschritte am ursprünglichen Bild durchführen – in diesem Fall „open_cv.jpg“. Das Erste, was man normalerweise tut, ist, das Bild zu skalieren, um Rechenleistung zu sparen. Dies geschieht in Zeile 12 (der app.py-Datei) mit dem Befehl cv2.resize. Die Ausgabe sieht gleich aus wie das Original, ist aber nur 50 % der ursprünglichen Bildgröße.
Der nächste Schritt ist, das Bild in Graustufen umzuwandeln. Wir wandeln das Bild mit der Funktion in Zeile 17 in Graustufen um, das Ergebnis sehen Sie im Bild unten.
Der letzte Schritt in unserer Vorverarbeitungspipeline ist das Thresholding des Bildes: Jeder Pixel unter einem bestimmten Wert wird schwarz, alles darüber weiß. Es gibt verschiedene Wege, ein Bild zu thresholden, manche liefern ein deutlich besseres Ergebnis. Für heute reicht Zeile 21 cv2.threshold aus. Das Ergebnis finden Sie im folgenden Bild. Wir haben nun eine kleine Bildgröße mit nur schwarzen und weißen Pixeln. Eine einfache Methode, um von einer stationären Kamera zu erkennen, ob ein Licht an ist, wäre, einen Region of Interest (ROI) zu definieren und nach weißen Pixeln zu suchen. Komplexere Algorithmen liefern jedoch bessere Ergebnisse. Ich habe einige andere Blogs zu diesem Thema unter „Weiterführende Literatur“ verlinkt.
Weiterführende Literatur
Bitte Marketing-Cookies akzeptieren, um dieses Video anzusehen.
Bitte Marketing-Cookies akzeptieren, um dieses Video anzusehen.
Noch unsicher bezüglich Containern?
Diese Blogs könnten interessant sein:
Haftungsausschluss
Dies ist eine Möglichkeit, mit OpenCV auf dem PLCnext-Controller zu arbeiten. In diesem Blog erfahren Sie, wie Sie OpenCV C++ für ein PLCnext-Ziel cross-kompilieren. Das mag umständlicher erscheinen, hat aber sicher seinen Wert für Produktionssysteme. Führen Sie Ihre Sorgfaltspflicht durch, bevor Sie entscheiden, was der beste Weg für Ihr Projekt ist.
Das Image erhält keine regelmäßigen Updates. Wenn Sie an der Erweiterung oder Wartung dieses Projekts interessiert sind, kontaktieren Sie bitte axsupport@phoenixcontact.be.
Ich habe absichtlich weggelassen, wie man den Container dauerhaft laufen lässt, da dies stark von Ihrer Anwendung abhängt. Finden Sie einen geeigneten Weg selbst oder besprechen Sie dies mit den an Ihrem Projekt Beteiligten.
Credits
Die Arbeit am Container basiert stark auf der Arbeit von mohaseeb.
Industrietechnik
- Python-Operatoren meistern: Umfassender Leitfaden
- Echtzeit-Gesichtserkennung auf Raspberry Pi – Komplette Anleitung
- Automatisiertes vision-basiertes Objekttracking mit Raspberry Pi und OpenCV
- Neuer Dual-Chip-Detektor erreicht ultra-schnelle Messung von Quantenlicht
- LED-Streifen-Zubehör meistern: Verbinden, Steuern und Anpassen Ihrer Beleuchtung
- Mastercam Einheit 7: Bildverwaltung & Werkzeugpfaderstellung
- Echtzeit-Monitoring von PLCnext mit Tableau-Dashboards
- Power BI Dashboards aus PLCnext-Clouddaten erstellen
- Echtzeit-Grafana-Dashboards für PLCnext Control in Azure IoT Hub erstellen
- Java 9 Apps auf PLCnext Control mit Jlink optimieren