OpenCV – Python,PLCnext 上的红灯检测
Open CV 是最常用的计算机视觉库之一。 Open CV 可用于人脸识别、对象跟踪、扫描条码等,对本博客来说更重要的是,检测灯是开还是关。在这篇博客中,我将帮助您在 PLCnext 上开始使用 Open CV 和 Python,并提供一个关于如何预处理图像以进行红光检测的小代码示例。本博客是在之前的博客文章中解释的 PLCnext 控制器上使用 Open-CV 的另一种方式。
先决条件
今天我使用的是 AXC F 2152 控制器,但可以在 AXC F 1152 上遵循相同的程序,在 AXC F 3152 和 RFC 4072s 上遵循非常相似的程序。今天唯一的先决条件是在您使用的控制器上安装 Balena-Engine。可以在 PLCnext Github 页面上找到成功安装 Balena-Engine 的步骤。建议使用 8gb SD 卡。我们将使用 SSH 连接和 WinSCP 来访问控制器。这些工具的使用超出了本博文的范围。您可以在此论坛中或通过 Google 快速搜索找到有关如何使用它们的良好指南。
下载 OpenCV-Python 镜像
安装 balena-engine 后,启动与控制器的 SSH 会话并以 root 用户身份再次登录。
执行以下命令,喝杯咖啡,图像下载到控制器需要一段时间。
balena-engine pull pxcbe/opencv-python
验证安装
在这一步中,我们将验证映像并在映像中安装 Open-CV 版本。执行下一个命令。
如果一切顺利,容器将打印 Open-CV 版本,容器将自行移除。
在撰写本文时,安装的版本是:4.1.0
balena-engine run -it --rm \
pxcbe/opencv-python \
python -c "import cv2; print(cv2.__version__)"
设置工作目录
打开 WinSCP 并在目录 /opt/plcnext 中创建一个文件夹 opencv。因此,您的路径应该是 /opt/plcnext/opencv。
下载此存储库的内容并将它们复制粘贴到我们刚刚创建的目录中。
您可以使用自己的图片更改 .jpg 并修改 app.py 以满足您的需求。
测试脚本
现在我们将测试您从 GitHub 页面下载的脚本并以交互方式运行容器。以root身份执行下一条命令:
balena-engine run -it --rm -v /opt/plcnext/opencv/:/opencv_app pxcbe/opencv-python /bin/bash
你现在在容器内的一个 shell 会话中,调用 opencv_app 目录
cd opencv_app
并启动脚本:
python app.py
您应该在 shell 中看到一些输出,并在文件夹 /opt/plcnext/opencv 中看到 3 个新图像。您可能需要先刷新您的 winSCP 文件夹才能看到它们!
那么我们做了什么?
在我们开始确定我们的灯是开还是关之前,我们需要对初始图像“open_cv.jpg”进行一些预处理。您通常会做的第一件事是重新缩放图像以保留一些计算能力。这是在第 12 行完成的(app.py 的) cv2.resize 的文件 命令。输出看起来与原始图像相同,但只有初始图像的 50%。

下一步是对图像进行灰度化。我们用第17行的函数对图像进行灰度化,结果如下图所示。

我们预处理管道的最后一步是对图像进行阈值处理,低于某个值的每个像素都是黑色的,高于相同值的所有像素都是白色的。有一些不同的方法来划分图像,有些会给出更好的结果。但是今天第 21 行 cv2.threshold 就足够了。结果如下图所示。我们现在有一个只有黑白像素的小图像尺寸。一个简单的方法来检测是否有来自固定相机的光是定义感兴趣区域 (ROI) 并扫描白色像素。然而,更复杂的算法会给你一个更好的结果。我在进一步阅读下链接了一些其他处理该主题的博客。

进一步阅读
https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html https://docs.opencv.org/master/dd/d43/tutorial_py_video_display.htmlhttps://medium.com/@kenan.r.alkiek/https-medium-com-kenan-r-alkiek-traffic-light-recognition-505d6ab913b1
请接受营销 cookie 以观看此视频。
请接受营销 cookie 以观看此视频。
还是有点不确定容器?
您可能会发现这些博客很有趣:
免责声明
这是在 PLCnext 控制器上使用 open-cv 的一种方法。在本博客中,您将了解如何为 PLCnext 目标交叉编译 open-cv c++。
不管它看起来更麻烦,它肯定对生产系统有价值。在决定哪种方式最适合您的项目之前,请务必进行尽职调查。
图像不会得到定期更新。如果您有兴趣扩展或维护此项目,请联系 [email protected]
我故意省略了如何无限期地运行容器,因为这与您的应用程序有很大不同。
请自行寻找合适的方式或与参与您项目的人员讨论。
学分
容器的工作很大程度上基于 mohaseeb 的工作
工业技术