识别网页中的颜色/图案

时间:2011-04-20 11:31:24

标签: java image-recognition chess awtrobot

我想尝试创建一个学习象棋应用程序作为学校项目。我的第一个计划就是简单地将这个AI与自己对立起来,但要真正展示它是否成功,它需要能够展示它的进展情况。为了做到这一点,我希望它能在诸如chess.com之类的网站上玩评级游戏。但是,我相信它们还没有(还)拥有公共API。

因此,我想在java中创建一个识别颜色和图像的程序。它保留了所有位置的内部二维数组,并识别板上的碎片。我想我已经找到了一种方法,可以在窗口中使用Java Robot Class之类的东西。

然而,我希望它能够在内部窗口中打开此网页并在后台继续执行此操作。有没有办法识别自己窗口中的颜色,而不需要在前台?

编辑:我打算使用this browser component i just found。我注意到可以创建页面的整页快照并将其保存为BufferedImage(?)。这样做会更容易吗?

编辑2:我刚刚读到“完全禁止来自其他人的外部帮助,计算机/国际象棋引擎或终局桌面”。我想让计算机完成所有的游戏肯定包含在内。所以我可能会尝试使用其他网站,因此特定于chess.com的答案不会削减它!

3 个答案:

答案 0 :(得分:3)

我不知道它有帮助,但可能你可以看看Sikuli项目。 http://sikuli.org/

Sikuli是一个程序(和API)来处理与用户界面的交互。例如,您可以编写脚本以在特定条件下单击图像或按钮。

特别有趣的是,有一个Java集成:http://sikuli.org/docx/faq/030-java-dev.html

以下是该网站的摘录,旨在让您了解可以编写的代码。

编辑:在此代码中,请务必注意您正在使用图像定义新模式。 Sikuli将能够找到匹配的模式。

import org.sikuli.script.*;

public class TestSikuli {

    public static void main(String[] args) {
            Screen s = new Screen();
            try{
                    s.click("imgs/spotlight.png", 0);
                    s.wait("imgs/spotlight-input.png");
                    s.type(null, "hello world\n", 0);
            }
            catch(FindFailed e){
                    e.printStackTrace();
            }
    }
}

答案 1 :(得分:3)

您应该考虑在可以使用API​​的国际象棋服务器上玩,并允许使用国际象棋引擎。有The Internet Chess Club (ICC)您必须付费才能拥有人工帐户,然后您可以为您的引擎获得免费的计算机帐户。还有Free Internet Chess Server (FICS)您和您的引擎可以获得免费帐户。

国际刑事法院通常是首选,因为那里的球员水平较高,有很多国际大师和国际象棋大师在那里比赛。

与这些网站接口的最佳方式是实施xboard protocol。这将允许您的引擎通过Winboard或XBoard接口(以及其他)进行播放,并且这些接口可用于连接FICS或ICC并自动在那里播放。

我希望这有帮助,即使它没有直接回答这个问题。

答案 2 :(得分:2)

我不确定您的输入是什么,但您有两种选择:

  1. 您可以处理PNG图像。将图像加载到BufferedImagedocs)对象中并在那里进行检查。您可以使用屏幕截图工具来创建它们。

  2. 似乎chess.com使用HTML和JavaScript。您可以使用HttpComponents下载HTML并检查它以查看各个部分的位置。这样做的另一个好处是,您不必猜测HTML包含源信息的位置。