- BrainTools - https://www.braintools.ru -

От диплома до продакшена: Часть 2: Как я проектировал опыт пользователя

Дорогие читатели!

Продолжаю серию статей о моём дипломном проекте «Голосовое управление Умным домом». В первой части я рассказал о концепции проекта и технической реализации. Во второй части я хочу погрузиться в самую важную часть любого ИИ-продукта — проектирование пользовательского опыта [1].

Ведь можно создать самую совершенную нейросеть с точностью 99%, но если пользователь не понимает, как с ней взаимодействовать — проект обречён на провал.


Глава 1: Философия проектирования — продукт для людей

Почему пользовательский опыт важнее кода

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

«Я создаю продукты, которые будут удобны людям, и чтобы люди могли настраивать вариативность этих продуктов для себя.»

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

Ключевые принципы проектирования

При проектировании пользовательского опыта я руководствовался следующими принципами:

Принцип

Описание

Реализация

Невидимый интерфейс

Пользователь не должен думать о системе

Голосовое управление без триггерных слов

Контекстное понимание

Система понимает намерение, а не только команду

Разделение команды и обычной речи

Гибкость настроек

Пользователь может настроить систему под себя

Профили пользователей с разными правами

Безопасность по умолчанию

Защита от несанкционированного доступа

Распознавание голоса для идентификации


Глава 2: Концепция разделения прав доступа

Зачем нужно разделение прав?

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

Примеры ситуаций:

Сценарий

Проблема

Решение

Ребёнок пытается войти в помещение не для него

Безопасность

Ограничение доступа по возрасту

Подросток хочет посмотреть контент 18+

Родительский контроль

Ограничение по возрастным категориям

Гость пытается изменить настройки системы

Конфиденциальность

Гостевой режим с ограниченным доступом

Пожилой человек нуждается в помощи

Забота о здоровье

Мониторинг активности и уведомление родственников

Архитектура системы разделения прав

┌─────────────────────────────────────────────────────────────────┐
│              СИСТЕМА РАЗДЕЛЕНИЯ ПРАВ ДОСТУПА                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  1. ИДЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЯ                          │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │  Голосовая   │  │  Распознавание│  │  Профиль    │  │   │
│  │  │  биометрия   │→ │  голоса       │→ │  пользователя│  │   │
│  │  │              │  │               │  │              │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └─────────────────────────────────────────────────────────┘   │
│                          │                                      │
│                          ▼                                      │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  2. ОПРЕДЕЛЕНИЕ УРОВНЯ ДОСТУПА                          │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │  Возраст     │  │  Роль в      │  │  Время       │  │   │
│  │  │  пользователя│  │  семье        │  │  суток       │  │   │
│  │  │              │  │               │  │              │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └─────────────────────────────────────────────────────────┘   │
│                          │                                      │
│                          ▼                                      │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  3. ПРОВЕРКА ПРАВ НА КОМАНДУ                            │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │  Тип команды │  │  Устройство  │  │  Контекст    │  │   │
│  │  │              │  │               │  │              │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └─────────────────────────────────────────────────────────┘   │
│                          │                                      │
│                          ▼                                      │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  4. ИСПОЛНЕНИЕ ИЛИ ОТКЛОНЕНИЕ КОМАНДЫ                   │   │
│  │  ┌──────────────┐  ┌──────────────┐                    │   │
│  │  │  Исполнить   │  │  Отклонить   │                    │   │
│  │  │  команду     │  │  с уведомлением│                  │   │
│  │  │              │  │               │                    │   │
│  │  └──────────────┘  └──────────────┘                    │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
От диплома до продакшена: Часть 2: Как я проектировал опыт пользователя - 1 [2]

Уровни доступа

Для обеспечения безопасности многоуровневая система доступа:

Уровень

Описание

Права доступа

Взрослые

Родители, владельцы жилья

Все команды доступны, могут открывать двери, замки, сейфы

