Управление Умным Домом с помощью голоса

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
xboct
Сообщения: 73
Зарегистрирован: 17 ноя 2011, 01:09

Re: Управление Умным Домом с помощью голоса

Сообщение xboct » 29 ноя 2012, 11:07

ArtSamovar писал(а):
xboct писал(а):...Tasker
При посылки GET запросов он режет знаки, точнее заменяет на %...

....../?cmd=4:2 будет молчать. То есть напрямую к Меге, увы :(
Выход из этой ситуации только скрипт на сервере, например ....../?cmd=42
Меня работа с MegaD не интересует совсем :D . Я использую совсем другой протокол предназначенный СПЕЦИАЛЬНО для домашней автоматизации.
По свободе потыкал в Гугль и нашел еще немного интересностей.... У PicoTTS (SVOX) внезапно оказалось есть реализация для Линукса... собственно голос должен подойти. правда еще не попробовал. А так и у Большого Брата появиться голос Кати или Юры :D

boban_
Сообщения: 12
Зарегистрирован: 30 апр 2011, 19:59

Re: Управление Умным Домом с помощью голоса

Сообщение boban_ » 03 дек 2012, 14:03

ArtSamovar писал(а):
boban_ писал(а):Использовать в качестве анализатора речи?
Это уже интереснее... А по подробнее, можно? Спасибо.
Lirc пишет код команды, анализ совпадения более 70% - коменда?

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 03 дек 2012, 17:46

boban_ писал(а):
ArtSamovar писал(а):
boban_ писал(а):Использовать в качестве анализатора речи?
Это уже интереснее... А по подробнее, можно? Спасибо.
Lirc пишет код команды, анализ совпадения более 70% - коменда?
Тогда я за "лопату" и пойду копать в эту сторону... Спасибо.
Лень — двигатель прогресса...

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 14 янв 2013, 20:28

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

Из ПО Typle для Win платформы. И cvoicecontrol для Linux.

Одной из основный проблем для тонального распознавания под Linux'ом является заброшенный проект cvoicecontrol. А другой программы, увы... Не наблюдается.

С моими широчайшими знаниями С++ :D я оставил идею переписать cvoicecontrol. Я пошел другим путём, совсем другим.

Распознаванием голоса у нас будет заниматься PHP )))) Да да, он самый...
Ставим OpenCV, fann, sndfile-tools, sox. Вот из этого собрал тональный распознаватель.

Итак, принцип такой.
пишем wav файл, звук снимаем с микрофона, продолжительностью 2 секунды, он сохраняется. Далее запускается sndfile-spectrogram, который делает цветную картинку (и к сожалению, 640 на 640 минимум. Можно использовать sox. Он тоже это умеет. Я не стал читать мануал и поставил sndfile-tools). После этого, запускается php скрипт, который пропускает через фильтры это изображение, обрезает и сохраняет в виде черно-белой картинки 50х50 пикселей. Закончив работу, управление передается нейронной сети (О ней в соседней ветке), которая выдает результат.

Я полностью понимаю, что это "исключительный случай", но РАБОТАЕТ!!!

По времени 0,8 - 1,2 секунды

Представляю вниманию изображения...

Изображение

А на выходе это маленькое Изображение

Что заметил, при произношении "Насть", стабильно рисуется "табуретка", "Настя" - эльфиевая башня, что -то вроде. ))))) Даже если звук "...стя" тихий и "шпиль" башни почти не виден, нейроная сеть выдает его за истинное по площадке, которая "уникальна" для "Настя"...

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

<?php
$file_input='http://192.168.0.104/web.png';
$file_output='out.png';
$crop = array(75, 95, -85, -65); //640 на 640 исходное
list($w_i, $h_i, $type)=getimagesize($file_input);
	if (!$w_i || !$h_i) {
		echo 'Невозможно получить длину и ширину изображения';
		exit;
        }
        $img = imagecreatefrompng($file_input);
		list($x_o, $y_o, $w_o, $h_o) = $crop; 
		if($w_o < 0)$w_o += $w_i;
	        $w_o -= $x_o;
	   	if($h_o < 0) $h_o += $h_i;
		$h_o -= $y_o;	
	$img_o=imagecreatetruecolor(50, 50);
	imagecopyresampled($img_o, $img, 0, 0, $x_o, $y_o, 50, 50, $w_o, $h_o);	
	imagefilter($img_o, IMG_FILTER_CONTRAST, -100);
	imagefilter($img_o, IMG_FILTER_GRAYSCALE);
	imagefilter($img_o, IMG_FILTER_CONTRAST, -100);
	imagefilter($img_o, IMG_FILTER_CONTRAST, -100);	
