计算机视觉:识别屏幕截图中的不同项目

数据挖掘 机器学习 分类 图像分类 计算机视觉 javascript
2022-01-20 16:11:24

假设我有这样的屏幕截图:

在此处输入图像描述

我希望能够检测/定位地板上的每个项目,但是,1)图像中可以有任意数量的项目,2)每个项目都是不同的

我有所有可能项目的候选清单。实际上,每一个都被标记并分成单独的图像文件:

在此处输入图像描述

我曾考虑过训练类似卷积网络的东西,但感觉可能会很慢,因为我需要用多个滑动窗口分割每个屏幕截图,并通过网络向前馈送每个屏幕截图。为每个屏幕截图创建这些滑动窗口段可能需要很长时间。我希望快速完成整个检测过程(<1sec)

执行此检测任务的最有效方法是什么?我将使用 Javascript 来实现它

主要问题是:

  1. 项目数量未知。屏幕截图中可能有 0 个项目,也可能有很多
  2. 有很多可能的目标,每一个在形状、颜色和结构上都不同
  3. 对于这类工作,Javascript 并不是最快的语言。这是一个半严格的要求,除非使用 JS 绝对不可能做到这一点。备用语言是 Python
2个回答

这是计算机视觉的一个很好的案例。您确切地知道图标的样子(基本上是像素完美的),并且您想知道它是否存在于屏幕截图中的任何位置。这是一个图像匹配问题。

归一化互相关(NCC) 是检查小图像(您的图标)是否出现在大图像中的任何位置的标准方法:您计算 NCC,然后查找 NCC 值较大的位置;那是你的候选人匹配。您现在可以将其应用于候选图标集:对于每个候选图标,使用 NCC 搜索它是否出现在屏幕截图中的任何位置。OpenCV 和其他计算机视觉库应包括 NCC 计算的规范化实现。II

为了速度,您也可以尝试使用图像金字塔,但请先尝试在完整屏幕截图上直接使用 NCC。

你真的有两个问题:

  1. 对象检测/边界框以定位您要识别的图标。
  2. 每个图标的图像识别。因为您已经标记了训练数据并且它们的大小大致相同,所以与#1相比,这部分应该相对容易。

您需要让#1 工作并将像素的子集传递给#2。