Страница 17 из 64

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Пн июн 25, 2018 3:18 pm
rom77
Привет, есть какиенибудь новости, ждем прорыва....

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Ср июн 27, 2018 9:42 am
dance12r
Всем привет.
У меня вопрос к владельцам PS3eye:
подключил камеру в качестве микрофона, записываю через нее ключевую фразу. при прослушивании оказалось,что микрофон очень тихий, мой голос еле слышно, хотя остальные звуки слышно нормально. Увеличить громкость через alsamixer не могу, при выборе этого устройства миксер закрывается с ошибкой:

Код: Выделить всё

cannot load mixer controls: Invalid argument
кто-то может поделится настройками АЛСЫ для этой камеры или подсказать куда копать?

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Чт июн 28, 2018 5:35 pm
dance12r
Удалось заставить апельсинку говорить. Есть несколько нюансов:
Инструкция по скриптам абсолютно нетривиальна и если ей следовать то к сожалению работать не будетж, причиной тому, как говорилось ранее, некорректность записывания settings.ini файла через модуль. я поступил следующим образом:
1. установил Armbian с ядром 3.4, пробовал и 4.14 но ничего толкового не вышло из-за микрофонов
2. дождался пока обновится система (заняло минут 25)
3. создал /etc/asound.conf согласно инструкции
4. клонировал скрипты, инсталировал сноубой, включил его в автозагрузку - согласно инструкции
5. Выключил(!!!) Апельсинку и потом создал терминал и добавил в модуле MDM VoiceAssistant создал новое устройство.
тут поясню - если оставить включенным апельсин, то модуль перезапишет settings.ini и ничего работать не будет. дожидаемся выполнение модуля - он ругнется,что мол есть ошибка в пхп - она связана с тем,что он не смог передать параметры на устройство. стартуем апельсин и идем ручками править settings.ini. Вписываем ИД утройства из модуля (если создавался впервые то будет 1), так же название - можно скопировать из модуля, ИД терминала - создавали ранее. ИП адресс устройства, ИП адресс сервера,чем распознаем и чем говорим... поля типа linkedroom and linked_object... я не заполнял.
6. На сайте сноубоя сделал свой фалик - переименовал его в model1.pmdl и перезаписал существующий
7. перезагрузил апельсин и вуаля

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

УПД:
картинки нужны для более наглядной инструкции?

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Чт июн 28, 2018 7:37 pm
djleon
dance12r писал(а):
Чт июн 28, 2018 5:35 pm
Удалось заставить апельсинку говорить. Есть несколько нюансов:
Инструкция по скриптам абсолютно нетривиальна и если ей следовать то к сожалению работать не будетж, причиной тому, как говорилось ранее, некорректность записывания settings.ini файла через модуль. я поступил следующим образом:
1. установил Armbian с ядром 3.4, пробовал и 4.14 но ничего толкового не вышло из-за микрофонов
2. дождался пока обновится система (заняло минут 25)
3. создал /etc/asound.conf согласно инструкции
4. клонировал скрипты, инсталировал сноубой, включил его в автозагрузку - согласно инструкции
5. Выключил(!!!) Апельсинку и потом создал терминал и добавил в модуле MDM VoiceAssistant создал новое устройство.
тут поясню - если оставить включенным апельсин, то модуль перезапишет settings.ini и ничего работать не будет. дожидаемся выполнение модуля - он ругнется,что мол есть ошибка в пхп - она связана с тем,что он не смог передать параметры на устройство. стартуем апельсин и идем ручками править settings.ini. Вписываем ИД утройства из модуля (если создавался впервые то будет 1), так же название - можно скопировать из модуля, ИД терминала - создавали ранее. ИП адресс устройства, ИП адресс сервера,чем распознаем и чем говорим... поля типа linkedroom and linked_object... я не заполнял.
6. На сайте сноубоя сделал свой фалик - переименовал его в model1.pmdl и перезаписал существующий
7. перезагрузил апельсин и вуаля

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

УПД:
картинки нужны для более наглядной инструкции?
Обязательно. раз инструкция выстрадана и работает, то всё с первого пункта.

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Чт июн 28, 2018 10:33 pm
dance12r
Дано:
Апельсин, плата расширения, копус - как у автора
PS3eye - в качестве USB микрофона
Armbian
Установка:
(думаю установку Armbian описывать не нужно)
* Узнаем IP у роутера
* Подключаемся по SSH
* Дожидаемся пока Armbian обновиться(htop - не должно быть процессов dpkg, python-upgrade... или как то так)
* Правим asound.conf

Код: Выделить всё

sudo nano /etc/asound.conf
Мой файлПоказать
pcm.!default {
type asym
playback.pcm "playback"
capture.pcm "capture"
}

pcm.playback {
type plug
slave.pcm "dmixed"
}

pcm.capture {
type plug
slave.pcm "array"
}

pcm.dmixed {
type dmix
slave.pcm "hw:0,0"
ipc_key 555555
}

