Mendeteksi Lampu Merah di PLCnext dengan OpenCV dan Python
Open CV adalah salah satu pustaka Computer Vision yang paling banyak digunakan. Open CV dapat digunakan untuk pengenalan wajah, pelacakan objek, pemindaian kode batang dan yang lebih penting untuk blog ini, mendeteksi apakah lampu menyala atau mati. Dalam blog ini saya akan membantu Anda memulai dengan Open CV dan Python di PLCnext dan menyajikan contoh kode kecil tentang cara memproses gambar Anda untuk deteksi lampu merah. Blog ini adalah cara alternatif menggunakan Open-CV pada controller PLCnext yang dijelaskan dalam posting blog sebelumnya.
Prasyarat
Hari ini saya menggunakan Controller AXC F 2152 tetapi memungkinkan untuk mengikuti prosedur yang sama pada AXC F 1152 dan prosedur yang sangat mirip pada AXC F 3152 dan RFC 4072s. Prasyarat satu-satunya untuk hari ini adalah menginstal Balena-Engine pada controller yang Anda gunakan. Langkah-langkah untuk instalasi Balena-Engine yang berhasil dapat ditemukan di halaman PLCnext Github. Direkomendasikan untuk menggunakan kartu SD 8gb. Kami akan menggunakan koneksi SSH dan WinSCP untuk mengakses controller. Penggunaan alat-alat ini di luar lingkup posting blog ini. Anda akan menemukan panduan yang baik tentang cara menggunakannya di forum ini atau dengan pencarian cepat di Google.
Unduh Image OpenCV-Python
Mulai sesi SSH ke controller dan masuk sebagai root user lagi setelah instalasi balena-engine.
Jalankan perintah berikut dan ambil secangkir kopi, akan sedikit waktu sebelum image diunduh ke controller.
balena-engine pull pxcbe/opencv-python
Validasi Instalasi
Di langkah ini kita akan memvalidasi image dan mendapatkan versi Open-CV yang terinstal di dalam image. Jalankan perintah berikut.
Jika semuanya berjalan dengan baik, kontainer akan mencetak versi Open-CV dan kontainer akan menghapus dirinya sendiri.
Pada saat penulisan versi yang terinstal adalah: 4.1.0
balena-engine run -it --rm \ pxcbe/opencv-python \ python -c "import cv2; print(cv2.__version__)"
Siapkan direktori kerja
Buka WinSCP dan buat folder opencv di direktori /opt/plcnext. Jalur Anda seharusnya /opt/plcnext/opencv.
Unduh isi dari repositori ini dan salin tempelkan di dalam direktori yang baru saja kita buat.
Anda dapat mengubah .jpg dengan gambar Anda sendiri dan memodifikasi app.py agar sesuai dengan kebutuhan Anda.
Uji Skrip
Sekarang kita akan menguji skrip yang Anda unduh dari halaman GitHub dan menjalankan kontainer secara interaktif. Jalankan perintah berikut sebagai root:
balena-engine run -it --rm -v /opt/plcnext/opencv/:/opencv_app pxcbe/opencv-python /bin/bash
Anda sekarang berada dalam sesi shell di dalam kontainer, panggil direktori opencv_app dengan
cd opencv_app
Dan mulai skrip dengan:
python app.py
Anda seharusnya melihat beberapa output di shell dan 3 gambar baru di folder /opt/plcnext/opencv. Anda mungkin perlu menyegarkan folder winSCP Anda terlebih dahulu untuk dapat melihatnya!
Jadi apa yang telah kita lakukan?
Sebelum kita bisa pergi dan mulai mencari tahu apakah lampu kita menyala atau mati, kita perlu melakukan beberapa preprosessing pada gambar awal dalam hal ini “open_cv.jpg”. Hal pertama yang biasanya Anda lakukan adalah menskala ulang gambar untuk menjaga daya komputasi. Ini dilakukan di baris 12 (dari file app.py) dengan perintah cv2.resize. Output terlihat sama seperti asli tetapi hanya 50 % dari gambar awal.
Langkah selanjutnya adalah mengubah gambar menjadi grayscale. Kami mengubah gambar menjadi grayscale dengan fungsi yang ditemukan di baris 17, hasilnya dapat dilihat pada gambar di bawah ini.
Langkah terakhir dalam pipeline preprosessing kami adalah melakukan thresholding pada gambar, setiap piksel di bawah nilai tertentu akan menjadi hitam, segala sesuatu di atas nilai yang sama akan menjadi putih. Ada beberapa cara berbeda untuk melakukan thresholding pada gambar, beberapa akan memberikan hasil yang jauh lebih baik. Namun untuk hari ini baris 21 cv2.threshold akan cukup. Hasilnya dapat ditemukan pada gambar berikut. Kami sekarang memiliki ukuran gambar kecil dengan hanya piksel hitam dan putih. Metode sederhana untuk mendeteksi apakah lampu menyala dari kamera statis adalah mendefinisikan Region Of Intrest (ROI) dan memindai piksel putih. Namun algoritma yang lebih rumit akan memberikan hasil yang lebih baik. Saya menautkan beberapa blog lain yang menangani topik ini di bagian baca lebih lanjut.
Baca Lebih Lanjut
https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html https://docs.opencv.org/master/dd/d43/tutorial_py_video_display.html
https://medium.com/@kenan.r.alkiek/https-medium-com-kenan-r-alkiek-traffic-light-recognition-505d6ab913b1
Silakan terima marketing-cookies untuk menonton video ini.
Silakan terima marketing-cookies untuk menonton video ini.
Masih agak ragu tentang kontainer?
Anda mungkin menemukan blog ini menarik:
https://www.plcnext-community.net/en/hn-makers-blog/481-node-red-and-getting-started-with-docker.html https://www.plcnext-community.net/en/hn-makers-blog/482-node-red-with-docker-tips-and-best-practice.html https://www.docker.com/resources/what-container
Disclaimer
Ini adalah satu cara untuk bekerja dengan open-cv pada PLCnext Controller. Dalam blog ini Anda akan belajar cara cross compile open-cv c++ untuk target PLCnext.
Namun mungkin terlihat lebih rumit, ini tentu saja memiliki nilainya untuk sistem produksi. Pastikan untuk melakukan due diligence Anda sebelum memutuskan cara terbaik untuk proyek Anda.
Image ini tidak akan menerima pembaruan teratur. Jika Anda tertarik untuk mengembangkan atau memelihara proyek ini silakan hubungi axsupport@phoenixcontact.be
Saja sengaja saya tidak membahas bagaimana Anda dapat menjalankan kontainer secara tidak terbatas karena ini akan berbeda banyak dengan aplikasi Anda.
Silakan temukan cara yang sesuai sendiri atau diskusikan dengan orang-orang yang terlibat dalam proyek Anda.
Kredit
Pekerjaan untuk kontainer didasarkan besar pada pekerjaan mohaseeb