Qostanai Smart City Hackathon · Кейс №1 13–14 августа 2026 2 дня · 3 человека

Jasyl

AI-мониторинг зелёных насаждений Костаная

Житель фотографирует дерево, модель определяет состояние, объект встаёт на карту города с инвентарным номером, служба озеленения получает заявку с приоритетом и планом работ. Приложение работает без интернета: снимки копятся на устройстве и уходят сами, когда связь вернётся.

Демо работает без сервера: модель считается прямо в браузере, реестр — на демо-наборе данных. Подробности — в разделе о модели.

Наведите курсор — сетка тянется за ним. Кликните — расходится волна.
6
классов состояния
343
размеченных фото
4
платформы сборки
100%
сценария офлайн
Главный экран приложения Jasyl: карта Костаная с зонами риска и сводкой по состоянию насаждений
Задача

Город не знает, какие деревья опасны

Учёт зелёных насаждений ведётся на бумаге и в разрозненных таблицах. Обход выполняет человек с блокнотом, аварийное дерево попадает в план работ уже после того, как ветка упала. Кейс №1 хакатона просил систему, которая переводит этот учёт в цифру и даёт службе озеленения приоритеты.

Реакция, а не профилактика

Заявка появляется после происшествия. Дерево, которое сохло два сезона, никто не считал проблемой, пока оно не упало на тротуар.

Данные не сведены

Обходы, обращения жителей и планы работ живут в разных местах. Свести их в одну карту и один приоритетный список нечем.

Житель не встроен в процесс

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

Сценарий

Четыре шага от фотографии до наряда

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

Съёмка

Камера и геолокация в момент кадра. Вид дерева житель выбирает сам — породу модель не определяет намеренно.

Классификация

Фото уходит в инференс-сервис. MobileNetV3 возвращает класс состояния, тяжесть 1–5 и рекомендацию из справочника.

Реестр и карта

Объект получает инвентарный номер № JSL-000001, встаёт на карту города и в цифровой паспорт с историей осмотров.

Наряд

Специалист подтверждает или исправляет класс, руководитель видит план работ по срочности и выгружает сводку в Excel.

Что внутри

Возможности продукта

Не демо одной функции: закрыт весь цикл — от полевой съёмки до документа, который служба озеленения может положить на стол в акимате.

Съёмка в реальном времени

Камера и координаты в момент кадра. Загрузка готового файла из галереи жителю недоступна сознательно: у такого файла нельзя подтвердить место и время.

Пакетная обработка

Сотруднику доступна загрузка до 10 фото за раз: обработка по одному с прогрессом, прерывание не теряет уже обработанное.

Карта с зонами риска

На масштабе города точки собираются в кластеры по кварталам, крупный зум разворачивает их в отдельные деревья. Leaflet и OpenStreetMap, без API-ключей.

Цифровой паспорт объекта

Инвентарный номер, история обследований, печать в фирменном виде с QR-кодом на точные координаты — открывается прямо в поле.

Предиктивный режим

Детерминированная модель риска: тяжесть состояния × время без осмотра × порода. На выходе — четыре полосы срочности и прогноз последствий бездействия.

Три роли и RLS

Житель, специалист, руководитель. Разграничение — политиками Row Level Security в базе, а не скрытыми кнопками в интерфейсе.

Офлайн-первое

Service Worker, очередь в IndexedDB, три независимых триггера синхронизации — включая ручной, потому что Background Sync не работает в Safari.

Выгрузка для акимата

Excel и печать одним кликом, без сторонних PDF-библиотек, которые ломаются на кириллице.

Human-in-the-loop

Модель не выписывает наряд. Предсказание уходит в очередь на проверку, решение принимает и подписывает человек.

Архитектура

Как устроена система

Клиент самодостаточен: он остаётся рабочим при недоступности и модели, и базы — это не аварийный режим, а проектное требование полевого приложения.

КЛИЕНТ · PWA / Android / iOS / macOS Съёмка + GPS камера, координаты, вид дерева Очередь IndexedDB фото копятся офлайн Карта · реестр · паспорт Leaflet + OpenStreetMap Service Worker оболочка работает без сети ИНФЕРЕНС · FastAPI + ONNX MobileNetV3-Large 6 классов · severity 1–5 рекомендация из справочника POST /predict → JSON ДАННЫЕ · Supabase Postgres + Auth + Storage таблица trees, профили ролей Row Level Security upsert по client_uid СЛУЖБА ОЗЕЛЕНЕНИЯ Очередь на проверку специалист подтверждает класс Дашборд руководителя KPI, план работ по срочности выгрузка Excel, печать фото класс синхронизация реестр правки

Права — в базе, а не в интерфейсе

