gpt4 book ai didi

c# - 如何使用 emgucv/opencv/Aforge.Net/Accord.Net 在 50-100 毫秒内实时检测仪表中的指示灯和状态(ON-OFF、颜色、闪烁)

转载 作者:太空宇宙 更新时间:2023-11-03 23:05:22 25 4
gpt4 key购买 nike

仪表图像检测指标[![仪表图像检测指标][1]][1]

我想实时跟踪仪表上每个指标的当前状态。两个指标可以在不同的时间显示在同一个地方

为了实现速度计指示器检测,我尝试了以下方法,

  1. 背景减法 -在这种方法中,我们在测试前存储了仪表处于关闭状态的基本图像。然后我们在开始测试后捕获每一帧,并从基础图像中减去这一帧。然后我们检查减影图像中的感兴趣区域(指示器位置),如果检测到指示器大小的 Blob ,我们认为指示器开启,否则如果没有检测到 Blob 或小尺寸 Blob ,我们认为指示器关闭。<

上述实现中面临的问题是,当任何其他图形在此区域显示时,或者如果仪表播放任何动画并且该动画穿过指示器区域,则会检测到错误的 Blob 并获得错误的结果。

  1. 打开CV模板匹配方法-首次配置仪表时,用户通过在图像上绘制矩形来添加指标。在此期间,指标的模板图像被存储。在测试执行期间,将在感兴趣的区域(指示器位置)中搜索此模板图像。如果图像与模板图像匹配,我们认为指示器打开,否则我们认为指示器关闭。

上述实现中面临的问题是,在点火状态和点火关闭状态下,很少有指示灯显示不同,然后由于背景不同导致模板图像匹配失败

例如,根据点火状态(分别为点火关闭和点火开启),仪表上的指示器可以以两种方式显示

前雾灯在点火开关开启状态下的图像[![前雾灯在点火开关ON状态下的图像][2]][2]

前雾灯在点火开关关闭状态下的图像
[![点火开关关闭状态下前雾灯开启图][3]][3]

  1. Open CV边缘检测+模板匹配法-为了消除上述方法中的背景问题,我尝试使用精明的边缘检测将图标转换为轮廓,然后尝试匹配模板,但结果仍然不一致。

最佳答案

很高兴向我们展示您的思考过程!

问题:

对于此类形状检测和变化,最大的问题是泛化。指示的形状是一致的(对象),但场景发生变化(背景)。考虑到这种变化量,这种“启发式”方法不会返回好的结果。

解决方案:

您应该对问题实现机器学习方法,详细说明您自己的指标和标签数据集,组织一切并训练您自己的解决方案。

  1. SVM - 支持向量机:不是最通用的方法,但可以生成更轻的模型并且训练起来比较快。您甚至可以使用 Opencv 训练您自己的 SVM。 Application example | Training example

  2. CNN - 卷积神经网络:非常通才且具有一定的抗噪能力,这绝对是我的“首选”方法。训练对象检测模型最简单和最快的方法是使用 Keras。 Application example | Training example

PS:我带来的大部分技术都没有在 C# 中实现(主要是 Python 和 C++),正如问题所要求的那样,但是一旦推理模型(SVM、CNN 等)被训练和生成,更新版本的EmguCV 可以无缝导入和使用它们。

关于c# - 如何使用 emgucv/opencv/Aforge.Net/Accord.Net 在 50-100 毫秒内实时检测仪表中的指示灯和状态(ON-OFF、颜色、闪烁),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57820544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com