Инструкция по установке краудсорсинговой платформы PyBossa

Фрагмент интерфейса CrowdCrafting
Фрагмент интерфейса CrowdCrafting
уже рассказывали об открытой краудсорсинговой платформе PyBossa, предназначенной для создания и запуска приложений, которые используют онлайн-помощь добровольцев для выполнения задач, требующих человеческого опыта, знаний и интеллекта. Теперь мы приводим подробную инструкцию по установке платформы для осуществления собственного проекта.

Краудсорсинг для решения макро-задач

Представьте, что вам нужно просмотреть несколько миллионов фотографий и отобрать только те, на которых присутствуют люди. Выполнить такую обработку для десятка фотографий не представляет сложности , но для обработки даже тысячи потребуется слишком много времени и усилий. С другой стороны, компьютеры без устали способны обрабатывать по несколько тысяч фото в час, но поставленная задача им не по силам.

Платформа для работы с микрозадачами PyBossa позволяет решить поставленную задачу (и множество ей подобных), распределяя между десятками экспертов-пользователей простейшие вопросы и сохраняя ответы. Такой комбинированный подход максимально полно использует сильные стороны людей (возможность почти мгновенно провести аналитическую работу) и компьютеров (хранение и обработка результатов). Для достижения еще большей надежности PyBossa выдает одно и то же задание нескольким экспертам и ни один эксперт не получает одно и то же задание дважды.

Для создания своего набора микрозадач (в терминах PyBossa он называется приложение) и загрузки исходных данных можно воспользоваться веб-интерфейсом — особой сложности в этом процессе нет. Самая сложная часть в настройке приложения — это создание представления задачи для эксперта. Для достижения максимальной гибкости в отображении задач и получении ответов авторы проекта написали специальную библиотеку на языке Javascript –PyBossa.js, которая является полноценным клиентом сервиса CrowdCrafting.

PyBossa.js

Библиотека входит в стандарнтую поставку сервера PyBossa для самостоятельного развертывания. Кроме этого, она является независимым модулем и может быть загружена из собственного git репозитория https://github.com/PyBossa/pybossa.js

Для использования библиотеки необходимо лишь подключить её как обычный javascript модуль:


После этого становится возможным получать задачи с сервера и сохранять ответы пользователя-эксперта.

Формат обмена данными PyBossa

В PyBossa и приложение и задача являются JSON объектами с предопределенным набором полей. Пример JSON объекта приложения:

Снимок экрана 2013-06-17 в 14.47.32

Снимок экрана 2013-06-17 в 14.50.54

Для отображения вопроса задачи, на который нужно получить ответ, используется параметр description. Например, для приложения FlickrPerson вопрос звучит так: “Видите ли Вы человека на этом фото?”. short_name — параметр, содержащий краткое наименование(SLUG) приложения. Поле info не имеет жестко заданной структуры, в нем могут содержаться произвольные данные приложения (к примеру шаблоны отображения задачи).

Задача в Pybossa имеет такую структуру:

Снимок экрана 2013-06-17 в 14.51.56

В задаче также присутствует поле info, не имеющее жесткой структуры. Единственное ограничение — все задачи одного приложения должны обладать идентичной структурой этого поля.

Пример заполнения поля info

В приложении FlickrPerson (тестовое приложение crowdcrafting) стоит задача поиска человека на фотографии, поэтому info задачи содержит два элемента:

Снимок экрана 2013-06-17 в 14.52.24

Первый элемент — это ссылка на страницу Flickr c исследуемым фото и второй — прямая ссылка на фотографию. Эти два элемента используются при отображении задачи пользователю для отображения фото и создания ссылки на страницу Flickr.

Представление задачи пользователю

В дальнейшем будем рассматривать тестовое приложение FlickrPerson //crowdcrafting.org/app/flickrperson/

Для представления задачи эксперту создается HTML шаблон. В шаблоне будут отображаться следующие элементы: вопрос задания, фотография, общее количество ответов текущего пользователя, кнопки ответов “да”, “нет”, “не знаю”.

Снимок экрана 2013-06-17 в 14.56.12Снимок экрана 2013-06-17 в 14.56.24

Для заполнения шаблона реальными данными и сохранения ответов используется библиотека PyBossa.js.

Загрузка данных задачи

Pybossa.js содержит два настраиваемых метода, позволяющих отображать задачи в зависимости от требований приложения:

Снимок экрана 2013-06-17 в 14.58.13

Поскольку работа по получению задач с сервера и отправке ответов на сервер происходит в асинхронном режиме и еще необходимо получить изображение со стороннего сервера, каждый из методов получает дополнительный параметр deferred(//api.jquery.com/category/deferred-object/), отслеживающий завершение загрузки изображения и запускающий процедуру дальнейшей обработки.

Метод pybossa.taskLoaded осуществляет получение задачи с сервера, загрузку изображения с сайта Flickr и запуск процедуры заполнения шаблона:
Снимок экрана 2013-06-17 в 14.59.36Снимок экрана 2013-06-17 в 14.59.46

Метод pybossa.presentTask вызывается после того как данные задачи были загружены с сервера и преобразованы в объект JSON. Пример задачи:

Снимок экрана 2013-06-17 в 15.02.40

Созданный объект JSON передается как параметр с именем task в метод pybossa.presentTask. В этом методе мы проверяем, что мы получили с сервера не пустое описание задачи. Пустое описание означает, что эксперт решил все доступные задачи, и в этом случае мы прячем шаблон отображения задачи и благодарим эксперта за проделанную работу. В противном случае мы подставляем данные задачи в шаблон.

PyBossa.js предполагает асинхронную отправку ответа эксперта на сервер, и это объясняет необходимость второго параметра метода: deferred. Этот объект зацикливает работу с задачей — при успешном сохранении ответа будет запущена процедура загрузки следующей задачи с сервера:

Снимок экрана 2013-06-17 в 15.03.20

Снимок экрана 2013-06-17 в 15.03.30
Необходимо заметить, что мы обрабатываем любой вариант ответа, используя событие onClick кнопок ответа “Да”, “Нет”, “Не знаю” с помощью следующего кода:

Снимок экрана 2013-06-17 в 15.04.47

Сохранение ответа пользователя

Метод pybossa.saveTask сохраняет ответы на выданную задачу. Если мы посмотрим на описание задачи, получаемое методом pybossa.taskLoaded, то увидим, что у задачи есть параметр task.id (идентификатор задачи), который мы и будем использовать для сохранения ответа. Для уведомления эксперта об успешном сохранении ответа будем показывать сообщение:

Снимок экрана 2013-06-17 в 15.06.46