В начале  декабря мы были организаторами хакатона WildHack – wild, потому что проводился он совместно с Кроноцким заповедником. Школьники, студенты и проскилованные специалисты три дня думали, как посчитать всех рыбов, сусликов и по-другому оцифровать работу природоохранных зон Камчатки. Все это время мы были в тесном контакте с ребятами и наблюдали за каждым их шагом – нашей команде понравились и задачи, и решения участников. 

ИТ-решения, кейсы и новости в telegram-канале ИТ-решения, кейсы и новости в telegram-канале

В посте покажем несколько кейсов команд – под наше увеличительное стекло попали два решения на основе нейронных сетей (одно отлавливает медведей на фотоловушках, а другое подсчитывает рыб) и таймлайн новостей Камчатки за последние 20 лет (расскажем, зачем вообще такое понадобилось). 

Детали и крутые фото из заповедников – под катом. 

Немного сухих фактов

Всего на хакатоне участникам дали 9 задач на выбор, мы их поделили на 3 категории: 

  • геоинформатические задачи по анализу пространственных данных;
  • решения для распознавания и обработки фотографий, аудио и видео;
  • разработка приложений, сайтов и чат-ботов.

В общем, кто-то считал тюленей на берегу, а другие ловили мишек и кроликов на фотоловушки в лесу. Задачи, естественно, прикладные – все для того, чтобы работа экологов на полуострове стала проще. Подробные описания задач и детали спрятали вот здесь под спойлером. Задачи хакатона:

  • Распознавание животных и сортировка фото с фото/видеоловушек
    На фото- и видеоловушках часто попадаются некачественные снимки. Организаторы дали участниками трехуровневую задачу, чтобы решить проблему сортировки:
    Первый уровень – алгоритм, который делает предразметку, какие фотографии хорошие, а какие плохие – чтобы человек мог глазами отсмотреть массив быстрее.
    Второй уровень – самостоятельный просев фотографий алгоритмом. Третий уровень – различные аналитические задачи:
    - Категоризация животных на фотографиях
    - Идентификация отдельных особей, формирование подборок фото по ним
    - Отслеживание и визуализация на карте маршрута отдельной особи между фотоловушками по exif-данным её снимков
  • Подсчет рыбов
    Распознавание рыб на видео – подсчет количества рыб, проплывающих в определенном месте реки, снятом на видео На рыбоучетном заграждении есть окна, где вручную происходит учет прохода рыбы. Есть масса причин и возможностей ошибиться в подсчете учетчикам, поэтому необходим дополнительный контроль. Задача от организаторов былазаменить человека-учетчика на видеокамеру-счетчик, распознающую нерку на фото и видео. Для этого нужно разработать алгоритм и приложение, распознающее и считающее рыбу на видео.
  • Экологический таймлайн Камчатки
    Создание хронологической ленты по экологическим событиям Камчатки за последние 20 лет.
    Если более развернуто, то собрать данные – какие ключевые экологические события происходили на Камчатке за последние 20 лет? Как негативные события – красные приливы, скандалы с рыбопромышленниками, добычей золота, с браконьерами и медведями, так и положительные события – успехи защитников природы.
  • Подсчет тюленей на берегу
    Распознавание тюленей на фотографиях – подсчет ежесуточных количеств ларг на побережье.
    В течение летнего сезона 2020 на лежбищах острова Уташуд 1 раз в час автоматической камерой снимались фотографии. Командам необходимо было разработать алгоритм и реализующее его приложение (локальное или серверное), распознающее тюленей-ларга на фотографиях и подсчитывающее их количество.
  • Разметка фотографий пластикового мусора в прибрежной зоне
    На побережья постоянно выбрасывает большое количество пластикового мусора. Морской мусор в прямом смысле убивает животных.
    Летом 2021 года прошла экспедиция по аэрофотосъемке берегов Кроноцкого заповедника в высоком разрешении с использованием БПЛА. На полученных аэрофотоснимках зафиксировано большое количество пластикового мусора. Участникам хакатона необходимо было создать алгоритм и сервис, распознающий мусор на аэрофотоснимках, определяющий и фиксирующий координаты его расположения, чтобы можно было запланировать и организовать экологические волонтерские акции по уборке побережья.
  • Медиааналитика по пресс-релизам Кроноцкого заповедника
    Оценка медиаохвата и сравнение эффективности пресс-релизов Кроноцкого заповедника.
    Типовая интернет-маркетинговая задача. Когда заповедник публикует что-то в соцсетях – получается измеримый охват аудитории: показываются просмотры-комменты-лайки. А когда выходит пресс-релиз, то сложно оценить его охват и реакцию людей на него. Пресс-релизы обычно расходятся по агентствам, сетям, новостным порталам. Есть сервисы формата Медиалогии, которые оценку охвата делают за деньги. Но у заповедника нет денег на Медиалогию, а такая оценка для управления репутацией все равно необходима.
  • Медиааналитика образа Камчатки у иностранцев
    Оценка характера упоминаний Камчатки и Кроноцкого заповедника за границей, с аналитикой по разным странам (в каком именно контексте упоминаются территории полуострова). На Камчатку ежегодно приезжает огромное количество туристов. До пандемии иностранцев приезжало даже больше, чем россиян (~60%). Организаторы поставили командам задачу проанализировать реакцию иностранных туристов на путешествие на Камчатку.
  • Выявление эко-инфлюенсеров
    Аналитика в инстаграме – кто из наиболее популярных российских блогеров пишет про экологию и насколько часто. Кто из топа лидеров мнений когда-либо писал о Камчатке и что? Команды, по замыслу PR-службы Кроноцкого заповедника, должны были приблизить реализацию их мечты – подружиться с большим количеством топовых инфлюэнсеров/селебритис в Инстаграме, которые время от времени пишут про экологию.
    На хакатоне участники должны были проанализировать в каком контексте звезды медиаплатформы пишут про экологию. А также то, кто и о чем пишет, выявить еще не знакомых заповеднику инфлюенсеров, которым интересна повестка экологии и путешествий на дикую природу.
  • Чат-бот или сайт для автоматизации работы с волонтерами
    Каждый год в Кроноцкий приезжает около 120 волонтеров. Процедура оформления и включения волонтера в работу — типовая: есть определенные этапы (трек), есть определенные правила, традиции, формы документов. Для желающих стать волонтерами есть FAQ по всем процедурам, но есть и большая проблема: лонгриды никто не читает.
    В заповеднике есть специальный сотрудник, отвечающий за работу с волонтерами. Он вынужден все время отвечать на одни и те же типовые вопросы, ответы на которые есть в FAQ. Делу мог бы помочь чат-бот с пониманием естественной речи и ответами по базе знаний – его разработка и стала основной задачей команд, выбравших этот кейс. Также можно было попробовать автоматизировать процедуры оформления волонтеров с помощью интернет-сервиса.

