tr0lleybu5

tr0lleybu5

На Пикабу
Дата рождения: 09 сентября 1990
поставил 4 плюса и 0 минусов
492 рейтинг 3 подписчика 19 подписок 5 постов 2 в горячем

Камчатка. Касатки

прислал товарищ. работает на туристическом судне

ИИ для управления системой "Умный дом". Мой дипломный проект

Будучи адептом идеи "вкалывают роботы, а не человек", в попытках автоматизировать свой дом, с целью больше никогда не вставать с дивана понял, что облачные решения вроде Алисы и Гугла слишком медленны, ненадежны и дороги для студента. Так еще и какая-то злобная компания будет слышать все что происходит в моем доме! На постоянной основе! В общем, было решено делать своего голосового помощника, да чтобы не просто выполнял команды, а еще и поговорить с тобой мог. Еще несколько видео с демонстрацией работы в конце поста.

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

  • cервер Intel NUC 5I3RYK - 2 шт.;

  • USB ZigBee координатор - 1 шт.;

  • умная беспроводная кнопка– 2 шт.;

  • электромеханический замок 12в – 1 шт.;

  • умные лампочки – 1 шт.;

  • умное реле – 1 шт.;

  • датчик температуры и влажности – 1 шт.;

  • камера видеонаблюдения – 2 шт.

Установлено все следующим образом, пока оборудована только любезно выделенное мне родственниками пространство в 9 квадратных метров, но имеем что имеем:

ИИ для управления системой "Умный дом". Мой дипломный проект Гаджеты, Умный дом, Голосовой помощник, Разработка, Искусственный интеллект, Программирование, Железо, Видео, Длиннопост

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

ИИ для управления системой "Умный дом". Мой дипломный проект Гаджеты, Умный дом, Голосовой помощник, Разработка, Искусственный интеллект, Программирование, Железо, Видео, Длиннопост

Реализация на данный момент выглядит так:

ИИ для управления системой "Умный дом". Мой дипломный проект Гаджеты, Умный дом, Голосовой помощник, Разработка, Искусственный интеллект, Программирование, Железо, Видео, Длиннопост
ИИ для управления системой "Умный дом". Мой дипломный проект Гаджеты, Умный дом, Голосовой помощник, Разработка, Искусственный интеллект, Программирование, Железо, Видео, Длиннопост

Все объединено в Home Assistant:

ИИ для управления системой "Умный дом". Мой дипломный проект Гаджеты, Умный дом, Голосовой помощник, Разработка, Искусственный интеллект, Программирование, Железо, Видео, Длиннопост

камеры китайское Г, поэтому постоянно отваливаются. на момент написания поста заменены на нормальные

С системой УД разобрались, теперь к самому помощнику. Задачи перед ним стоят следующие:

  • выполнение сценариев УД, прописанных в хоум ассистант либо внутри самого помощника

  • управление устройствами УД по отдельности по именам

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

  • поиск информации в Интернете

В качестве языка выбрал питон. ибо просто.

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

Чтобы помощник мог разговаривать с пользователем, ему нужно знать, что ответить. Скачал несколько готовых баз для чат-ботов, объединил, адаптировал. Получилась система вопрос-ответ. Тупенькая, но для начала пойдет. Объем 78.000 пар вопрос-ответ. С этим помощник сможет хотя бы более-менее осмысленно отвечать на вопросы, и это полностью локально. А беседы я с ним водить и не собирался.

ИИ для управления системой "Умный дом". Мой дипломный проект Гаджеты, Умный дом, Голосовой помощник, Разработка, Искусственный интеллект, Программирование, Железо, Видео, Длиннопост

