我可以训练某些东西来检测屏幕上的物体,并根据结果点击适当的位置吗?

时间:2017-01-29 15:13:17

标签: machine-learning computer-vision

我将概述我的请求的具体特征,然后详细说明:

  • 确定与图形等一起出现的特定字符串的屏幕坐标
  • 识别特定对象'在屏幕上,即一个简单的对象,如带文字的矩形或带笑脸的圆圈

一个很好的例子是在线扑克。

    P1---------P2---------P3
  c1 c2      c3 c4      c5 c6
    |                     |
    |    s1 s2 s3 s4 s5   |
    |                     |
  c7 c8      c9 c10    c11 c12
    P4---------P5---------P6

规则:

  • 玩家(P n )1 - 6坐在桌子旁
  • 你不能保证坐在同一个座位上
  • 每位玩家都有2张牌(c n ),当时只有他们可以看到
  • 中心有5张共享(s n )卡

说明

  • 你的名字是' P1'并且算法搜索此字符串以在屏幕上找到您的位置
  • 它知道您附近的卡片并识别它们
  • 它可以统计有多少玩家
  • 可以阅读桌面上的共享卡
  • 它处理信息并点击相应的按钮,即呼叫,提升,折叠

该示例总结了所需的特征,因为我可能无法正确地表达它们。

机器学习可以应用于这个问题吗? 这是我正在讨论的一项特别困难的任务吗? 还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

不,这并不难,只是有点苛刻。 辅助功能API和/或自动化库比完整的机器学习检测更适合您希望完成的任务。 每个现代OS提供至少一个API以到达屏幕的GUI元素。 您甚至可以在GUI生成中使用的OS的DLL / SO / dynlib(例如Windows上的user32.dll)中挖掘并直接获取有关生成的GUI元素的信息。

在涉及图像对象的情况下,只需使用指纹识别/校验和来识别哪一个位于给定位置或GUI元素中。

辅助功能API始终可用。 它们允许您访问屏幕上的元素或特定应用程序的窗口。 自动化工具通常使用它们以及一些直接访问OS。 如果应用程序的GUI没有大量使用本机OS GUI元素的库(如Java SWING),则该语言/库通常提供可访问性API(例如Java Access Bridge)。 即使图像正在使用中,您也可以使用辅助功能库或自动化工具对它们进行隔离,然后使用其校验和来查看它是哪一个(如果您知道哪些图像可以出现)。

只有在他们不会给你一些结果的情况下,才会绘制整个GUI,就像使用SDL时一样。 然后,您可以对屏幕截图进行OCR和blob检测,以抓取文本并在屏幕上分离对象。然后继续使用校验和检测。

如果您想要/必须非常粗鲁,可以连接到屏幕阅读器,如Mac上的Voice Over或Windows上的NVDA,并查询它们以获取所需信息。

如果你需要自动化用Flash编写的网络游戏,那么你可能不得不为你想要使用的浏览器使用辅助功能API(Firefox确实提供了一个),甚至需要在Flash中编写一些可以抓住它的代码给你的信息。 或者只是选择屏幕截图和一些图像处理和校验和检测。 如果它在Javascript中,事情会容易得多。您可能只能使用他们的DOM ID来识别卡片。当然,如果没有在屏幕上绘制游戏。

机器学习非常有用,但我可以避免在有更简单的问题解决方案的地方学习。 训练神经网络只是为了让它玩游戏简直太过分了,对不起,但实际上并没有什么。 即使这样,您也可以使用一些API来获取单个图像,而不是将所有内容按原样推送到NN或SVM来简化工作。

我的朋友开发并训练了NN来识别手写数字。 PC需要一个月的时间才能自学,即培训NN去做,即便如此,它也犯了一些错误。 嗯,花了很长时间,因为他们从事心理学项目,所以NN需要尽可能像人脑一样工作。但是你明白了。

相关问题