Команды поделили на три потока, чтобы не было путаницы: школьники, студенты и ИТ-специалисты. На старте у нас было 340 участников от 14 до 55 лет, 92 команды.  

Это все – базовая информация, а подробности можно изучить здесь

Кейсы для этого поста отобрали ребята из жюри – по одному самому запоминающемуся от каждого потока. За анализ решений сегодня отвечают Женя Писаренко, руководитель группы разработки робототехнических решений в Croc Code, Ярослав Жаров, сотрудник Технологического института Карлсруэ и ИТ-волонтер Кроноцкого заповедника, и Ростислав Бородин, лектор в Политехническом музее и Fullstack Web Developer. Вместе мы разберем, что команды исполнили круто, а что можно было и доработать.

Ярослав, кстати, прямо сейчас налаживает ИТ-процессы в Кроноцком заповеднике. То есть, точно знает, насколько пригодятся природоохранным зонам разработки участников. 

Школьники нарисовали крутой таймлайн длиной в 20 лет 

Суть этой задачи: собрать на одной странице все экологические события Камчатки – и позитивные, и негативные. 

KennelTeam

  • Никита, Лев и Леша из 11 класса школы №179 2021 г. безуспешно участвовали в других хакатонах, но прорыв пришелся на WildHack
  • Ломали голову над тем, когда вылетят, ведь считали свое решение таким себе. А в итоге покорили судей решением и подачей, поэтому теперь летят только на Камчатку сразу после сдачи ЕГЭ
  • Ссылки на презентацию и GitHub проекта – здесь и здесь.

Не самая сложная задача по мнению команды (хе-хе) – составить экологический таймлайн главных событий в новостном поле Камчатки за прошедшие 20 лет. Она попала в список задач из-за того, что в этом веке еще никто не дошел до парсинга этих данных – а они бы пригодились и дата-журналистам, и экологам. Заповедник хотел получить линию событий, отражающую как позитивные, так и негативные факторы, напрямую влияющие на природный фонд полуострова. 