Логика работы, согласно поставленным задачам заключается в следующем:

  1. Помощник распознает начало фразы, в качестве триггера - резкое повышение громкости звука относительно фона. За конец фразы принято возвращение громкости в норму, равное окружающему шуму.

  2. При помощи языковой модели распознаются слова, и превращаются в массив данных, разделенных по слову

  3. Распознанные слова сравниваются с массивом имен, чтобы однозначно определить, была ли адресована сказанная фраза помощнику. При этом не имеет значения, сказано имя в начале, в конце или в середине. (Робот, включи лампу. Включи лампу Бот.) Можно использовать несколько имен.

    names = ['саша','саня','сашка','сашенька','санечка','александр','железяка','консерва','бот',"саш","сша","сани"]

  4. Распознаем, содержится ли в сказанной фразе какая-либо команда для бота. В коде команды представляют собой набор слов, которыми с наибольшей вероятностью пользователь задаст команду. Опытным путем выяснил, что при совпадении 2-х и более слов команды ее можно смело выполнять. (На этом этапе не помешало бы сделать управление каждым устройством по отдельности, то есть получение с сервера умного дома названий устройств и т.д.), но пока я до этого не дошел. Задал через "обычные" команды два сценария для управления замком двери - да и все пока. Распознал команду - отправил ее на серверную часть помощника. Серверная часть помощника провзаимодействовала с сервером Умного Дома, отправила ответ о выполнении/не выполнении команды обратно в клиент, клиент произнес ответ для пользователя.

В клиенте (первый элемент массива - название команды, последующие - содержание):

['погода на улице', 'погода','погодой','улице','за','окном','сегодня'],

['вошел в дом', 'я','дома','пришёл'],

['вышел из дома', 'я','ухожу','до','вечера'],

['доброе утро', 'доброе','утро'],

['спокойной ночи', 'спокойной','ночи'],

['вопрос вики', 'что', 'такое', 'кто', 'такой', 'такая'],

['закрыть дверь', 'закрой', 'дверь', 'заблокируй'],

['открыть дверь', 'открой', 'дверь', 'разблокируй'],

['зигби заряд', 'заряд','оставшийся','батарейки', 'заряда', 'остаток']

На сервере логика простая:

if final_command == 'закрыть дверь':

close_door_and_turn_on_lock() - функция которая общается с сервером умного дома и что-то делает

Отдельно реализована функция поиска в Википедии, триггерящаяся на слова "что такое" или "кто такой", выполняет поиск в энциклопедии и зачитывает первые два предложения. Этого достаточно для отражения сути.

Говоря в общем о взаимодействии сервера и клиента, в данный момент я использую веб-сокеты для передачи информации между ними. Позднее планирую перейти на restAPI, чтобы сервер и клиент равноправно триггерили друг друга на выполнение каких-то действий. То есть чтобы например сервер, анализируя погодные условия, мог послать в клиент фразу для произношения "через два часа начнется дождь".

5. Если не нашли ни команды, ни триггера для поиска в википедии, включаем сценарий имитации диалога. Он работает по методу сопоставления гештальт-паттернов, придуманным в 1983 году Джоном У. Рэтклиффом и Джоном А. Обершелпом и опубликован в журнале доктора Добба в июле 1988 года. Простым языком, мы, имя базу вопрос-ответ, сравниваем сказанную пользователем фразу с каждым вопросом в этой базе, на выходе получая массив коэффициентов подобия (на сколько заданный вопрос соответствует конкретному имеющемуся) от 0 (нет ни одной совпадающей буквы) до 1 (полное совпадение), после чего ответ, где коэффициент подобия оказался наибольшим, выводим в речевой движок и пользователь слышит ответ.

Вот и вся суть. Ниже прикрепляю несколько видео с демонстрацией работы помощника. Планы на будущее этого проекта:

  • написать код для управления каждым умным устройством по отдельности, по именам получаемым с сервера Умного дома

  • заменить метод гештальт-паттернов на какой-никакой обучающийся ИИ

  • расширить парк умных устройств, написать новые сценарии взаимодействия с ними

  • отказаться от web-сокетов в пользу restAPI

Показать полностью 6 3

«да зачем мне к этим ремонтерам идти, я сам на все руки мастер, там по любому просто проводок отошел!»

