我有一个简单的仪表,显示范围从 0 到 4 的模拟值。 这是仪表的图像。不幸的是,没有办法获得该值的模拟或数字信号。
如何读取仪表的值?
我的想法是每 5 分钟制作一张图像,并通过分析获得价值。我正在考虑用不同位置的黑针手动生成参考图像,然后将其与真实图像进行比较。
由于所有处理都应该在没有互联网连接的树莓派上完成,一个好的方法是预先配置的 docker 图像进行图像比较,这有助于在本地进行图像比较,可能由 python 或 php 脚本支持。
如何进行?
我有一个简单的仪表,显示范围从 0 到 4 的模拟值。 这是仪表的图像。不幸的是,没有办法获得该值的模拟或数字信号。
如何读取仪表的值?
我的想法是每 5 分钟制作一张图像,并通过分析获得价值。我正在考虑用不同位置的黑针手动生成参考图像,然后将其与真实图像进行比较。
由于所有处理都应该在没有互联网连接的树莓派上完成,一个好的方法是预先配置的 docker 图像进行图像比较,这有助于在本地进行图像比较,可能由 python 或 php 脚本支持。
如何进行?
这是一个简单的数字图像处理任务。我提出了一个非常有效的解决方案,没有任何纠错机制,所以这不是一种生产质量方法。但作为第一个概念证明,它应该可以解决问题。
最简单的方法是将图像分成两个通道——一个用于红色,一个用于黑色。您可以忽略某个阈值之外的其余部分。如果光线好,这也应该处理背景。
第 1 步:剪掉仪表之外的所有内容,以简化您的生活。最简单的方法就是把相机放在足够近的地方,让它只捕捉到仪表。这样你就不必在你的算法中实现它。
第 2 步:图像的中心将是仪表中间的红点。您可以使用过滤器轻松识别它,该过滤器在图像的红色通道中寻找最大的红色浓度。计算中心并记住坐标。
第 3 步:对黑色通道中最大浓度的黑色执行相同操作。这将是黑针的粗端部分。计算中心并记住坐标。
第 4 步:计算这两个坐标之间的向量。矢量的角度会告诉你针的角度(注意矢量的方向)。一旦你有了针的角度,你就可以很容易地推导出它所指向的数字。
显然有更优雅的方法可以解决这个问题,但是这种快速而肮脏的算法应该可以轻松解决问题。您需要确保相机定位在正确的角度,因为我们没有在我们的算法中实现任何错误校正。您还需要确保照明充足,并且对图像质量没有任何其他重大影响。只要方向稳定且图像质量高,这将使您能够以良好的精度读取量规。