亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 工业技术

使用 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% 大小。

使用 OpenCV 和 Python 在 PLCnext 上检测红灯

下一步灰度化图片。第 17 行函数灰度化,结果见下图。

使用 OpenCV 和 Python 在 PLCnext 上检测红灯

预处理管线最后一步是阈值处理,低于某值像素变黑,高于同值变白。阈值处理有不同方式,效果各异。今天第 21 行 cv2.threshold 足矣。结果见下图。现有仅黑白像素的小尺寸图片。固定摄像头检测指示灯亮灭的简单方法是定义感兴趣区域 (ROI) 扫描白像素。但更复杂算法给出更好结果。延伸阅读链接其他相关博客。

使用 OpenCV 和 Python 在 PLCnext 上检测红灯

延伸阅读

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 的工作


工业技术

  1. 树莓派实时人脸识别全流程指南:从硬件到模型训练
  2. 树莓派 OpenCV 自动视觉跟踪:云台舵机实时锁定彩色目标
  3. LED灯带配件大全:连接、控制与定制化布线
  4. Mastercam 单元 7:图像管理与刀路创建完整指南
  5. 用于访问 PLCnext AXC F 2152 变量的 Python REST 库
  6. PLCnext 集群管理:利用 Kubernetes 赋能工业自动化
  7. 基于 Tableau 打造 PLCnext 实时监控仪表板
  8. 从 PLCnext 云数据创建 Power BI 仪表板
  9. 在 Azure IoT Hub 中为 PLCnext Control 构建实时 Grafana 仪表板
  10. 利用 Jlink 优化 PLCnext Control 上的 Java 9+ 应用
  11. 新型双芯片探测器实现量子光超快测量
  12. 精通Python运算符:全面指南