Rode Lichter Detecteren op PLCnext met OpenCV en Python
OpenCV is een van de meest gebruikte Computer Vision-bibliotheken. OpenCV kan gebruikt worden voor gezichtsherkenning, objecttracking, barcodes scannen en belangrijker voor deze blog: detecteren of een licht aan of uit staat. In deze blog help ik u aan de slag met OpenCV en Python op PLCnext en presenteer een kleine codevoorbeeld over hoe u uw afbeeldingen kunt vooraf verwerken voor rode lichtdetectie. Deze blog is een alternatieve manier van OpenCV op een PLCnext-controller te gebruiken zoals uitgelegd in eerdere blogposts.
Vereisten
Vandaag gebruik ik de AXC F 2152-controller, maar het is mogelijk om dezelfde procedure te volgen op de AXC F 1152 en een zeer vergelijkbare procedure op de AXC F 3152 en RFC 4072s. De enige vereiste voor vandaag is dat Balena-Engine geïnstalleerd is op de controller die u gebruikt. De stappen voor een succesvolle installatie van Balena-Engine vindt u op de PLCnext GitHub-pagina. Het wordt geadviseerd om een 8GB SD-kaart te gebruiken. We zullen een SSH-verbinding en WinSCP gebruiken om toegang te krijgen tot de controller. Het gebruik van deze tools valt buiten de scope van deze blogpost. U vindt een goede gids over hoe u ze kunt gebruiken in dit forum of met een snelle Google-zoekopdracht.
De OpenCV-Python Image Downloaden
Start een SSH-sessie naar de controller en log in als root-gebruiker na de installatie van balena-engine. Voer het volgende commando uit en pak een kopje koffie, het duurt even voordat de image op de controller is gedownload.
balena-engine pull pxcbe/opencv-python
De Installatie Valideren
In deze stap valideren we de image en krijgen we de OpenCV-versie die in de image geïnstalleerd is. Voer het volgende commando uit. Als alles goed gaat, print de container de OpenCV-versie en verwijdert de container zichzelf. Op het moment van schrijven is de geïnstalleerde versie: 4.1.0
balena-engine run -it --rm \
pxcbe/opencv-python \
python -c "import cv2; print(cv2.__version__)"
Werkmap Instellen
Open WinSCP en maak een map opencv in de directory /opt/plcnext. Uw pad zou dus /opt/plcnext/opencv moeten zijn. Download de inhoud van deze repository en kopieer en plak ze in de directory die we net hebben aangemaakt.
U kunt de .jpg wijzigen met uw eigen afbeelding en de app.py aanpassen aan uw behoeften.
Het Script Testen
Nu zullen we het script testen dat u van de GitHub-pagina heeft gedownload en de container interactief draaien. Voer het volgende commando uit als root:
balena-engine run -it --rm -v /opt/plcnext/opencv/:/opencv_app pxcbe/opencv-python /bin/bash
U bent nu in een shell-sessie binnen de container, ga naar de opencv_app-map met
cd opencv_app
En start het script met:
python app.py
U zou enige output in de shell moeten zien en 3 nieuwe afbeeldingen in de map /opt/plcnext/opencv. Misschien moet u uw WinSCP-map eerst vernieuwen om ze te kunnen zien!
Wat hebben we gedaan?
Voordat we kunnen gaan ontdekken of ons licht aan of uit staat, moeten we enige preprocessing doen op de initiële afbeelding, in dit geval "open_cv.jpg". Het eerste wat u meestal doet is de afbeelding herschalen om rekenkracht te besparen. Dit gebeurt op regel 12 (van app.py) met het cv2.resize commando. De output ziet er hetzelfde uit als de originele, maar is slechts 50% van de initiële afbeelding.
De volgende stap is de afbeelding grijswaarden maken. We maken de afbeelding grijs met de functie op regel 17, het resultaat is te zien op de onderstaande afbeelding.
De laatste stap in onze preprocessing-pipeline is de afbeelding te drempelen, elke pixel onder een bepaalde waarde wordt zwart, alles boven dezelfde waarde wordt wit. Er zijn verschillende manieren om een afbeelding te drempelen, sommige geven een veel beter resultaat. Maar voor vandaag volstaat regel 21 cv2.threshold. Het resultaat is te vinden in de volgende afbeelding. We hebben nu een kleine afbeeldingsgrootte met alleen zwarte en witte pixels. Een eenvoudige methode om te detecteren of een licht aanstaat vanaf een stationaire camera zou zijn om een Region Of Interest (ROI) te definiëren en te scannen op witte pixels. Echter, complexere algoritmes zullen u een beter resultaat geven. Ik heb enkele andere blogs die dit onderwerp behandelen onder "Lees Verder" gelinkt.
Lees Verder
https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html
https://docs.opencv.org/master/dd/d43/tutorial_py_video_display.html
Accepteer marketing-cookies om deze video te bekijken.
Accepteer marketing-cookies om deze video te bekijken.
Nog een beetje onzeker over containers? U vindt misschien deze blogs interessant:
Node-RED en aan de slag met Docker
Node-RED met Docker tips en best practices
Disclaimer
Dit is één manier om met OpenCV op de PLCnext-controller te werken. In deze blog leert u hoe u OpenCV C++ kunt cross-compileren voor een PLCnext-doel. Hoewel het misschien ingewikkelder lijkt, heeft het zeker zijn waarde voor productiesystemen. Zorg ervoor dat u uw eigen due diligence doet voordat u besluit wat de beste manier voor uw project is.
De image krijgt geen reguliere updates. Als u geïnteresseerd bent in het uitbreiden of onderhouden van dit project, neem dan contact op met axsupport@phoenixcontact.be.
Ik heb bewust weggelaten hoe u de container oneindig kunt laten draaien, aangezien dit veel zal verschillen met uw toepassing. Zoek zelf een geschikte manier of bespreek dit met de betrokkenen in uw project.
Credits
Het werk voor de container is zwaar gebaseerd op het werk van mohaseeb.
Industriële technologie
- Real-time Gezichtsherkenning op Raspberry Pi – Complete Gids
- Geautomatiseerde Visuele Object-tracking met Raspberry Pi en OpenCV
- LED Strip Accessoires Meesteren: Verbinden, Besturen en Uw Verlichting Aanpassen
- Mastercam Eenheid 7: Afbeeldingsbeheer en Werkpadcreatie
- Python REST-bibliotheek voor Toegang tot PLCnext AXC F 2152 Variabelen
- Real-time PLCnext-monitoring met Tableau-dashboards
- Power BI-dashboards maken vanuit PLCnext-clouddata
- Real-time Grafana-dashboards maken voor PLCnext Control in Azure IoT Hub
- Java 9-apps optimaliseren op PLCnext Control met Jlink
- Nieuwe dual-chip detector realiseert ultra-snelle meting van kwantumlicht
- Python Operators onder de knie krijgen: Een uitgebreide gids