我将概述我的请求的具体特征,然后详细说明:
一个很好的例子是在线扑克。
P1---------P2---------P3
c1 c2 c3 c4 c5 c6
| |
| s1 s2 s3 s4 s5 |
| |
c7 c8 c9 c10 c11 c12
P4---------P5---------P6
规则:
说明
该示例总结了所需的特征,因为我可能无法正确地表达它们。
机器学习可以应用于这个问题吗? 这是我正在讨论的一项特别困难的任务吗? 还有其他建议吗?
答案 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需要尽可能像人脑一样工作。但是你明白了。