Для составления таймлайна ребята использовали скрапинг, аналитику веб-страниц, сбор данных, анализ текста и кластеринг – за два дня они успели преобразовать все это в работающий сайт. Сверстав ресурс через Web (html, css) и Python bs4, а также проанализировав данные и текст через Pandas со Spacy, ребята доработали его гибким поиском с фильтрами по ключевым словам (Elastic-Search). 

Многие инструменты для школьников были в новинку. Больше всего пришлось возиться с Elastic-Search – задачка встроить поиск по ключевым словам на ресурс с таймлайном заняла буквально все время одного из ребят.

Решение команды состоит из разных частей, от завершенности каждой из которых зависел финальный результат: скрапинг исходных данных, стемминг, выделение ключевых слов, кластеризация статей, построение облака тегов и индекса полнотекстового поиска. У ребят получилось реализовать все эти функциональные блоки и собрать их в MVP.

Женя Писаренко
Руководитель группы разработки робототехнических решений в Croc Code

Идея с группировкой новостей очень даже ничего. Я помню демо, и у меня к реализации были вопросы, я бы предположил, что это не самый практичный способ представления, возможно нужен граф новостей, или что-то типа того. Но во-первых, это слишком большая придирка для двухдневной работы школьников, и во-вторых, возможная только потому, что я видел выступление. Так что я бы может и не учитывал ее.

Ярослав Жаров
Сотрудник Технологического института Карлсруэ и ИТ-волонтер Кроноцкого заповедника

Ребята взяли данные из одного источника, но можно попробовать расширить базу для более объективного таймлайна. Что круто: команда автоматически выделила ключевые слова и кластеризовала публикации, реализовав облака слов. Также KennelTeam стартовали веб-сервис (но сложно понять какой, пост-фактом, на презентации показывали).

Ростислав Бородин
Лектор в Политехническом музее, Fullstack Web Developer

Студенты сделали распознавание и сортировку снимков и видео с фотоловушек

Основной целью участников было уловить неуловимое – то есть, живность Камчатки. Вообще-то зверьков нащелкали фотоловушки, но они не всегда срабатывают как надо, поэтому команды должны были придумать технологическое решение проблемы: например, обучить нейросеть сортировать снимки на удачные и не очень.

accuracy_0.07

  • Команда студентов Вышки шла на хакатон, чтобы просто “поработать с данными”
  • Научили нейросеть фильтровать зайчиков, лисичек и мишек и обрезать фрагменты видео без животных в кадре и разработали программу, работающую без подключения к сети
  • Презентацию и GitHub кейса искать здесь и здесь.

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

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

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

Ребята из accuracy_0.07 сосредоточили свои ресурсы на двух подзадачах – отсеивание некачественных фото и обрезание видео с ловушек. В итоге разработчики запилили десктопную прогу с возможностью масштабирования на андроидовскую ось, которая работает без подключения к сети. Оно функционирует на ООП-архитектуре и задействует технологии машинного обучения YOLOv5, opencv и tkinter. По заверениям тимлида accuracy_0.07, их апп тянет любой компьютер. 

В программе всего четыре кнопки: с помощью самой верхней можно выбрать действие «Отобрать фото»/«Обрезать видео»; две кнопки для выбора исходной папки и папки загрузки, а также кнопка «Старт». Это упрощает работу с приложением и делает его доступным специалистам разной квалификации, но при этом ограничивает функционал. Категоризацию животных в текущем MVP не сделать.  

Команда продемонстрировала рабочее решение в части отбора фотографий и обрезки видео с животными. Основное направление для развития модели и решения в целом – реализация функции классификации животных по видам.

Женя Писаренко
Руководитель группы разработки робототехнических решений в Croc Code

Ребята использовали готовую нейросеть YOLO и категоризировали животных по типу. Кроме того, они сделали интерфейс в виде настольного приложения, но на выходе – тоже раскладывание по папкам. Можно подумать над более удобным для пользователя интерфейсом, например, каким то веб-сервисом с просмотром контента с привязкой к локациям вместо раскладывания в папку.

Ростислав Бородин
Лектор в Политехническом музее, Fullstack Web Developer

Команда ИТ-специалистов научила нейросети подсчитывать рыб во время нереста

Рыбов, как и животных, фотографируют автоматические камеры, только без ориентира на движение, а с заданным промежутком. Затем сотрудники, рискуя жизнью (шутка), забирают эти снимки, несут в НИИ и считают их там. Задача команд была в том, чтобы все это упростить, ускорить и технологически решить.