pcm.array {
type dsnoop
slave {
pcm "hw:2,0" #моя камера (узнать можно через aplay -l)
channels 4 #у PS3eye массив из 4 микрофонов (еще не выяснил влияет ли это как то)
}
ipc_key 666666
}
* Устанавливаем скриипты (все согласно инструкции из git),

Код: Выделить всё

cd ~/
git clone https://github.com/devoff/mdmPiTerminal
cd mdmPiTerminal
chmod +x scripts/mdm-pi-installer.sh
./scripts/mdm-pi-installer.sh
Процесс занимает какое то время, можно сходить на перекур)
* Включаем скрипты в автозагрузку

Код: Выделить всё

chmod +x systemd/service-installer.sh
sudo ./systemd/service-installer.sh

sudo systemctl enable mdmpiterminal.service
sudo systemctl enable mdmpiterminalsayreply.service
* выключаем Апельсин
* Настраиваем терминал:
Идем в МЖД - Настройки - Терминалы
Картинка 1Показать
Изображение
* Записываем ID терминала
в браузере в конце строки есть номер (что-то вроде этого)
&md=terminals&inst=adm&view_mode=edit_terminals&id=7
* Добавляем устройство в MDM VoiceAssistant
из-за того, что Апельсин выключен - получим ошибку (это нормально, модуль все равно передаст на него плохой settings.ini так, что это нам даже на руку)
Картинка 2Показать
Изображение
Картинка 3Показать
Изображение
* Записываем ID устройства
по аналогии как с терминалами
&md=mdmPiTerminal&inst=adm&view_mode=edit_mpt&id=5
* Записываем свой вариант ключевого слова на сайте https://snowboy.kitt.ai/, скачиваем готовый файл в формате .pmdl
* Запускаем Апельсин а перекидываем на него скачаный файлик
* переименовываем его (мой файл назывался alice.pmdl)

Код: Выделить всё

mv alice.pmdl model1.pmdl
* перезаписываем существующий файл

Код: Выделить всё

mv model1.pmdl mdmPiTerminal/src/resources
* Правим settings.ini

Код: Выделить всё

nano mdmPiTerminal/src/settings.ini
ниже мой файл с комментариями
мой файлПоказать
[Settings]
id = 5 # ID устройства в модуле (узнавали ранее)
title = OrangeMi # Название из модуля
name = OrangeMi # Название из модуля
linkedroom = # не заполнял
ip = 192.168.200.23 # IP адресс устройства
providertts = Yandex # Движок синтеза речи (Yandex или Google)
apikeytts = XXXX # в случае Yandex нужен API ключ
providerstt = Google # Движок распознавания речи
apikeystt = # В случае Google можно не заполнять
sensitivity = 0.5 # Чувствительность распознавания (Выше - распознавание лучше, но могут быть ложные срабатывания)
alarmkwactivated = 1 # Звук динь после распознавания ключевой фразы (1- включено, 0 - выключено)
alarmtts = 0 # Звук перед сообщением
alarmstt = 0 # Звук после распознания комманды
linked_object = # не заполнял
linked_property = # не заполнял
id_terminal = 7 # ID терминала (узнавали ранее)
ip_server = 192.168.200.2 # IP адресс сервера МЖД

[Boot]
firstboot = 0 #я так и не понял зачем это(поидее при первом запуске (тут стоит 1) должен говорить свой ИП, но я не проверял)
* перезагружаем Апельсин и пробуем обратится по ключевому слову

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Пт июн 29, 2018 11:35 am
dance12r
Еще, в картинке №3 меня смущает "-->" внизу, перед кнопкой сохранить. Судя по всему как то не корректно комментируется "ненужный" код. Возможно с этим связана некорректная передача файла на Апельсин?
Исходя из кода - где-то здесь