Подростки (13-17 лет)

Ограниченный доступ

Базовые команды (свет, телевизор, музыка), ограниченный доступ к дверям

Дети (0-12 лет)

Минимальный доступ

Только базовые команды (свет, телевизор), нет доступа к дверям, замкам, окнам

Гости

Временный доступ

Только гостевые функции, нет доступа к личным данным и устройствам

Механизм «взросления»

Один из интересных моментов, которые я реализовал — это автоматический переход пользователя из статуса «ребёнок» в статус «взрослый» на основе даты рождения.

Как это работает:

  1. Владелец устройства вводит дату рождения каждого члена семьи

  2. Система хранит эту информацию в постоянной памяти [3]

  3. При достижении определённого возраста права доступа автоматически обновляются

Примеры возрастных ограничений: (вариативно)

Возраст

Доступные функции

Ограничения

0-12 лет

Базовые команды (свет, телевизор)

Нет доступа к дверям, замкам

13-17 лет

Расширенные (музыка, интернет)

Ограниченный контент

18+ лет

Полный доступ

Нет ограничений

«Вот здесь момент того, что вчера ребёнок ещё был ребёнком, а сегодня ребёнок уже переходит в статус взрослого. Это то, над чем можно поработать и пофантазировать.»

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


Глава 3: Контекстное понимание команд

Проблема: команда или обычная речь?

Одна из главных проблем голосового управления — различить команду и обычную речь. Если система будет реагировать [4] на каждое упоминание слова «включи», это создаст больше проблем, чем решит.

Решение: метод с книгой

Для обучения [5] нейросети различать команды и обычную речь я использовал интересный метод:

Этап 1: Чтение книги как фон

  • Я брал книгу и читал её вслух

  • В книге было повествование о том, что есть какое-то движение в помещении

  • Люди ходят, включают телевизор, смотрят передачу

  • Затем хотят просто включить чайник, чтобы заварить чай

Этап 2: Пауза перед командой

  • Я дочитывал до момента, где герой книги включает телевизор

  • Делал короткую паузу, замедление, менялась высота и тембр голоса (это паттерн)

  • Говорил команду: «Включи телевизор»

  • Продолжал чтение

Этап 3: Разметка данных

  • Эта пауза и замедление служили маркером для системы

  • Нейросеть училась распознавать этот паттерн

  • После обучения фон убирался

  • Нейросеть вырабатывала свои паттерны распознавания

┌─────────────────────────────────────────────────────────────────┐
│              МЕТОД ОБУЧЕНИЯ С КНИГОЙ                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Шаг 1: Чтение книги (фоновая речь)                            │
│  "Герой вошёл в комнату и включил свет..."                     │
│                                                                 │
│  Шаг 2: Пауза (2-3 секунды)                                    │
│  [система фиксирует паузу как маркер]                          │
│                                                                 │
│  Шаг 3: Команда                                                │
│  "Включи телевизор"                                            │
│                                                                 │
│  Шаг 4: Продолжение чтения                                     │
│  "После этого он сел в кресло..."                              │
│                                                                 │
│  Результат:                                                    │
│  • Фоновая речь = НЕ команда                                   │
│  • Пауза + фраза = КОМАНДА                                     │
│  • После обучения фон убирается                                │
│  • Нейросеть вырабатывает свои паттерны                        │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
От диплома до продакшена: Часть 2: Как я проектировал опыт пользователя - 2 [2]

Этот метод оказался очень эффективным, потому что:

  1. Естественный контекст — книга создаёт естественный речевой поток

  2. Чёткие маркеры — пауза перед командой служит чётким маркером

  3. Разнообразие — разные книги дают разную лексику и интонации

  4. Масштабируемость — метод можно применять для обучения разным командам

Паттерны, которые вырабатывала нейросеть

После обучения нейросеть научилась распознавать следующие паттерны:

Паттерн

Описание

Пример

Пауза перед командой