$ann=fann_create("my.ann");
$file_cnt=0;
$cur_array=array();
$cnt=0;
for($y=0; $y<50; $y++){
    for($x=0; $x < 50; $x++){
        $rgb = imagecolorat($img_o, $x, $y) / 16777215;
        $cur_array[$cnt] = $rgb;
        $cnt++;
    }
}
imagepng($img_o, $file_output); //Сохраняем
imagedestroy($img_o);
if (($output=fann_run($ann, $cur_array))==FALSE)
exit("Could not run ANN.");
else
$num=round($output[0], 1);
if($num<0.3)echo "No\n";
if((0.6>$num)>0.3)echo "Unknown\n";
if($num>0.6)echo "Yes\n";
?>
Переписал... В 40 строк )))


Это rec.sh

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

#!/bin/bash
rec /var/www/web.wav trim 0 2
sndfile-spectrogram ./web.wav 640 640 web.png
curl localhost/index.php
Лень — двигатель прогресса...

sadspirit
Сообщения: 4
Зарегистрирован: 30 апр 2012, 12:34

Re: Управление Умным Домом с помощью голоса

Сообщение sadspirit » 27 фев 2013, 19:32

Статья на хабре про Покетсфинкс : http://habrahabr.ru/post/167479/
После танцев с бубнами вроде работает, однако при ограниченном словаре начинает "слышать" команды в случайной речи.
p.s. Если будете пробовать собирайте только из исходников. во всяком случае в убунте в портах старая версия.

Upd. Попробовал множество аккустических моделей, обучал модель под себя, танцевал с бубном. Имхо тупиковая ветвь. Ооооочень много ложных срабатываний.

max_efa
Сообщения: 10
Зарегистрирован: 19 окт 2011, 01:01

Re: Управление Умным Домом с помощью голоса

Сообщение max_efa » 04 апр 2013, 14:02

А мне понравилась идея с нейронной сетью!
буду копать!

wolflab_it
Сообщения: 1
Зарегистрирован: 10 апр 2013, 17:06

Re: Управление Умным Домом с помощью голоса

Сообщение wolflab_it » 10 апр 2013, 17:42

ArtSamovar писал(а): Это rec.sh

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

#!/bin/bash
rec /var/www/web.wav trim 0 2
sndfile-spectrogram ./web.wav 640 640 web.png
curl localhost/index.php
Очень интересная идея анализа спектрограммы нейронной сетью, в моем случае мне помогает старый добрый гугль , однако есть замечания по скрипту. В процессе выполнения последних двух команд, умный дом глохнет на промежуток времени, который зависит от размера нейронной сети и вычислительной мощности сервера. Это крайне не удобно и все это уже проходили. Я использовал концепцию много ушей- один мозг. "Ухо" это программа которая непрерывно слушает микрофон и при наступлении паузы в одну секунду отправляет накопленные данные на сервер-мозг если размер звуковых данных более двух секунд, для того чтобы отсечь случайные звуки и шумы. Для отправки данных на сервер-мозг запускается отдельный процесс, который соединяется с сервером и отправляет данные в фоне, в то время как основной процесс продолжает слушать микрофон. Сервер-мозг это многопоточный сервер, он принимает соединения от клиентов-ушей, пропускает данные через wad, чтобы попусту не отвлекать гугль от порабощения мира, получает и передает распознанную фразу анализатору фраз умного дома с указанием с какого уха поступила команда. А вообще ваша идея очень интересная, я возможно возьму ее на вооружение, поскольку простые команды лучше закодировать таким образом, а сложные все так-же передавать гуглю.

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 10 апр 2013, 20:23

По поводу нейронной сети могу посоветовать рисовать не ч/б изображение, а линию границы белого и черного. Это позволит вообще избежать нейронной сети и построить все на простейшей математике, увеличив скорость работы с данными ))) Представьте окружность, или квадрат, или другую фигуру... Берем только контур, в цикле читаем цвет, округляем до 1 и 0 (по яркости). В итоге таблица из единиц и нулей, вырезаем все нули и суммируем единицы. Сохраняем в любой файл, или в бинарник. Самое интересное, то что когда идет сравнение одного с другим файлом (одинаковые, но сдвинутые по x и y) сумма то одинаковая... => похожи. То же самое и работает для "графика" звуковой волны, но с небольшими поправками.

А теперь по делу, купил Шорох 7. Доволен, не то слово... Это "игрушка" идеальна. АРУ делает свое дело на высший бал, шумы очень слабые, распознаваемость гуглом (при прямых тестах в браузере) шикарны. Радиус действия метров пять. Мне трех хватает с головой. Слышна вся квартира.

В работе попытка сделать сетевые микрофоны, записывая и отправляя их в сеть (на сервер, не в гугл) с помощью Atmeg'и, что позволить подключать их неограниченное количество и управлять буквально каждым, а так же скрещивание ежа и ужа: локальное выдёргивание команды идентификатора и последующей обработкой гуглом...
Лень — двигатель прогресса...

