Можно ли использовать Sikuli, чтобы утверждать, что изображения одинаковы в режиме без графического интерфейса?

У меня есть тестовый сервер, который работает без головы. Один теста, который я хочу, чтобы проверить, что изображение подается от конкретного URL соответствует некоторому эталонному изображению.

Есть ли в Sikuli API, который может напрямую принимать изображение в виде потока и сравнивать его с другим изображением, взятым из файла локальных ресурсов? К сожалению, нет полного учебника по Java API Sikuli, все, что я нашел, это учебники, которые предполагают, что дисплей доступен.

Я буду рад видеть любые примеры или, по крайней мере, ссылки на необходимые части Javadocs Sikuli. Также приветствуются предложения по другим подходам.

2 ответа

Решение

Чтобы использовать Sikuli вам нужно

  1. Базовое изображение, на котором будет искать другое изображение.
  2. Изображение, которое будет искать в другом изображении.

Если изображение 1 - это изображение вашего локального ресурса, вы можете создать экземпляр org.sikuli.Finder с путем к изображению и областью этого изображения, в которой будет выполняться поиск. Пример (уровень Java):

finder = new Finder("path/to/image", new Region(0, 0, <imgwidth>, <imgheight>));

Если изображение 1 - ваш поток, вы должны каким-то образом сделать из него BufferedImage (я не знаю, как это сделать лучше). Затем вы можете сделать org.sikuli.ScreenImage из этого BufferedImage с помощью java.awt.Rectangle и org.sikuli.Region.

finder = new Finder(new ScreenImage(new Rectangle(0,0,<imgwidth>,<imgheight>), bufferedImage), new Region(0,0,<imgwidth>,<imgheight>))

После того, как вы создали искатель из изображения 1, вы можете искать изображение 2 в этом изображении.

Опять же, у вас есть две возможности. Если второе изображение - это изображение вашего локального ресурса, вы можете создать объект org.sikuli.Pattern с расположением файла:

pattern = new Pattern("path/to/image.png");

Иначе, если это ваш поток, вы должны каким-то образом сделать BufferedImage из потока. Затем вы можете создать шаблон из этого изображения:

pattern = new Pattnern(bufferedImage);

В качестве последнего шага теперь вы можете запустить Finder для поиска шаблона:

finder.find(pattern);

Вы можете проверить, нашел ли нашедший что-либо с помощью:

finder.hasNext();

И вы должны быть в состоянии повторить все результаты с:

for (Match m : finder):
    //do something with the match

Я надеюсь, что смогу вам помочь, хотя вашему вопросу уже несколько недель.

Ниже приведен код, помогающий утверждать изображения

// сделать скриншоты

  File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

 try {

//copy it some location

FileUtils.copyFile(scrFile, new File("C:\\screenshot.png"));
Finder f = new Finder("C:\\screenshot.png");
System.out.println("abc");
f.find("C:\\chrome3.png", 0.95);

while(f.hasNext()){

 System.out.println("found");
 Match m= f.next();
 f.destroy();
}

  }    
   catch (IOException e)
{
    e.printStackTrace();
  }
Другие вопросы по тегам