Короткая пауза перед командой

«…[пауза] включи свет»

Изменение интонации

Командная интонация отличается от повествовательной

«ВКЛЮЧИ свет» vs «он включил свет»

Контекстные маркеры

Определённые слова-триггеры в контексте

«хочу», «нужно», «давай»

Временные паттерны

Время суток влияет на интерпретацию

«включи свет» утром vs вечером

Всплески в аудиосигнале

Когда я глазами просматривал результаты разбора звука, я понял, что ещё происходит всплески по голосу.

«Я имею в виду, когда человек читает книгу или в телевизоре происходит какое-то действие, то оно происходит примерно на одной волне, в небольшом диапазоне разброса. А когда человек подаёт команду, то у него меняется выборка голоса. Он становится плотнее и громче. В общем, на цифрах это хорошо заметно, и здесь нейросеть как раз способна извлечь необходимые паттерны для того, чтобы отделить команду от повседневной бытовой речи.»

Сравнение характеристик:

Параметр

Фоновая речь

Команда

Амплитуда

Стабильная, низкая

Пик, всплеск

Плотность звука

Равномерная

Увеличенная

Динамический диапазон

Узкий

Широкий

Пауза перед

Отсутствует

Короткая пауза


Глава 4: Гибкость vs. Строгие требования

Моя философия балансировки

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

Этот принцип стал основой для проектирования гибкой, но безопасной системы.

Примеры реализации

Жёсткие требования (неизменяемые):

  • Проверка прав доступа перед открытием двери

  • Валидация возраста для контента 18+

  • Проверка подлинности голоса владельца

Гибкие настройки (настраиваемые):

  • Громкость уведомлений

  • Время автоматического отключения света

  • Персональные сценарии «Утро», «Вечер», «Ночь»


Глава 5: Мониторинг и безопасность

Наблюдение за здоровьем

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

Сценарий для пожилых людей:

Параметр

Норма

Тревога

Действие

Активность

Движение по квартире

Отсутствие движения > 2 часов

Уведомление родственникам

Скорость движения

Нормальная

Замедление

Уведомление лечащему врачу

Голос

Нормальный

Тревожный

Экстренный вызов

Сценарий для детей:

Параметр

Разрешено

Запрещено

Действие

Доступ к огню

Нет

Да

Блокировка + уведомление родителям

Контент 18+

Нет

Да

Блокировка + запись в лог

Время у экрана

2 часа/день

> 2 часов

Предупреждение + блокировка

Логирование и уведомления

Для обеспечения безопасности все действия логируются:

Действие

Логирование

Уведомление

Ребёнок пытается открыть дверь

✅ Да

✅ Родителям

Гость пытается получить доступ к настройкам

✅ Да

✅ Владельцу

Взрослый изменяет настройки

✅ Да

❌ Нет

Попытка несанкционированного доступа

✅ Да

✅ Владельцу + полиция


Глава 6: Практическая реализация

Пример сценария: ребёнок пытается открыть дверь (например может быт таким)

┌─────────────────────────────────────────────────────────────────┐
│         СЦЕНАРИЙ: РЕБЁНОК ПЫТАЕТСЯ ОТКРЫТЬ ДВЕРЬ                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  1. Ребёнок говорит: "Открой дверь"                            │
│                                                                 │
│  2. Система распознаёт голос → Профиль: Ребёнок (8 лет)        │
│                                                                 │
│  3. Проверка прав доступа:                                     │
│     • Команда: "Открой дверь"                                  │
│     • Устройство: Входная дверь                                │
│     • Права ребёнка: НЕТ доступа к входной двери               │
│                                                                 │
│  4. Решение системы:                                           │
│     • Команда ОТКЛОНЕНА                                        │
│     • Действие: Дверь не открывается                           │
│     • Логирование: Запись в журнал событий                     │
│     • Уведомление: Отправка уведомления родителям              │
│                                                                 │
│  5. Обратная связь ребёнку:                                    │
│     • Голосовое сообщение: "Извини, ты не можешь открыть       │
│       входную дверь. Это могут сделать только взрослые."       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
От диплома до продакшена: Часть 2: Как я проектировал опыт пользователя - 3 [2]