1) Принесли со словами «купили в сервисе в ТЦ, что-то сенсор на дисплее тупить стал и FaceID плохо работает»
замена дисплея на оригинальный переклей, замена АКБ, полная чистка под микроскопом. для разборки аппарат пришлось буквально разрывать)

«да зачем мне к этим ремонтерам идти, я сам на все руки мастер, там по любому просто проводок отошел!» Ремонт, Трэш, Вертикальное видео, Длиннопост, Видео, Без звука

2) Принесли из другого сервиса - «наш сборщик профи, это по любому запчасти бракованные, посмотри что именно сдохло»
Денег взял как за полноценное восстановление сокета. Ибо нехер.

«да зачем мне к этим ремонтерам идти, я сам на все руки мастер, там по любому просто проводок отошел!» Ремонт, Трэш, Вертикальное видео, Длиннопост, Видео, Без звука

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

«да зачем мне к этим ремонтерам идти, я сам на все руки мастер, там по любому просто проводок отошел!» Ремонт, Трэш, Вертикальное видео, Длиннопост, Видео, Без звука

4) Последствия самостоятельной чистки старичка HP. Хорошо хоть акб у аппарата мертвый, и матрицу с питанием не получилось у человека передернуть…
Шлейф восстановили.

«да зачем мне к этим ремонтерам идти, я сам на все руки мастер, там по любому просто проводок отошел!» Ремонт, Трэш, Вертикальное видео, Длиннопост, Видео, Без звука
Показать полностью 4 1

История одной плойки

История одной плойки Ремонт, Playstation, Реболлинг, Длиннопост
История одной плойки Ремонт, Playstation, Реболлинг, Длиннопост
История одной плойки Ремонт, Playstation, Реболлинг, Длиннопост
История одной плойки Ремонт, Playstation, Реболлинг, Длиннопост
История одной плойки Ремонт, Playstation, Реболлинг, Длиннопост
История одной плойки Ремонт, Playstation, Реболлинг, Длиннопост

пришла с зависанием на синем огоньке смерти. со слов клиента не ронял, не бил. :)

Показать полностью 6

Ответ на пост «Общение с клиентами»

был помню похожий случай - пришла мадам с убитым в хлам «самсунгом». половины кнопок на клавиатуре не хватает, петли вырваны, ноутбук хрустит, пердит, разъем питания выломан под корень, матрица моргает…… в общем потенциальный труп, отнести бы на помойку да забыть. пришла и слезно умоляла восстановить именно его. объявил стоимость в 7.500 за все работы, причем уже с учетом большой скидки. мадам все равно торгуется, упрашивает сделать подешевле, не менять клавиатуру и обойтись всем самым дешевым и необходимым. все мы люди, и ситуации бывают разные - подумал я. может ей учиться надо, а возможности купить другой нет. взялся восстановить за смешные 3 тыс. за два дня выправил ей корпус, заменил разъем питания, шлейф матрицы, очистил плату от грязи, поменял термоинтерфейсы и восстановил петли, даже весь ноут тряпочкой со специальным очистителем протер, чтобы человеку приятно было. это был максимум, который можно было сделать с этим трупом. топкейс ноутбука получилось закрыть только с зазором примерно в 0.5мм со стороны матрицы - такая особенность конструкции ноутбука, что вырванные петли нельзя ослабить, и соответственно клея и пластика для их восстановления пришлось лепить ну очень уж много. в итоге пришла мадам эта, вся из себя… и началось… и разъем ей не такой впаяли (я устанавливал оригинальный))), и выглядит все хуже чем было, и не работает ничего…. напоминаю, за 3 тыс рублей при стоимости работ в десятку минимум. бодались мы с этой дамой минут 15, сначала я пытался обьяснить, что матрица не моргает, ноут заряжается, крышку теперь можно спокойно открыть…. все без толку. забрал у нее документы о сдаче ноутбука в сервис и со словами «не платите, и идите туда где вам сделают лучше» отправил восвояси, ибо нервы дороже себестоимости запчастей, которые я под него закупил.

Отличная работа, все прочитано!