Код: Выделить всё

 <!-- LINKED_OBJECT (varchar)
        <div class="form-group">
         <label for="linked_object" class="col-lg-3 control-label"[#if ERR_LINKED_OBJECT#] style="color:red;font-weight:bold"[#endif#]>
         <#LANG_LINKED_OBJECT#>:
         </label>
         <div class="col-lg-4"><input type="text" class="form-control" name="linked_object" value="[#LINKED_OBJECT#]" id="linked_object"></div>
        </div> -->
        <!-- LINKED_PROPERTY (varchar) 
        <div class="form-group">
         <label for="linked_property" class="col-lg-3 control-label"[#if ERR_LINKED_PROPERTY#] style="color:red;font-weight:bold"[#endif#]>
         <#LANG_LINKED_PROPERTY#>:
         </label>
         <div class="col-lg-4"><input type="text" class="form-control" name="linked_property" value="[#LINKED_PROPERTY#]" id="linked_property"></div>
        </div>
        [#module name="linkedobject" object_field="linked_object" property_field="linked_property" method_field="linked_method"#] -->
UPD:
скрывает оно кстати свойста которые я в ини файле не заполнял
PicПоказать
Изображение
И да

Код: Выделить всё

[#module name="linkedobject" object_field="linked_object" property_field="linked_property" method_field="linked_method"#]
этот модуль все равно загружается и поэтому "-->" выводится на страницу
TODO:
хотелось бы проверить, но пока не могу, меняется ли что в заливке файла на Апельсин если:
1. Раскомментировать секцию

Код: Выделить всё

<!-- LINKED_OBJECT (varchar) -->
        <div class="form-group">
         <label for="linked_object" class="col-lg-3 control-label"[#if ERR_LINKED_OBJECT#] style="color:red;font-weight:bold"[#endif#]>
         <#LANG_LINKED_OBJECT#>:
         </label>
         <div class="col-lg-4"><input type="text" class="form-control" name="linked_object" value="[#LINKED_OBJECT#]" id="linked_object"></div>
        </div>
        <!-- LINKED_PROPERTY (varchar) -->
        <div class="form-group">
         <label for="linked_property" class="col-lg-3 control-label"[#if ERR_LINKED_PROPERTY#] style="color:red;font-weight:bold"[#endif#]>
         <#LANG_LINKED_PROPERTY#>:
         </label>
         <div class="col-lg-4"><input type="text" class="form-control" name="linked_property" value="[#LINKED_PROPERTY#]" id="linked_property"></div>
        </div>
        [#module name="linkedobject" object_field="linked_object" property_field="linked_property" method_field="linked_method"#]
2. Закомментировать/удалить секцию (по задумке автора модуля)

Код: Выделить всё

 <!-- LINKED_OBJECT (varchar)
        <div class="form-group">
         <label for="linked_object" class="col-lg-3 control-label"[#if ERR_LINKED_OBJECT#] style="color:red;font-weight:bold"[#endif#]>
         <#LANG_LINKED_OBJECT#>:
         </label>
         <div class="col-lg-4"><input type="text" class="form-control" name="linked_object" value="[#LINKED_OBJECT#]" id="linked_object"></div>
        </div> -->
        <!-- LINKED_PROPERTY (varchar) 
        <div class="form-group">
         <label for="linked_property" class="col-lg-3 control-label"[#if ERR_LINKED_PROPERTY#] style="color:red;font-weight:bold"[#endif#]>
         <#LANG_LINKED_PROPERTY#>:
         </label>
         <div class="col-lg-4"><input type="text" class="form-control" name="linked_property" value="[#LINKED_PROPERTY#]" id="linked_property"></div>
        </div>-->

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Пт июн 29, 2018 12:06 pm
dance12r
еще) Нашел классную штуку в snowboy.py

Код: Выделить всё

        with sr.Microphone() as source:
            r = sr.Recognizer()
            r.adjust_for_ambient_noise(source) # Слушаем шум 1 секунду, потом распознаем, если раздажает задержка можно закомментировать. 
            random_item = random.SystemRandom().choice(["Привет", "Слушаю", "На связи", "Привет-Привет"])
убрал задержку - ИМХО, однозначно лучше!
UPD:
в sayreply.py

Код: Выделить всё

getConfig (path)
#if FIRSTBOOT == "1":
#    ip = (get_ip_address())
#    say ("Это первая загрузка терминала, пожалуйста, пропишите IP адрес в настройках МайжерДомо, мой IP адрес: "+ip)
#    config.set("Boot", "firstboot", "0" )
#    with open(path, "w") as config_file:
#        config.write(config_file) 
#    getConfig (path)  	   
sock = socket.socket()
sock.bind( ("", 7999) )
sock.listen(1)
в инструкции к конфигам говорится, что при первой загрузке модуля Апельсин скажет свой ИП, но он этого не сделает так как эта функциональность закомментирована(

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Пт июн 29, 2018 5:19 pm
rom77
А можно такое сделать на апельсинке с установленным мажордомо? два в одном так сказать. Напишите как это сделать если есть отличия. Спасибо за инструкции, все ждут с не терпеньем.

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Пт июн 29, 2018 5:34 pm
dance12r
Чисто теоретичски, это возможно. На практике, думаю, будет много ручных правок. Ранее делал такое согласно этой инструкции viewtopic.php?f=14&t=2634&start=250#p70276 . Задача тоже не тривиальная ввиду разности версий питона, но в конечном счеты вышло. Но со временем отказался из-за "географического" расположения малины в квартире.

Re: Голосовое управление по ключевому слову на базе Апельсинки Зеро

Добавлено: Сб июн 30, 2018 4:27 pm
eeak1
dance12r писал(а):
Пт июн 29, 2018 11:35 am
2. Закомментировать/удалить секцию (по задумке автора модуля)
Получилось так:

Код: Выделить всё

[Settings]
linkedroom = 
providertts = Yandex
apikeytts = 0d3f7570-вырезаноцензурой
providerstt = Google
apikeystt = 
sensitivity = 0.2
alarmkwactivated = 1
alarmtts = 0
alarmstt = 0
ip_server = 192.168.вырезаноцензурой

[Boot]
firstboot = 0