Mы уже рассказывали об открытой краудсорсинговой платформе PyBossa, предназначенной для создания и запуска приложений, которые используют онлайн-помощь добровольцев для выполнения задач, требующих человеческого опыта, знаний и интеллекта. Теперь мы приводим подробную инструкцию по установке платформы для осуществления собственного проекта.
Краудсорсинг для решения макро-задач
Представьте, что вам нужно просмотреть несколько миллионов фотографий и отобрать только те, на которых присутствуют люди. Выполнить такую обработку для десятка фотографий не представляет сложности , но для обработки даже тысячи потребуется слишком много времени и усилий. С другой стороны, компьютеры без устали способны обрабатывать по несколько тысяч фото в час, но поставленная задача им не по силам.
Платформа для работы с микрозадачами PyBossa позволяет решить поставленную задачу (и множество ей подобных), распределяя между десятками экспертов-пользователей простейшие вопросы и сохраняя ответы. Такой комбинированный подход максимально полно использует сильные стороны людей (возможность почти мгновенно провести аналитическую работу) и компьютеров (хранение и обработка результатов). Для достижения еще большей надежности PyBossa выдает одно и то же задание нескольким экспертам и ни один эксперт не получает одно и то же задание дважды.
Для создания своего набора микрозадач (в терминах PyBossa он называется приложение) и загрузки исходных данных можно воспользоваться веб-интерфейсом — особой сложности в этом процессе нет. Самая сложная часть в настройке приложения — это создание представления задачи для эксперта. Для достижения максимальной гибкости в отображении задач и получении ответов авторы проекта написали специальную библиотеку на языке Javascript –PyBossa.js, которая является полноценным клиентом сервиса CrowdCrafting.
PyBossa.js
Библиотека входит в стандарнтую поставку сервера PyBossa для самостоятельного развертывания. Кроме этого, она является независимым модулем и может быть загружена из собственного git репозитория https://github.com/PyBossa/pybossa.js
Для использования библиотеки необходимо лишь подключить её как обычный javascript модуль:
После этого становится возможным получать задачи с сервера и сохранять ответы пользователя-эксперта.
Формат обмена данными PyBossa
В PyBossa и приложение и задача являются JSON объектами с предопределенным набором полей. Пример JSON объекта приложения:
Для отображения вопроса задачи, на который нужно получить ответ, используется параметр description. Например, для приложения FlickrPerson вопрос звучит так: “Видите ли Вы человека на этом фото?”. short_name — параметр, содержащий краткое наименование(SLUG) приложения. Поле info не имеет жестко заданной структуры, в нем могут содержаться произвольные данные приложения (к примеру шаблоны отображения задачи).
Задача в Pybossa имеет такую структуру:
В задаче также присутствует поле info, не имеющее жесткой структуры. Единственное ограничение — все задачи одного приложения должны обладать идентичной структурой этого поля.
Пример заполнения поля info
В приложении FlickrPerson (тестовое приложение crowdcrafting) стоит задача поиска человека на фотографии, поэтому info задачи содержит два элемента:
Первый элемент — это ссылка на страницу Flickr c исследуемым фото и второй — прямая ссылка на фотографию. Эти два элемента используются при отображении задачи пользователю для отображения фото и создания ссылки на страницу Flickr.
Представление задачи пользователю
В дальнейшем будем рассматривать тестовое приложение FlickrPerson //crowdcrafting.org/app/flickrperson/
Для представления задачи эксперту создается HTML шаблон. В шаблоне будут отображаться следующие элементы: вопрос задания, фотография, общее количество ответов текущего пользователя, кнопки ответов “да”, “нет”, “не знаю”.
Для заполнения шаблона реальными данными и сохранения ответов используется библиотека PyBossa.js.
Загрузка данных задачи
Pybossa.js содержит два настраиваемых метода, позволяющих отображать задачи в зависимости от требований приложения:
Поскольку работа по получению задач с сервера и отправке ответов на сервер происходит в асинхронном режиме и еще необходимо получить изображение со стороннего сервера, каждый из методов получает дополнительный параметр deferred(//api.jquery.com/category/deferred-object/), отслеживающий завершение загрузки изображения и запускающий процедуру дальнейшей обработки.
Метод pybossa.taskLoaded осуществляет получение задачи с сервера, загрузку изображения с сайта Flickr и запуск процедуры заполнения шаблона:
Метод pybossa.presentTask вызывается после того как данные задачи были загружены с сервера и преобразованы в объект JSON. Пример задачи:
Созданный объект JSON передается как параметр с именем task в метод pybossa.presentTask. В этом методе мы проверяем, что мы получили с сервера не пустое описание задачи. Пустое описание означает, что эксперт решил все доступные задачи, и в этом случае мы прячем шаблон отображения задачи и благодарим эксперта за проделанную работу. В противном случае мы подставляем данные задачи в шаблон.
PyBossa.js предполагает асинхронную отправку ответа эксперта на сервер, и это объясняет необходимость второго параметра метода: deferred. Этот объект зацикливает работу с задачей — при успешном сохранении ответа будет запущена процедура загрузки следующей задачи с сервера:
Необходимо заметить, что мы обрабатываем любой вариант ответа, используя событие onClick кнопок ответа “Да”, “Нет”, “Не знаю” с помощью следующего кода:
Сохранение ответа пользователя
Метод pybossa.saveTask сохраняет ответы на выданную задачу. Если мы посмотрим на описание задачи, получаемое методом pybossa.taskLoaded, то увидим, что у задачи есть параметр task.id (идентификатор задачи), который мы и будем использовать для сохранения ответа. Для уведомления эксперта об успешном сохранении ответа будем показывать сообщение: