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