четверг, 21 января 2010 г.

[comp.prog.wow] Sikuli: программирование в картинках

Приходилось ли вам видеть когда-нибудь вот такие программы:

И думали ли вы вообще, что можно программировать вот так? ;)

Теперь можно. В MIT's Computer Science and Artificial Intelligence Lab развивается проект под названием Sikuli (“Глаз Бога” на языке мексиканских индейцев). В рамках этого проекта созданы:

  • Sikuli Search – справочная система, которая ищет информацию по скриншоту (т.е. выделяете на экране какое-нибудь диалоговое окно Windows, а Sikuli Search ищет справку по этому окну в своих архивах), и
  • Sikuli Script – производный от Python-а язык для автоматизации действий пользователя с использованием скриншотов. Как раз приведенный выше пример кода показывает, как выглядят подобные программы.

Для создания еще большего впечатления приведу пару примеров из работы Sikuli: Using GUI Screenshots for Search and Automation:

  1. Удаление документов нескольких типов текущей папки в корзину:
     
    Здесь сначала определяются значки тех типов документов, которые мы хотим удалить. Потом в окошке ищутся значки этих типов и каждый найденный значок перетягивается на иконку “Recycle Bin”.
  2. Контроль за тем, что автобус приехал в нужную точку (с помощью отображения движения автобуса на основе GPS):

    Тут все просто. Сначала задается финальная точка маршрута. Затем периодически ищется значок текущего местоположения автобуса. Если этот значок не достиг финальной точки, то делается пауза.

Вот такая вот забавная штука.

При всей своей забавности, она может найти свое применение, например, в автоматизированном тестировании программ. И работа GUI Testing Using Computer Vision как раз описывает возможности использования Sikuli в этой области.

Первоисточник: Dr.Dobb’s: Picture-Driven Computing.

PS. Понравилось еще и то, какая сборная солянка была использована при работке Sikuli Script (включая и специализированную IDE для написания скриптов): алгоритм сопоставления картинок был реализован на C++, затем все это было обернуто в Java, на основе Java API была написана Python-овая библиотека, редактор был создан с использованием Java Swing, а для исполнения скриптов задействовали Jython.

9 комментариев:

  1. Ох емае, самому по молодости такие языки в голову лезли, но поспешно прогонялись как наиболее бредовые.

    Поразительно что в мире нашлись креативные люди, не связанные ограничениями.

    Удивительная весчь.

    ОтветитьУдалить
  2. Где-то в 93-ем, занимаясь на какой-то лабораторной перемножением векторов и матриц вручную мне захотелось иметь программу с графическим интерфесом. Рабочая зона в которой выглядела бы как лист бумаги, в разных местах которого можно было бы записывать вектора, матрицы и знаки операций между ними. И чтобы программа сама потом результаты подставляла в нужные места. Но духу не хватило начать. А года через три мне показали MathCad под Windows :)

    ОтветитьУдалить
  3. Прям язык программирования для менеджеров получился:-)
    А как Вам идея сделать язык близким по синтаксису и семантике к английскому?
    Вот, например:
    _http://www.runrev.com/pdf/revTalk-PHP-Comparison.pdf

    ОтветитьУдалить
  4. 2Quaker:

    >А как Вам идея сделать язык близким по синтаксису и семантике к английскому?

    Ну так COBOL, имхо, отличная демонстрация того, что из этого должно получиться :)

    >Вот, например:

    Да ну, какая-то жалкая полюция :) Вот широко известный в узких RSDN-овских кругах Сергей Губанов когда-то выдал настоящий оргазм на тему синтаксического оверхэда. Его произведение было настолько эпохальным, что сам термин "синтаксический оверхэд" уже пошел в массы и прочно там прижился. Вот это я понимаю -- мощь и сила! :)))

    ОтветитьУдалить
  5. > алгоритм сопоставления картинок был реализован на C++, затем все это было обернуто в Java, на основе Java API была написана Python-овая библиотека, редактор был создан с использованием Java Swing, а для исполнения скриптов задействовали Jython

    Ы-ы-ы :). Сколько людей столько и мнений, да.

    ОтветитьУдалить
  6. Питон + C++ это скорее норма. При правильном приготовлении объединяются сильные стороны обоих технологий скорость и доступность низкоуровневых API C++ и выразительность, модульность и богатство библиотек для питона.

    ОтветитьУдалить
  7. 2Rustam:

    >Питон + C++ это скорее норма.

    Не то, чтобы норма, но вполне уже привычная комбинация.

    А вот C++ -> Java -> Python -> Python + Java Swing -> Jython -- вот это все вместе редко где увидишь.

    ОтветитьУдалить
  8. Всё мы это уже видели в древней статье Страуструпа о перегрузке пробела:
    http://www2.research.att.com/~bs/whitespace98.pdf

    ОтветитьУдалить
  9. 2jazzer: если мне не изменяет память, упомянутая работа Страуструпа датируется 1-м апреля 1998 :)

    ОтветитьУдалить