Пример сценария: автоматическое обновление прав

┌─────────────────────────────────────────────────────────────────┐
│         СЦЕНАРИЙ: ДЕНЬ РОЖДЕНИЯ ПОДРОСТКА                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  1. Система проверяет даты рождения пользователей              │
│                                                                 │
│  2. Обнаружено: Пользователь "Сын" достигает 18 лет            │
│                                                                 │
│  3. Автоматическое обновление прав:                            │
│     • Предыдущий статус: Подросток (13-17 лет)                 │
│     • Новый статус: Взрослый (18+ лет)                         │
│     • Обновлённые права: Полный доступ ко всем функциям        │
│                                                                 │
│  4. Уведомление:                                               │
│     • Пользователю: "Поздравляем! Теперь у вас полный доступ   │
│       ко всем функциям умного дома."                           │
│     • Родителям: "Ваш сын достиг 18 лет. Права доступа         │
│       автоматически обновлены."                                │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
От диплома до продакшена: Часть 2: Как я проектировал опыт пользователя - 4 [2]

Глава 7: Уроки и выводы

Что сработало хорошо

  1. Метод с книгой — оказался очень эффективным для обучения контекстному пониманию

  2. Автоматическое обновление прав — избавило от ручной настройки

  3. Голосовая биометрия — обеспечила надёжную идентификацию пользователей

  4. Гибкие настройки — позволили адаптировать систему под разные семьи

Что можно улучшить

  1. Распознавание эмоций [6] — можно добавить распознавание эмоционального состояния для более точного понимания контекста

  2. Мультимодальность — добавить распознавание жестов и взгляда для более естественного взаимодействия

  3. Адаптивное обучение — система должна учиться на ошибках и адаптироваться под пользователя

  4. Интеграция с внешними сервисами — интеграция с системами безопасности, экстренными службами

Советы для разработчиков

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

  2. Тестируйте на реальных людях — не только на тестовых данных

  3. Думайте о крайних случаях — дети, пожилые, люди с особенностями

  4. Соблюдайте баланс между интеллектом [7] и контролем — система должна быть умной, но не слишком


Что будет в следующей части?

Часть 3: Архитектура нейросети

В третьей части я расскажу о технической реализации нейросети:

  • Почему была выбрана архитектура Multi-input CNN

  • Как обрабатываются три группы признаков (SSR, CHZ, MFC)

  • Детали реализации свёрточных слоёв

  • Оптимизация для работы в реальном времени


📚 Источники и ресурсы

Исходные материалы проекта

Файл

Описание

Ссылка

Презентация

Презентация дипломного проекта

[Скачать PDF](! Презентация дипломного проекта.pdf)

Jupyter Notebook

Код модели и обучение

[SmartHome v4.6.ipynb](SmartHome v4.6.ipynb)

GitHub

Репозиторий проекта

github.com/AlekseyVB/SmartHome [8]

Будет продолжение

Автор: AlekseiVB

Источник [9]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/26218

URLs in this post:

[1] опыта: http://www.braintools.ru/article/6952

[2] Image: https://sourcecraft.dev/

[3] памяти: http://www.braintools.ru/article/4140

[4] реагировать: http://www.braintools.ru/article/1549

[5] обучения: http://www.braintools.ru/article/5125

[6] эмоций: http://www.braintools.ru/article/9540

[7] интеллектом: http://www.braintools.ru/article/7605

[8] github.com/AlekseyVB/SmartHome: https://github.com/AlekseyVB/SmartHome.git

[9] Источник: https://habr.com/ru/articles/1001908/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1001908

www.BrainTools.ru

Rambler's Top100