首页 > 解决方案 > 在 Python 中使用实时视频源来监控模拟量规

问题描述

我希望这里有人可以帮助我尝试解决这个问题。当看起来像这样的压力表达到某个可变压力时,我正在尝试找出一种使用实时视频提要运行 python 0script 的好方法。

我很有信心这应该不会太难,因为仪表将安装在图像框架中的固定位置,但对这类东西还是新手,真的不知道从哪里开始。

有什么建议么?提前致谢!

标签: pythonpython-3.xopencvreal-timeobject-detection

解决方案


这个问题可能比你想象的要困难得多。通常,人们使用 OpenCV 来解决图像处理/模式识别问题。文档中有许多优秀的 Python 教程

在它的核心,你的问题是找出针的旋转角度。然后从那里,您可以计算压力是多少。如果幸运的话,可以使用特征检测 + 单应性找到针,然后计算角度。但我怀疑这种图像会导致特征检测。

模板匹配能够找到针,但它对旋转非常敏感,因此您必须生成大量具有不同针角的模板,然后每次需要压力读数时都要遍历所有模板。

使用电子压力表读取压力可能更快、更便宜、更容易。您可以通过多种方式将电子仪表的输出转换为 Python。一些仪表可以连接到网络。有些可以作为串行端口与 RS232/422 或 USB 通信。

如果您能找到带有数字显示的仪表,那么进行某种 OCR/模板匹配以从相机读取显示应该更简单。

编辑:

@jeremy arsenault 的评论促使我想到了另一种解决方案。如果您主要专注于检测指针何时越过阈值,则可以寻找表盘的前缘。你可以多看一下表盘的中心,那里没有指示器。

这种图像确实很容易将阈值转换为黑白。表盘为黑色,背景(至少朝向中心)为白色。在对图像进行一些形态学和阈值处理后,您可以寻找表盘的黑色像素。无需模板匹配。下面的图片说明了一些想法。第一张图片是您的图像阈值为黑白。起始图像非常干净,但如果您从相机中抓取,您可能需要在阈值处理之前进行一些模糊、形态学,以在您不想要它们的地方获得无杂散黑色像素。第二张图片有一个叠加的圆圈,您可以在其中查找黑色像素。您可以找到前沿和后沿和平均值,以获得相当精确的中心值。

阈值图像 感兴趣的环状区域

一些更多的实现细节/伪代码。对于计算机图像,原点通常在左上角,+y 向下。此外,我已经定义了随着压力的增加而增加的角度 theta。圆的参数方程是

x = x0 - r*cos(theta + theta0)
y = y0 - r*sin(theta + theta0)

theta0 是产生零压力的偏移角(如图所示,大约 -45 度。寻找针的蛮力方法是从零开始扫描角度并增加,直到在 x,y 找到黑色像素。然后不断增加,直到在 x,y 找到一个白色像素。两个角度的平均值为您提供针的中心,您应该能够计算压力。


推荐阅读