max_efa
Сообщения: 10
Зарегистрирован: 19 окт 2011, 01:01

Re: Управление Умным Домом с помощью голоса

Сообщение max_efa » 11 апр 2013, 22:56

ArtSamovar писал(а): А теперь по делу, купил Шорох 7. Доволен, не то слово... Это "игрушка" идеальна. АРУ делает свое дело на высший бал, шумы очень слабые, распознаваемость гуглом (при прямых тестах в браузере) шикарны. Радиус действия метров пять. Мне трех хватает с головой. Слышна вся квартира.
Тоже к нему присматривался, раскажите поподробней про опыт использования и поключения. Может подводные камни?

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 11 апр 2013, 23:49

max_efa писал(а):
ArtSamovar писал(а): А теперь по делу, купил Шорох 7. Доволен, не то слово... Это "игрушка" идеальна. АРУ делает свое дело на высший бал, шумы очень слабые, распознаваемость гуглом (при прямых тестах в браузере) шикарны. Радиус действия метров пять. Мне трех хватает с головой. Слышна вся квартира.
Тоже к нему присматривался, раскажите поподробней про опыт использования и поключения. Может подводные камни?

Сначала пытался через стабилизатор, кучку крндеров...

В итоге питание 12 вольт через резюк на 1кОм и ничего больше. Кабель нужен экранированый. А в системе все усиления на ноль выставляйте, иначе шуршать, шепеть и хрипеть будет.
Лень — двигатель прогресса...

andvas
Сообщения: 177
Зарегистрирован: 07 ноя 2011, 23:04
Откуда: Россия, Самара
Контактная информация:

Re: Управление Умным Домом с помощью голоса

Сообщение andvas » 12 апр 2013, 15:00

max_efa писал(а): Тоже к нему присматривался, расскажите поподробней про опыт использования и поключения. Может подводные камни?
Давно писал в этой ветке, что микрофон отличный и не такой дорогой, как поставил его тогда так и работает, включает/выключает свет в коридоре

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 16 май 2013, 00:53

Наигравшись с Шорохом, а так же с С++, я понял, что всё затянется на долго...
Оставив идею написания сишной программулины на потом, решил поиграть с php )))
Результаты превосходят ожидания...
Пока что 205 строк кода с комментариями и отладочными переменными )))
На днях постараюсь допилить скрипт.

Чуть приоткрою завесу...
Как и в прошлый раз использую sox, sndfile-spectrogram и php5-gd.
Только на этот раз все намного быстрее, намного; и без интернета...

Единственное, используется Шорох и sox.....silence при записи звука.

Вкратце:
В sh скрипте while (true), он же запускает php скрипт.
php скрипт запускает запись, снятие спектрограммы, сжатие через imagemagic, и только в конце обрабатывает изображение 10х10 пикселей (!). (На Хабре была статья на похожую тему, там брали hash), После снятия "показаний" с изображения, они округляются до одного числа. И это число (100 знаков) и есть имя этого файла, которое сохраняется в папочку.

После идет (или запуская соседний процесс, чего я не делаю) сравнение имён, тех что в папке уже и нового файла, только что полученного.
Если набирается массив с N совпадений оболее 85%, то создается новая папка с тем же именем, что и файл (с префиксом), переносятся (копируются) из общей папки найденные "идеалы", копируется wav файл (конвертируется во flac и дополнительно отдаётся гуглу на распознавание.) Можно и без гугла, но придется прослушивать потом этот файл и в ручную писать что за голос в папке )). Помимо этого, сравниваются и созданные папки с именем нового файла, и если есть ещё совпадения, то и новые "идеалы" копируются в папку с максимальным совпадением (папок на одно слово или фразу может быть несколько).

Загвоздку в очередности и приоритета решил простым временным файлом, куда в течении времени копируются имена файлов (или папок), а так же их приоритеты.
Немного о ресурсах... 135 объектов, всего 124,0 кБ - это 114 изображений + 2 папки с изображениями, current.flac, command.txt
Задержка на получение "похожести" очень маленькая и практически не заметна.
Обучение происходит немного утомительно :) Зато слушая все звуки система создаст словарик, который модерируется или скриптом(!), или нами самими. (Скриптом с помощью гугла).

Большим плюсом является "исправление" ошибок. если есть допустим 5 папок, в 3 их них слово "Полина", а в других двух "Малина", то приоритет отдачи будет не только на том, где больше, но и на "весе" похожести... 80+85+80 меньше, чем 85+90... Поэтому на выходе будет "Малина"

В общем много говорю )))
В ближайшее время выложу скрипт
Лень — двигатель прогресса...

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 16 май 2013, 18:43

