使用 OpenCV 和 Python 在 PLCnext 上检测红灯
OpenCV 是最常用的计算机视觉库之一。可用于人脸识别、物体追踪、条码扫描,对本博客更重要的是检测指示灯亮灭。本博客帮助您在 PLCnext 上开始使用 OpenCV 和 Python,并展示红灯检测图像预处理的小代码示例。这是早期博客文章中解释的在 PLCnext 控制器上使用 OpenCV 的替代方式。
先决条件
今天用 AXC F 2152 控制器,但同过程适用 AXC F 1152,AXC F 3152 和 RFC 4072s 过程类似。唯一前提是控制器安装了 Balena-Engine。Balena-Engine 成功安装步骤见 PLCnext Github 页面。建议用 8GB SD 卡。我们用 SSH 连接和 WinSCP 访问控制器。这些工具用法超出本博客范围。论坛或快速搜索可找到好指南。
下载 OpenCV-Python 镜像
安装 balena-engine 后启动 SSH 会话以 root 登录。
执行下一命令喝杯咖啡,镜像下载到控制器需一会。
balena-engine pull pxcbe/opencv-python
验证安装
此步验证镜像并获取镜像中安装的 OpenCV 版本。执行下一命令。
若一切顺利,容器打印 OpenCV 版本并自动移除。
撰写时安装版本为: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” 做预处理。通常第一步是缩放图片保留算力。app.py 第 12 行用 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.html
https://medium.com/@kenan.r.alkiek/https-medium-com-kenan-r-alkiek-traffic-light-recognition-505d6ab913b1
请接受营销 cookies观看此视频。
请接受营销 cookies观看此视频。
对容器仍不确定?
这些博客可能有趣:
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
免责声明
这是在 PLCnext 控制器上使用 OpenCV 的一种方式。在此博客可学习如何为 PLCnext 目标交叉编译 OpenCV C++。虽显繁琐,但对生产系统确有价值。决定项目前请尽职调查。
镜像不定期更新。若有兴趣扩展或维护此项目请联系 axsupport@phoenixcontact.be
我刻意未说明如何无限期运行容器,因这随应用差异大。
请自行找合适方式或与项目相关人员讨论。
致谢
容器工作大量基于 mohaseeb 的工作
工业技术
- 树莓派实时人脸识别全流程指南:从硬件到模型训练
- 树莓派 OpenCV 自动视觉跟踪:云台舵机实时锁定彩色目标
- LED灯带配件大全:连接、控制与定制化布线
- Mastercam 单元 7:图像管理与刀路创建完整指南
- 用于访问 PLCnext AXC F 2152 变量的 Python REST 库
- PLCnext 集群管理:利用 Kubernetes 赋能工业自动化
- 基于 Tableau 打造 PLCnext 实时监控仪表板
- 从 PLCnext 云数据创建 Power BI 仪表板
- 在 Azure IoT Hub 中为 PLCnext Control 构建实时 Grafana 仪表板
- 利用 Jlink 优化 PLCnext Control 上的 Java 9+ 应用
- 新型双芯片探测器实现量子光超快测量
- 精通Python运算符:全面指南