У НАС ЛАПКИ

  • Долго выбирали между тюленями и рыбами
  • Серийные хакатонщики – ходили вместе на 12 хаков 
  • «Перепридумали» методику доверительного интервала. Спойлер: помогли блики на воде на фото, так как кол-во проплывающей рыбы резко упало в сравнении с известными данными
  • Презентация и GitHub кейса – здесь и здесь.

Как рыбов считают сейчас: над рыбоучетными заграждениями на истоке реки Озерная в Южно-Камчатском федеральном заказнике стоят камеры, которые  фотографируют содержимое специальных зон. Все снимки попадают на флешку, затем сотрудники местного НИИ ее извлекают, выгружают данные на компьютер и считают все вручную. Человеческий фактор, ограничение по времени, блики на воде и прочие аналоговые трудности приводят к неточности – например, из-за некорректно подсчитанных данных с тех фото, которые предоставили участникам организаторы, на нерест якобы приплыло на 10% меньше нерки (неестественная корреляция). Значит, требовалось решение, которое позволит минимизировать ущерб от этих аспектов.

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

Методику, которую юзают на Камчатке сейчас, ребята дополнили магией алгоритмов: фото с флешек выгружаются в их систему, обученную на основе нейросети YOLOv5. Предварительно в сетку загрузили полторы тысячи, размеченных вручную снимков. В ней подсчитывает вся рыба на всех снимках каждого смотрового окна. Затем У НАС ЛАПКИ развернули бэкенд на основе K8S, Kotlin, Ktor, DeepJavaLearning, Gitlab AutoDevops, сверстали фронтенд через Vercel, Plotly.js, React, Next.js и, вуаля, для конечного юзера (сотрудника НИИ) все выглядит как сводная табличка с данными за определенный период. 

К этому разработчики добавили «доверительный интервал» – данные, обработанные нейросетью сопоставляются со статистической выгрузкой среднего количества рыбы, прошедшей нерест в предыдущие годы. В случае существенного отклонения, ведущие учет сотрудники получат уведомление, к тому же, погрешность отобразится на лендинге самой системы. 

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

Бонусом команда предложила добавить в цепочку подсчета количества рыб Raspberry Pi для шифрования фотографий перед их сохранением на флеш-карте. Задача в том, чтобы исключить намеренное искажение данных людьми – дешифровка снимков происходит на стороне системы.

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

Женя Писаренко
Руководитель группы разработки робототехнических решений в Croc Code

Круто, что не поленились проработать весь пайплайн. Не очень понятно, насколько оправдан подход с доверительными интервалами. Я бы предположил, что там требуется, как минимум экспоненциальное сглаживание. Но это довольно мелкая придирка, так как она относится к пост-процессингу результатов.

Ярослав Жаров
Сотрудник Технологического института Карлсруэ и ИТ-волонтер Кроноцкого заповедника

Ребята проработали проблематику. Команда хорошо погрузилась в задачу и предлагает не просто «нейросеть», но комплексный продукт для решения бизнес-задачи с продуманной архитектурой. Дополнительно рассчитана экономика проекта. Круто, что участники сами разметили данные, причем, решили проблему нехватки данных аугментацией (когда размер датасета увеличивается с помощью преобразования уже существующих картинок – поворотов, обрезаний и тд). Высокая точность классификатора.

Ростислав Бородин
Лектор в Политехническом музее, Fullstack Web Developer

Выводы

Всего на предемо участники показали 92 готовых решения. Из них до демо добрались 59. Большинство разрабатывало чат-бота для волонтеров, но есть кое-что поважнее – команды нашли подход к 9 из 9 задач, то есть, сделали цифровым все, что можно.

Все три решения – рабочие и вариативные, а значит, функционал можно улучшить при желании и возможности. Как отметили сами участники онлайн-хакатона, ключевой скилл, отличающий школьников от специалистов – опыт. Это в аналитике профи не нуждается. 

Организаторы со стороны Кроноцкого заповедника рассказали, что сразу после окончания хакатона специалисты начали внедрять решения участников. Однако для более тонкой настройки всего digital они ждут победителей в гости летом 2022 г.

На этом наш пост – все. Приглашаем в комментарии обсудить хакатон и решения команд. Кстати, как считаете, что еще в сфере экологии можно оцифровать?

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

C оригиналом статьи можно ознакомиться на Хабре.