使用实时视频源监控Python中的模拟量表

时间:2018-05-15 16:04:21

标签: python python-3.x opencv real-time object-detection

我希望有人可以帮我解决这个问题。当一个看起来像this的压力表达到一定的可变压力时,我正试图找出一种使用实时视频输入来运行python 0script的好方法。

我非常有信心这不应该太困难,因为仪表将被安装在图像框架中的固定位置,但我不熟悉这种东西并且真的不知道从哪里开始。< / p>

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

1 个答案:

答案 0 :(得分:0)

这个问题可能比你想象的要困难得多。通常,人们使用OpenCV进行图像处理/模式识别问题。有许多优秀的tutorials for Python available in the documentation

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

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

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

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

编辑:

@jeremy arsenault的评论促使我想到了另一个解决方案。如果您主要关注的是检测针何时超过阈值,您可以查找表盘的前缘。你可以更多地看向表盘的中心,那里没有指示器。

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

thresholded image annular region of interest

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

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

theta0是给出零压力的偏移角度(图示为大约-45度。寻找针头的蛮力方式是从零开始扫描角度并增加直到在x处发现黑色像素, y。然后继续增加直到你在x,y处找到一个白色像素。两个角度的平均值为你提供针的中心,你应该能够计算压力。