Дорогие читатели!
Продолжаю серию статей о моём дипломном проекте «Голосовое управление Умным домом». В первой части я рассказал о концепции проекта и технической реализации. Во второй части я хочу погрузиться в самую важную часть любого ИИ-продукта — проектирование пользовательского опыта.
Ведь можно создать самую совершенную нейросеть с точностью 99%, но если пользователь не понимает, как с ней взаимодействовать — проект обречён на провал.
Глава 1: Философия проектирования — продукт для людей
Почему пользовательский опыт важнее кода
Когда я начинал проектировать систему, у меня уже был опыт в стратегическом маркетинге и управлении продуктом. Это сформировало мой подход:
«Я создаю продукты, которые будут удобны людям, и чтобы люди могли настраивать вариативность этих продуктов для себя.»
Эта философия стала фундаментом для всех архитектурных решений. Я понимал, что технология должна служить человеку, а не наоборот.
Ключевые принципы проектирования
При проектировании пользовательского опыта я руководствовался следующими принципами:
Принцип | Описание | Реализация |
|---|---|---|
Невидимый интерфейс | Пользователь не должен думать о системе | Голосовое управление без триггерных слов |
Контекстное понимание | Система понимает намерение, а не только команду | Разделение команды и обычной речи |
Гибкость настроек | Пользователь может настроить систему под себя | Профили пользователей с разными правами |
Безопасность по умолчанию | Защита от несанкционированного доступа | Распознавание голоса для идентификации |
Глава 2: Концепция разделения прав доступа
Зачем нужно разделение прав?
В умном доме живут разные люди: взрослые, дети, пожилые люди, гости. У каждого из них должны быть разные права доступа к функциям дома.
Примеры ситуаций:
Сценарий | Проблема | Решение |
|---|---|---|
Ребёнок пытается войти в помещение не для него | Безопасность | Ограничение доступа по возрасту |
Подросток хочет посмотреть контент 18+ | Родительский контроль | Ограничение по возрастным категориям |
Гость пытается изменить настройки системы | Конфиденциальность | Гостевой режим с ограниченным доступом |
Пожилой человек нуждается в помощи | Забота о здоровье | Мониторинг активности и уведомление родственников |
Архитектура системы разделения прав
┌─────────────────────────────────────────────────────────────────┐ │ СИСТЕМА РАЗДЕЛЕНИЯ ПРАВ ДОСТУПА │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 1. ИДЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЯ │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ Голосовая │ │ Распознавание│ │ Профиль │ │ │ │ │ │ биометрия │→ │ голоса │→ │ пользователя│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 2. ОПРЕДЕЛЕНИЕ УРОВНЯ ДОСТУПА │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ Возраст │ │ Роль в │ │ Время │ │ │ │ │ │ пользователя│ │ семье │ │ суток │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 3. ПРОВЕРКА ПРАВ НА КОМАНДУ │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ Тип команды │ │ Устро��ство │ │ Контекст │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 4. ИСПОЛНЕНИЕ ИЛИ ОТКЛОНЕНИЕ КОМАНДЫ │ │ │ │ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ Исполнить │ │ Отклонить │ │ │ │ │ │ команду │ │ с уведомлением│ │ │ │ │ │ │ │ │ │ │ │ │ └──────────────┘ └──────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘
Уровни доступа
Для обеспечения безопасности многоуровневая система доступа:
Уровень | Описание | Права доступа |
|---|---|---|
Взрослые | Родители, владельцы жилья | Все команды доступны, могут открывать двери, замки, сейфы |
Подростки (13-17 лет) | Ограниченный доступ | Базовые команды (свет, телевизор, музыка), ограниченный доступ к дверям |
Дети (0-12 лет) | Минимальный доступ | Только базовые команды (свет, телевизор), нет доступа к дверям, замкам, окнам |
Гости | Временный доступ | Только гостевые функции, нет доступа к личным данным и устройствам |
Механизм «взросления»
Один из интересных моментов, которые я реализовал — это автоматический переход пользователя из статуса «ребёнок» в статус «взрослый» на основе даты рождения.
Как это работает:
Владелец устройства вводит дату рождения каждого члена семьи
Система хранит эту информацию в постоянной памяти
При достижении определённого возраста права доступа автоматически обновляются
Примеры возрастных ограничений: (вариативно)
Возраст | Доступные функции | Ограничения |
|---|---|---|
0-12 лет | Базовые команды (свет, телевизор) | Нет доступа к дверям, замкам |
13-17 лет | Расширенные (музыка, интернет) | Ограниченный контент |
18+ лет | Полный доступ | Нет ограничений |
«Вот здесь момент того, что вчера ребёнок ещё был ребёнком, а сегодня ребёнок уже переходит в статус взрослого. Это то, над чем можно поработать и пофантазировать.»
Эта функция особенно важна для семей с детьми, потому что родителям не нужно вручную обновлять права доступа — система делает это автоматически.
Глава 3: Контекстное понимание команд
Проблема: команда или обычная речь?
Одна из главных проблем голосового управления — различить команду и обычную речь. Если система будет реагировать на каждое упоминание слова «включи», это создаст больше проблем, чем решит.
Решение: метод с книгой
Для обучения нейросети различать команды и обычную речь я использовал интересный метод:
Этап 1: Чтение книги как фон
Я брал книгу и читал её вслух
В книге было повествование о том, что есть какое-то движение в помещении
Люди ходят, включают телевизор, смотрят передачу
Затем хотят просто включить чайник, чтобы заварить чай
Этап 2: Пауза перед командой
Я дочитывал до момента, где герой книги включает телевизор
Делал короткую паузу, замедление, менялась высота и тембр голоса (это паттерн)
Говорил команду: «Включи телевизор»
Продолжал чтение
Этап 3: Разметка данных
Эта пауза и замедление служили маркером для системы
Нейросеть училась распознавать этот паттерн
После обучения фон убирался
Нейросеть вырабатывала свои паттерны распознавания
┌─────────────────────────────────────────────────────────────────┐ │ МЕТОД ОБУЧЕНИЯ С КНИГОЙ │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ Шаг 1: Чтение книги (фоновая речь) │ │ "Герой вошёл в комнату и включил свет..." │ │ │ │ Шаг 2: Пауза (2-3 секунды) │ │ [система фиксирует паузу как маркер] │ │ │ │ Шаг 3: Команда │ │ "Включи телевизор" │ │ │ │ Шаг 4: Продолжение чтения │ │ "После этого он сел в кресло..." │ │ │ │ Результат: │ │ • Фоновая речь = НЕ команда │ │ • Пауза + фраза = КОМАНДА │ │ • После обучения фон убирается │ │ • Нейросеть вырабатывает свои паттерны │ │ │ └─────────────────────────────────────────────────────────────────┘
Этот метод оказался очень эффективным, потому что:
Естественный контекст — книга создаёт естественный речевой поток
Чёткие маркеры — пауза перед командой служит чётким маркером
Разнообразие — разные книги дают разную лексику и интонации
Масштабируемость — метод можно применять для обучения разным командам
Паттерны, которые вырабатывала нейросеть
После обучения нейросеть научилась распознавать следующие паттерны:
Паттерн | Описание | Пример |
|---|---|---|
Пауза перед командой | Короткая пауза перед командой | «...[пауза] включи свет» |
Изменение интонации | Командная интонация отличается от повествовательной | «ВКЛЮЧИ свет» vs «он включил свет» |
Контекстные маркеры | Определённые слова-триггеры в контексте | «хочу», «нужно», «давай» |
Временные паттерны | Время суток влияет на интерпретацию | «включи свет» утром vs вечером |
Всплески в аудиосигнале
Когда я глазами просматривал результаты разбора звука, я понял, что ещё происходит всплески по голосу.
«Я имею в виду, когда человек читает книгу или в телевизоре происходит какое-то действие, то оно происходит примерно на одной волне, в небольшом диапазоне разброса. А когда человек подаёт команду, то у него меняется выборка голоса. Он становится плотнее и громче. В общем, на цифрах это хорошо заметно, и здесь нейросеть как раз способна извлечь необходимые паттерны для того, чтобы отделить команду от повседневной бытовой речи.»
Сравнение характеристик:
Параметр | Фоновая речь | Команда |
|---|---|---|
Амплитуда | Стабильная, низкая | Пик, всплеск |
Плотность звука | Равномерная | Увеличенная |
Динамический диапазон | Узкий | Широкий |
Пауза перед | Отсутствует | Короткая пауза |
Глава 4: Гибкость vs. Строгие требования
Моя философия балансировки
«Когда есть приказ о том, как необходимо поступать в случае А — то в свой продукт я вшиваю этот алгоритм, потому что это жёсткое требование и проверка на то, чтобы не было подделки. Но когда нет жёстких требований — я придумываю вариативность.»
Этот принцип стал основой для проектирования гибкой, но безопасной системы.
Примеры реализации
Жёсткие требования (неизменяемые):
Проверка прав доступа перед открытием двери
Валидация возраста для контента 18+
Проверка подлинности голоса владельца
Гибкие настройки (настраиваемые):
Громкость уведомлений
Время автоматического отключения света
Персональные сценарии «Утро», «Вечер», «Ночь»
Глава 5: Мониторинг и безопасность
Наблюдение за здоровьем
Одна из расширенных возможностей системы — мониторинг активности пользователей для заботы о здоровье и безопасности.
Сценарий для пожилых людей:
Параметр | Норма | Тревога | Действие |
|---|---|---|---|
Активность | Движение по квартире | Отсутствие движения > 2 часов | Уведомление родственникам |
Скорость движения | Нормальная | Замедление | Уведомление лечащему врачу |
Голос | Нормальный | Тревожный | Экстренный вызов |
Сценарий для детей:
Параметр | Разрешено | Запрещено | Действие |
|---|---|---|---|
Доступ к огню | Нет | Да | Блокировка + уведомление родителям |
Контент 18+ | Нет | Да | Блокировка + запись в лог |
Время у экрана | 2 часа/день | > 2 часов | Предупреждение + блокировка |
Логирование и уведомления
Для обеспечения безопасности все действия логируются:
Действие | Логирование | Уведомление |
|---|---|---|
Ребёнок пытается открыть дверь | ✅ Да | ✅ Родителям |
Гость пытается получить доступ к настройкам | ✅ Да | ✅ Владельцу |
Взрослый изменяет настройки | ✅ Да | ❌ Нет |
Попытка несанкционированного доступа | ✅ Да | ✅ Владельцу + полиция |
Глава 6: Практическая реализация
Пример сценария: ребёнок пытается открыть дверь (например может быт таким)
┌─────────────────────────────────────────────────────────────────┐ │ СЦЕНАРИЙ: РЕБЁНОК ПЫТАЕТСЯ ОТКРЫТЬ ДВЕРЬ │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 1. Ребёнок говорит: "Открой дверь" │ │ │ │ 2. Система распознаёт голос → Профиль: Ребёнок (8 лет) │ │ │ │ 3. Проверка прав доступа: │ │ • Команда: "Открой дверь" │ │ • Устройство: Входная дверь │ │ • Права ребёнка: НЕТ доступа к входной двери │ │ │ │ 4. Решение системы: │ │ • Команда ОТКЛОНЕНА │ │ • Действие: Дверь не открывается │ │ • Логирование: Запись в журнал событий │ │ • Уведомление: Отправка уведомления родителям │ │ │ │ 5. Обратная связь ребёнку: │ │ • Голосовое сообщение: "Извини, ты не можешь открыть │ │ входную дверь. Это могут сделать только взрослые." │ │ │ └─────────────────────────────────────────────────────────────────┘
Пример сценария: автоматическое обновление прав
┌─────────────────────────────────────────────────────────────────┐ │ СЦЕНАРИЙ: ДЕНЬ РОЖДЕНИЯ ПОДРОСТКА │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 1. Система проверяет даты рождения пользователей │ │ │ │ 2. Обнаружено: Пользователь "Сын" достигает 18 лет │ │ │ │ 3. Автоматическое обновление прав: │ │ • Предыдущий статус: Подросток (13-17 лет) │ │ • Новый статус: Взрослый (18+ лет) │ │ • Обновлённые права: Полный доступ ко всем функциям │ │ │ │ 4. Уведомление: │ │ • Пользователю: "Поздравляем! Теперь у вас полный доступ │ │ ко всем функциям умного дома." │ │ • Родителям: "Ваш сын достиг 18 лет. Права доступа │ │ автоматически обновлены." │ │ │ └─────────────────────────────────────────────────────────────────┘
Глава 7: Уроки и выводы
Что сработало хорошо
Метод с книгой — оказался очень эффективным для обучения контекстному пониманию
Автоматическое обновление прав — избавило от ручной настройки
Голосовая биометрия — обеспечила надёжную идентификацию пользователей
Гибкие настройки — позволили адаптировать систему под разные семьи
Что можно улучшить
Распознавание эмоций — можно добавить распознавание эмоционального состояния для более точного понимания контекста
Мультимодальность — добавить распознавание жестов и взгляда для более естественного взаимодействия
Адаптивное обучение — система должна учиться на ошибках и адаптироваться под пользователя
Интеграция с внешними сервисами — интеграция с системами безопасности, экстренными службами
Советы для разработчиков
Начинайте с пользовательских сценариев — не с архитектуры, а с того, как пользователь будет использовать систему
Тестируйте на реальных людях — не только на тестовых данных
Думайте о крайних случаях — дети, пожилые, люди с особенностями
Соблюдайте баланс между интеллектом и контролем — система должна быть умной, но не слишком
Что будет в следующей части?
Часть 3: Архитектура нейросети
В третьей части я расскажу о технической реализации нейросети:
Почему была выбрана архитектура Multi-input CNN
Как обрабатываются три группы признаков (SSR, CHZ, MFC)
Детали реализации свёрточных слоёв
Оптимизация для работы в реальном времени
📚 Источники и ресурсы
Исходные материалы проекта
Файл | Описание | Ссылка |
|---|---|---|
Презентация | Презентация дипломного проекта | [Скачать PDF](! Презентация дипломного проекта.pdf) |
Jupyter Notebook | Код модели и обучение | [SmartHome v4.6.ipynb](SmartHome v4.6.ipynb) |
GitHub | Репозиторий проекта |
Будет продолжение