Держите на испытания архив

В консоли запустить voice.sh
Если "Настя" не откликнется, то придётся удалить содержимое папки img

Микрофон использовался Шорох

Сам скрипт не допиленн, местами кривой, но для первых полётов пойдет.

Если оставить его включенным на длительный период :D думаю выучит слова как попугай, и начнёт их повторять :)

//доавлю поиск по папкам, и возможно изменю формат записи, вместо изображений писать просто в файл...
//Подумаю над определением похожести изображений.


Пробуйте, тестируйте...


За полчаса монотонного повторения одного и того же слова процент распознавания вырос довольно высоко :D


UPD: Замерил время 0.0039589405059814 при 753 объектов, весом 388,6 кБ
UPD2: Посмотреть можно здесь. База 1052 объекта. Сейчас параллельно включена G+ видео встреча (болтают там много и голос довольно четкий), за час ни одного ложного срабатывания.(!) На 100 записей 1,2 совпадений из кучи файлов примерно в > 1000 объектов.
Лень — двигатель прогресса...

Roader
Сообщения: 3
Зарегистрирован: 26 мар 2013, 13:40

Re: Управление Умным Домом с помощью голоса

Сообщение Roader » 16 май 2013, 21:30

Хорошо потрудился..спасибо, сейчас посмотрим..как и что :)

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 17 май 2013, 14:04

Таким образом получилось скрестить ежа и ужа. :D
После длительного обучения (часа два для одного слова) получилось добиться довольно высоких результатов по определению "имени" системы, которое распознаётся локально.
В лучшем случае обучить еще двум простым словам - "да" и "нет".
Ошибки ложного срабатывания всё же есть, но их процент все же маленький. И как раз на этот случай и нужно обучить систему подтверждающим командам.
Ошибки: "настя" (с разной интонацией) примерно до 15-20 похожих файлов. С другой интонацией, либо 0-1, либо не более 5 (пойдет на последующее обучение).
Тастя, Вастя, Кастя - ошибается раз на раз. (На этот случай подтверждение), массив выдает от 5 до 10 похожих...

Минусы: Обучение :D долго и нудно, приблизительная интонация. (Нааастя и Наастя совершенно разные слова :!: )

По сути алгоритм прост. Записывается звук, снимается спектрограмма, конвертируется изображение, считывается некий хэш с него и сохраняется в имени этого файла, либо в текстовый файл. Если произнесенный звук, а именно его хэш совпадает с обученной группой, то вытаскиваем среднее значение (если слов несколько) и берем самое похожее, иначе переспрашиваем. Если "имя" распозналось - шлем в гугл на обработку новую запись с одной или двух попыток.
Ну, а далее делаем, что угодно )

В будущем хотелось бы снимать звук по сети, надеюсь когда-нибудь напишу что-то на С++ )))))

Этим простеньким алгоритмом мы не будем постоянно слать в Корпорацию Добра всё, что у нас произносится в доме или квартире.
Лень — двигатель прогресса...

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Управление Умным Домом с помощью голоса

Сообщение vtec » 19 май 2013, 22:03

Мне понравился голос, это sox? Или еще что то?

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 19 май 2013, 23:39

vtec писал(а):Мне понравился голос, это sox? Или еще что то?
Это записывал знакомую девушку )))

Библиотека голосоа около 150 фраз на домашний микрофон (ужасное качество), планировали в студии записываться.
Но к сожалению звукозапись в студии сорвалась... ((
Лень — двигатель прогресса...

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 19 май 2013, 23:40

Кто пользуется скриптом
После тренировки голоса (имени) выключайте автосохранение новых звуков. Иначе наберется всего что можно и не можно и будет ошибаться очень часто...

Сейчас сижу - переучиваю :lol:
Лень — двигатель прогресса...

vtec
Сообщения: 459
Зарегистрирован: 19 сен 2011, 09:28

Re: Управление Умным Домом с помощью голоса

Сообщение vtec » 20 май 2013, 10:34

ArtSamovar писал(а):Это записывал знакомую девушку )))
А это блин, не айс. А можете выложить записи?

ArtSamovar
Сообщения: 184
Зарегистрирован: 07 ноя 2011, 08:45
Откуда: Ступино МО

Re: Управление Умным Домом с помощью голоса

Сообщение ArtSamovar » 21 май 2013, 22:44

vtec писал(а):
ArtSamovar писал(а):Это записывал знакомую девушку )))
А это блин, не айс. А можете выложить записи?
Если хотите, давайте выложу только нармальные... Но их мало (

В основном числа записывали, слов мало. Да и то, половину в один канал записали.

Нормальных наберется штук 10 - 15...
Лень — двигатель прогресса...

Ответить