Анонимный житель читает реестр и добавляет записи. Менять статус заявки и исправлять класс может только аутентифицированный сотрудник — это политика trees_update_staff на уровне Postgres. Политики DELETE нет ни у кого: муниципальный реестр не должен терять записи по клику.

Устойчивость к обрыву сети

Каждая запись получает client_uid на клиенте, синхронизация делает upsert по нему — повторная отправка не плодит дубли. Запросы к базе обёрнуты таймаутом: зависший лок обновления токена не превращает приложение в кирпич, экран просто уходит в локальный кеш.

Машинное обучение

Модель и честные цифры

Собственный датасет, собранный и размеченный за два дня хакатона. Ниже — реальные метрики валидации, а не подобранные под слайд.

343
фотографии, сплит по дереву — 268 / 75
54,7%
лучшая точность на валидации
0,55
macro F1 по шести классам
16,8 МБ
ONNX-модель для инференса на CPU

Качество по классам

КлассPrecisionRecallF1Тяжесть
Повреждение ствола0,820,820,823
Аварийные ветви0,880,540,675
Сухое0,430,750,554
Наклон0,400,670,504
Болезнь0,640,330,442
Здоровое0,270,430,331

MobileNetV3-Large, дообучение в Google Colab на T4: 8 эпох головы плюс 15 эпох полного fine-tuning, взвешивание классов по частоте, сплит по дереву — не по фотографии, иначе кадры одного объекта попадают и в train, и в val, а метрика становится враньём.

Что мы не выдаём за то, чем оно не является

  • Точность 55% — это MVP, а не продакшн. Опасные классы модель ловит уверенно (аварийные ветви — precision 0,88), путается на паре «здоровое / болезнь». Поэтому решение подтверждает человек, а не автомат.
  • Уверенность коррелирует с правотой. Медиана confidence: 0,93 на верных ответах против 0,68 на ошибочных — низкая уверенность помечает объект как требующий внимания специалиста.
  • Породу определяет человек. На нашем объёме данных достоверно определить вид по фото нельзя, а неверная порода в муниципальном реестре хуже пустого поля.
  • Предиктивный режим — не вторая нейросеть. Истории одних деревьев за годы физически неоткуда взять за два дня. Это детерминированная актуарная модель на трёх наблюдаемых признаках, и она объясняет каждый свой вывод.
  • Рекомендации — справочник, не языковая модель. Риск выдуманной рекомендации в муниципальном документе выше любой пользы от красивой формулировки.
Статус после хакатона. Инференс-сервис и база выключены — держать их ради витрины смысла нет. На качестве классификации это не отразилось: та же модель переехала в браузер и считается прямо на устройстве (ONNX Runtime Web, загрузка один раз, дальше работает и офлайн). Реестр при этом живёт на встроенном демо-наборе, и приложение честно помечает это плашкой. Возврат живых сервисов — две строки в конфигурации.
Технологии

Стек

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

СлойТехнологииПочему так
Клиент Vite · React 18 · TypeScript · React Router PWA открывается по ссылке — городскому сервису не место в очереди на модерацию в сторе
Кроссплатформа Capacitor 6 (Android, iOS) · Electron 33 (macOS) Одна кодовая база, нативные камера и геолокация там, где это нужно
Карта Leaflet 1.9 · OpenStreetMap Бесплатно и без API-ключа — ключ в демо это точка отказа
Данные Supabase — Postgres, Auth, Row Level Security, Storage Настоящее разграничение прав из коробки, без своего бэкенда
Инференс ONNX Runtime Web (в браузере) · FastAPI · Docker Та же модель считается прямо на устройстве — демо живёт без сервера и без холодного старта
Модель PyTorch · MobileNetV3-Large · Google Colab (T4) Лёгкая архитектура: 16,8 МБ и быстрый ответ на бесплатном тарифе
Офлайн Service Worker · IndexedDB · Background Sync и фолбэки Поле — это не Wi-Fi. Три триггера синхронизации, потому что один не работает в Safari
Выгрузка CSV · window.print() Печать браузером вместо PDF-библиотек, которые ломаются на кириллице; CSV Excel открывает нативно
Команда

Кто делал

Три человека и два ноутбука за двое суток. КГУ «Школа-лицей №1 отдела образования города Костаная».

КА
Кабдуалы Алихан Аязбекұлы
Разработка и ML

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

МД
Мирасбек Дайана Асетовна
Дизайн и презентация

Визуальная часть проекта, оформление материалов и подготовка презентации решения.

СГ
Скалаух Глеб Евгеньевич
Дизайн-основа и датасет

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

КГУ «Школа-лицей №1 отдела образования города Костаная» Qostanai Smart City Hackathon 2026 Кейс №1 — мониторинг зелёных насаждений