【问题标题】:Sikuli on Java does not recognize imagesJava 上的 Sikuli 无法识别图像
【发布时间】:2021-12-23 00:52:49
【问题描述】:

我一直在尝试使我的计算机上的一些任务自动化,并且确实从 Java 中选择了 Sikuli 来这样做(我每天都使用 Java,并且不知道任何使用 java 的自动化工具,sikuli 是我发现的第一个)。我使用 java 和 maven 和 eclipse 作为 IDE。我已将 Sikuli 添加为 Maven 依赖项。

<dependency>
    <groupId>com.sikulix</groupId>
    <artifactId>sikulixapi</artifactId>
    <version>2.0.5</version>
</dependency>

我尝试做一些简单的事情。我使用 Windows 的屏幕截图工具对屏幕的某些部分进行了截图,并希望 sikuli 将其悬停。它对一张图像效果很好,但对其他图像则完全不行。似乎图像越大效果越好,因为我对任何小图像都没有成功。一个工作是整个窗口的屏幕(减少到我屏幕的~1/4)。 我还尝试在此窗口中找到一个按钮,找到左下角的 windows 徽标,找到我的包资源管理器的屏幕,但都无法正常工作。

我使用不同的值使用了similar(),但它并没有改善结果。在某些情况下(窗口内的按钮),它确实找到了一些低相似值的结果,但它是另一个按钮。奇怪的是:它找到了另一个亮蓝色的按钮,而我正在寻找的是紫色的。

我的电脑背景从未改变,我做了一些 screen.highlight() 并查看正确的屏幕(双屏)。这不是图像路径的问题(已经解决了这个问题)。

你知道我可以尝试什么吗?我读过关于人们使用 Sikuli IDE 还是其他 IDE 的成功率不同的文章。所以也许我可以试试 sikuli IDE。

我一回到家就可以提供代码示例。

我用来测试的代码:

public class CleanTest {
    
    static Screen screen = new Screen();

    public static void main(String[] args) throws FindFailed, AWTException, IOException, InterruptedException {
        String pathYourSystem = System.getProperty("user.dir") + "\\";
        System.out.println(pathYourSystem);
        Pattern pLauncher = new Pattern(pathYourSystem+"img\\full_launcher.PNG").similar(0.9d);
        Desktop.getDesktop().open(new File("path_to_an_exe_opening_a_launcher"));
        screen.wait(pLauncher, 300);
        screen.mouseMove();
        System.out.println("launcher found");
    }

}

它适用于“完整启动器”图像,但找不到启动器的子部分(按钮)。我尝试编写一些代码来测试类似参数是否存在阈值:

double similarValue = 1d;
        Pattern pLauncher = new Pattern(pathYourSystem+"img\\the_button.PNG").similar(similarValue);
        Desktop.getDesktop().open(new File("path_to_an_exe_opening_a_launcher"));
        
        while(!screen.has(pLauncher)) {
            similarValue-=0.1;
            pLauncher = new Pattern(pathYourSystem+"img\\login.PNG").similar(similarValue);
        }
        System.out.println(similarValue);
        screen.mouseMove();

它会在 0.5 左右找到一些东西,但它是一个完全不同的按钮。

谢谢!

编辑:如果有人遇到同样的问题,请尝试使用 sikulix IDE 截取屏幕截图。它适用于 IDE 截取的屏幕截图。

【问题讨论】:

    标签: java eclipse automation sikuli sikuli-x


    【解决方案1】:

    这是一个简单的测试,完全符合 SikuliX 的功能。

    import org.sikuli.basics.Debug;
    import org.sikuli.script.*;
    
    public class SikulixTest {
      public static void main(String[] args) {
        System.out.println("SikulixTest");
        Screen scr = new Screen();
        // craete an image to be searched on the screen
        Image img = new Image(scr.userCapture());
        // try to find it
        Match mImg = scr.exists(img);
        if (mImg != null) {
          // show sthg. when found
          Debug.info("%s", mImg);
          mImg.highlight(2);
        }
      }
    }
    

    这是来自 SikuliX 的 RaiMan

    【讨论】:

    • 感谢您的回答。测试工作正常,即使在我从外部图像进行测试期间未找到的部分屏幕上也是如此。我将编辑我的原始帖子以添加一些代码。
    • 我做了更多的测试:如果我截取我的 IDE 的一部分然后运行一个简单的while(!screen.has(&lt;myScreenPath&gt;)){} screen.getLastMatch().highlight(2); 它不会突出任何东西,除非我打开图像文件并显示它屏幕。这很奇怪。我试图拔掉我的第二台显示器,使用不同的工具截屏,但没有成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2015-06-14
    相关资源
    最近更新 更多