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

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
Mixman
Сообщения: 395
Зарегистрирован: 17 фев 2013, 23:49
Откуда: Волгодонск, Ростовская обл.
Контактная информация:

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

Сообщение Mixman » 16 ноя 2013, 12:46

Спасибо. Вы подтолкнули начать писать пост

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

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

Сообщение vtec » 18 ноя 2013, 10:02

Спасибо за совет, долго я мучался как в ubuntu 13.10 перехватить звук.
Оставлю тут свое решение как у меня это получилось.
По этой [urlhttp://kawaikunee.blogspot.ru/2010/12/ubuntu.html]статье[/url] делаем все как там написано. Только в audacity настройки от куда брать звук выставил другие.
Воспроизведение не трогал, а запись выставил pulse: Mic:0. Заработало.
Теперь можно записывать приятный голос с сайта, мне гугловский не очень нравится.

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

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

Сообщение ArtSamovar » 26 дек 2013, 21:28

Версия прошивки 3.03
Микрофон Шорох 7
ADC вход...

Папочка на GDrive будет пополняться скриншотами время от времени....

В этой теме поднимался вопрос о микрофонах и их количестве.
Ну... Сетевой микрофон уже есть - зачатки точнее, так что их можно нацепить столько, сколько у Вас ADC портов во всех Мегах =)

Сыро - пока всё очень и очень сыро.
Те кто хоть немного знаком со звуком могут посчитать...
1000 точек за ~8 секунд (Мега на 8MHz работает) UPD: 12,5Мгц

Забирал значения этим

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

#!/usr/bin/php
<?php
$time_script  = microtime(true);
$v = '';
for ($i = 0; $i < 1000; $i++) $v .= file_get_contents("http://192.168.0.14/sec/?pt=0&cmd=get")."\n"; 
$fp = fopen("rec.txt", 'w+');
fwrite($fp, $v);
fclose($fp);
echo "\n".microtime(true) - $time_script."\n";
Значения от 0 до 1023
Рисовал потом javascript'ом... На оси x значения счётчка, по y значения ADC (FFT не делал, пока бессмысленно)

Точек очень и очень мало для полноценной записи голоса.
Мегу нужно ускорять в 4 раза... (и это возможно), возможно даже ещё бстрее, но заморочек еще больше...

Увеличив частоту до 16 - нарисуем в два раза больше точек за это время, сменим протокол и увеличим буфер, нарисуем еще в 2 (или в 4?) раза больше точек...
С первым просто, кварц, со вторым тяжелее... Даже, если использовать вейвлеты, которые будут сжимать данные в два раза, экономя буфер, все равно, без смены протокола с TCP на UDP это будет сделать тяжко... где то на 20-30% медленнее возможного.

Буфер - имеется в виду переменная в прошивке, которая хранит временные значения. Сейчас он забит очень сильно. (mini faq)

Ещё в довесок. У АЦП уселение сейчас 100 (по идее, если ошибаюсь, поправьте), это влияет на высоту амплитуды, независимо от качества микрофона и его АРУ .
На графике прекрасно видно


Для примера wav 8000 Гц, 2 байта на семпл, моно, 8 бит выдаёт положенные ей 8000 точек в секунду. Мега пока только 120-130

P.S. Мегой реально записывать голос, который прекрасно понимает человеческое (да и не только) ухо.
Лень — двигатель прогресса...

dima
Сообщения: 42
Зарегистрирован: 19 фев 2012, 01:50

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

Сообщение dima » 30 мар 2014, 13:03

Давно никаких новостей про распознование голоса на arm не было, может какие сложности возникли??

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

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

Сообщение max_efa » 01 апр 2014, 18:40

А кто ни будь с активацией по ключевому слову продвинулся куда ни будь?
так для затравки http://my-chrome.ru/2013/11/ok-google/

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

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

Сообщение ArtSamovar » 01 апр 2014, 19:20

Давно никаких новостей про распознование голоса на arm не было, может какие сложности возникли??
Частота дискретизации нужна 8 кГц, меньше слишком тяжко распознавать хоть что-то. А так как за основу взят Мега девайс, то пока увы... (Если прошивка сейчас позволяет - тогда это прекрасно. Не слежу в последнее время за релизами... )
А кто ни будь с активацией по ключевому слову продвинулся куда ни будь?
С активацией по ключевому слову в этой ветке уже было несколько решений. Через CVoiceControl, через php (Безумный велосипед, но работал), через Google. Можно и через Андроид (оффлайн - распознавание)... Вариантов куча.

Ссылка, которую Вы привели - это просто google-now. На Винде и Маке она уже давно в тестовой ветке. На Линуксе - увы. )))) Но есть вот такое расширение для хрома... Но использовать браузер для "ключевого слова" - это странно на мой взгляд.

Использовать Sphinx как вариант... Но сделать его "миниатюрным" довольно не тривиально. Хотя в 2013-2014 русская база у него выросла. Как пример - статьи на Хабре (там ноут в качестве сервера).

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

dragon rider
Сообщения: 17
Зарегистрирован: 08 мар 2014, 11:11

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

Сообщение dragon rider » 01 апр 2014, 20:26

поддержу вопрос с активацией по ключевому слову.
Есть идеи как реализовать такую схему?
1. Записать ключевое слово, типа Алиса.
2.Когда система его распознает(без гугла) отправляет команду подтверждения типа "Слушаю"
3. И только после этого производить запись команды и отправка ее гуглу на распознание

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

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

Сообщение ArtSamovar » 01 апр 2014, 20:37

dragon rider писал(а):поддержу вопрос с активацией по ключевому слову.
Есть идеи как реализовать такую схему?
1. Записать ключевое слово, типа Алиса.
2.Когда система его распознает(без гугла) отправляет команду подтверждения типа "Слушаю"
3. И только после этого производить запись команды и отправка ее гуглу на распознание
Проблема в пункте номер два =)

Почитайте от сюда или отсюда. Первая это велосипед на php, вторая CVoiceControl.
Лень — двигатель прогресса...

dragon rider
Сообщения: 17
Зарегистрирован: 08 мар 2014, 11:11

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

Сообщение dragon rider » 02 апр 2014, 09:30

ArtSamovar писал(а): Проблема в пункте номер два =)

Почитайте от сюда или отсюда. Первая это велосипед на php, вторая CVoiceControl.
Ну это я все читал, в указанных примерах нет решения для пункта 2 :(
Походу придется gamecommander использовать

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

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

Сообщение vtec » 04 апр 2014, 11:45

На smartliving, человек написал ссылку на еще один движок, который можно использовать для разговора.

Если карты лягут хорошо, то выложу скрипт на php общающийся с ivona.com

<?php
$msg=$_REQUEST["q"];
// дальше по вкусу. например так
$url="http://www.ispeech.org/p/generic/getaud ... on=convert";
print file_get_contents($url);
?>

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

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

Сообщение vtec » 04 апр 2014, 13:17

Выкладываю.
Для вызова: ivonaTTS('Привет, меня зовут Татьяна.');
Работает только под линуксом.

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

<?php

define('ROOT', '/tmp/');

function ivonaTTS($message){
	$filename=md5($message).'.mp3';
	if (file_exists(ROOT.'cached/voice/'.$filename)) {
		@touch(ROOT.'cached/voice/'.$filename);
		return ROOT.'cached/voice/'.$filename;
	}

	$startUrl='http://www.ivona.com/us/';
	$result = curlSet($startUrl);

	if(!$result){
		return $result;
	}else{
		file_put_contents(ROOT.'out.html',$result);
			
		system("grep voicetest.php?rtr=1 ".ROOT."out.html > ".ROOT."out2.html");
		$content=file_get_contents(ROOT.'out2.html');
		$content = trim($content);
		$content=parse_url($content);
		$content=explode('&',$content['query']);
		$content = str_replace('";', "", $content['4']);
		if(file_exists(ROOT.'out.html')) unlink(ROOT.'out.html');
		if(file_exists(ROOT.'out2.html')) unlink(ROOT.'out2.html');
					
		$message=base64_encode($message);
		$matrix=array('/' => '_', '+' => '-', '=' => '.',);
		$message = strtr($message, $matrix);

		$endUrl='http://www.ivona.com/voicetest.php?rtr=1&t2r='.$message.'&v2r=cnVfdGF0eWFuYQ..&lang=us&'.$content;
		$result = curlSet($endUrl);
		if ($result) {
			if (!is_dir(ROOT.'cached/voice')) {
				@mkdir(ROOT.'cached/voice', 0777);
			}
			file_put_contents(ROOT.'cached/voice/'.$filename, $result);
			return ROOT.'cached/voice/'.$filename;
		} else {
			return false;
		}
	}
}
function curlSet($url){
	$options = array(
			//CURLOPT_HEADER=>1, //Расскоментировать если нужно увидеть ответ от сервера.
			CURLOPT_COOKIE=>1,
			//CURLOPT_VERBOSE=>0,
			CURLOPT_URL=>trim($url),
			CURLOPT_RETURNTRANSFER=>true,
			CURLOPT_FOLLOWLOCATION=>true, //Если происходит редирект, то переходим
			CURLOPT_COOKIEJAR=>'cookie.txt',  // Записываем cookies в файл, чтобы потом можно было их считать
			CURLOPT_COOKIEFILE=>'cookie.txt', // Теперь читаем cookies с файла;
			CURLOPT_USERAGENT=>'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36',
	);
	$curl = curl_init();
	curl_setopt_array($curl, $options);
	$result=curl_exec($curl);
	
	if(curl_error($curl)){
		return curl_error($curl);
	}else{
		return $result;
	}
}
?>

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

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

Сообщение ArtSamovar » 01 май 2014, 21:47

Кто-нибудь пробовал CMUSphinx?
Лень — двигатель прогресса...

arbuzmaster
Сообщения: 230
Зарегистрирован: 15 июл 2013, 23:43
Откуда: Астрахань

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

Сообщение arbuzmaster » 10 май 2014, 23:25

Для тех у кого перестал работать google speech api https://github.com/gillesdemey/google-speech-v2

buzia
Сообщения: 6
Зарегистрирован: 06 май 2014, 02:19

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

Сообщение buzia » 13 май 2014, 05:05

arbuzmaster писал(а):Для тех у кого перестал работать google speech api https://github.com/gillesdemey/google-speech-v2
Поясню: Google Speech API закрыли для широкой общественности.
В браузере Google Chrome, как писалось ранее в этой теме, есть голосовой поиск. Ребята из вышеупомянутого проекта на github'е разобрали браузер и выдернули ключ, который используется для авторизации в гугле. Таким образом, когда вы используете https://github.com/gillesdemey/google-speech-v2, вы представляетесь гуглю голосовым поиском их же браузера.

У меня в тестовом варианте работает так (для русского языка):

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

	exec("flac -f -s audio/current.wav -o audio/current.flac");
	$json_array=exec("curl -X POST --data-binary @audio/current.flac -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36' -H 'Content-Type: audio/x-flac; rate=44100;' 'https://www.google.ru/speech-api/v2/recognize?output=json&lang=ru-RU&key=AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4'");
	$array=json_decode($json_array, true);
	echo "<br /><br />Распознанный текст: ".$array['result'][0]['alternative'][0]['transcript']."<br /><br />";

	# Тут Фестиваль рассказывает распознанную фразу
	exec("/usr/bin/festival -b \"(begin (voice_msu_ru_nsh_clunits) (SayText \\\"".$array['result'][0]['alternative'][0]['transcript']."\\\" nil))\"&");
	unlink("audio/current.wav");
	unlink("audio/current.flac");
На заметку:
0. С github'а скачивать ничего не нужно. По сути ключ, используемый в ссылке для POST запроса, - это и есть сам проект.
1. Ключ менять не надо, не надо его нигде получать, это именно тот ключ, который надо использовать.
2. Структура массива данных, возвращаемого гуглем поменялась и отличается от первоначальной статьи, написанной Андреем (см. код выше).
3. На github'е пишут, что можно и wav передавать, у меня такие выкрутасы не заработали.

arbuzmaster
Сообщения: 230
Зарегистрирован: 15 июл 2013, 23:43
Откуда: Астрахань

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

Сообщение arbuzmaster » 21 май 2014, 19:20

А теперь и это прикрыли 403. Это ошибка.

Ваш клиент не имеет разрешения, чтобы получить URL / speech-api/v2/recognize? выходной = JSON & LANG = RU-RU & ключ = AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4 с этого сервера. Вот и все, что мы знаем.

А в google для разработчиков Speech API теперь нету или я просто не нашёл!!

arbuzmaster
Сообщения: 230
Зарегистрирован: 15 июл 2013, 23:43
Откуда: Астрахань

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

Сообщение arbuzmaster » 25 май 2014, 01:12

Если кому интересно то можно еще сделать на HTML5 + AJAX на Androide в Сhrome тоже будет работать! Найдёте var url замените на свой! В text.php ловить $_GET['text']; Но и здесь есть загвоздка - нужно создавать HTTPS соединение иначе при отсутствии речи более 10 сек появится запрос на доступ к микрофону

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

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Умный Дом</title>
<script language="javascript" type="text/javascript">
/* Создание нового объекта XMLHttpRequest для общения с Web-сервером */
var xmlHttp = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
  xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
  try {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e2) {
    xmlHttp = false;
  }
}
@end @*/

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
  xmlHttp = new XMLHttpRequest();
}
</script>
<meta charset="UTF-8" />
<style>
  * {
    font-family: Verdana, Arial, sans-serif;
    font-size: 20px;
  }
  a:link {
    color:#000;
    text-decoration: none;
  }
  a:visited {
    color:#000;
  }
  a:hover {
    color:#33F;
  }
  body {
      text-align: center;
  }
  .button {
    background: -webkit-linear-gradient(top,#008dfd 0,#0370ea 100%);
    border: 1px solid #076bd2;
    border-radius: 3px;
    color: #fff;
    display: none;
    font-size: 13px;
    font-weight: bold;
    line-height: 1.3;
    padding: 8px 25px;
    text-align: center;
    text-shadow: 1px 1px 1px #076bd2;
    letter-spacing: normal;
  }
  
  .final {
    color: black;
    padding-right: 3px;
  }
  .interim {
    color: gray;
  }
  .info {
    font-size: 14px;
    text-align: center;
    color: #777;
    display: none;
  }
  
  .sidebyside {
    display: inline-block;
    width: 45%;
    min-height: 40px;
    text-align: left;
    vertical-align: top;
  }
  #headline {
    font-size: 40px;
    font-weight: 300;
  }
  #info {
    font-size: 20px;
    text-align: center;
    color: #777;
    visibility: hidden;
  }
  #results {
    font-size: 14px;
    font-weight: bold;
    border: 1px solid #ddd;
    padding: 15px;
    text-align: left;
    min-height: 150px;
    width: 500px;
    margin: 0 auto;
  }
  #start_button {
    border: 0;
    padding: 0;
    
    width: 50px;
    height: 50px;
    cursor: pointer;
    vertical-align: top;
  }

#info_speak_now,
#info_no_speech,
#info_no_microphone,
#info_upgrade {
    display: none;
}
  
</style>


		</head>
		  
<body>

<div id="messages">
	 <input type="button" id="start_button" onclick="startButton(event)" />
	<!-- сообщения на разные случаи -->
	<p id="info_start">Кликни на микрофон чтобы начать раздавать команды.</p>
	<p id="info_speak_now">Командуй!</p>
	<p id="info_no_speech">Голос не обнаружен.</p>
	<p id="info_no_microphone">Микрофон не найден.</p>
	<p id="info_upgrade">Твой браузер не поддерживает Web Speech API.</p>
</div>

 
<div id="results">
  <span id="final_span" class="final"></span>
</div>


<script>

var start_button = document.getElementById('start_button'),
	recognizing = false, // флаг идет ли распознование
	final_transcript = '';

// проверяем поддержку speach api
if (!('webkitSpeechRecognition' in window)) {
	
	start_button.style.display = "none";
	showInfo("info_upgrade");
	
} else { /* инициализируем api */
 
 /* создаем объект 	*/
 var recognition = new webkitSpeechRecognition();
 
 /* базовые настройки объекта */
 
 recognition.lang = 'ru'; // язык, который будет распозноваться. Значение - lang code
 recognition.continuous = true; // не хотим чтобы когда пользователь прикратил говорить, распознование закончилось
 
 /* метод вызывается когда начинается распознование */
 recognition.onstart = function() {
	 
    recognizing = true;
	
    showInfo('info_speak_now'); // меняем инфо текст
    
  };
  
  /* обработчик ошибок */
  recognition.onerror = function(event) {
    if (event.error == 'no-speech') {
      
      showInfo('info_no_speech');
    }
    if (event.error == 'audio-capture') {
     
      showInfo('info_no_microphone');
    }
  };
  
  /* метод вызывается когда распознавание закончено */
  recognition.onend = function() {
 	recognizing = false;
 	recognition.start();
	
	showInfo('info_start'); 
  };
  
  /* 
  	метод вызывается после каждой сказанной фразы. Параметра event используем атрибуты:
	- resultIndex - нижний индекс в результирующем массиве
	- results - массив всех результатов в текущей сессии
 */
  recognition.onresult = function(event) {
	  
  
	  /* 
	  	обход результирующего массива
	  */
	  for (var i = event.resultIndex; i < event.results.length; ++i) {
		
		/* если фраза финальная (уже откорректированная) сохраняем в конечный результат */
      	if (event.results[i].isFinal) {
        	final_transcript += event.results[i][0].transcript.toLowerCase();
        	
     	 } 
     }
   
    final_span.innerHTML = final_transcript;
	 var url = "/text.php?text=" + encodeURI(final_transcript);
  	 xmlHttp.open("GET", url, true);
	 xmlHttp.send(null);
	
	 final_transcript = '';	// очищаем распознанный текст
	
  };
 
}

/* показ нужного сообщения */
function showInfo(id) {
		
	var messages = document.querySelectorAll('p');
	
	for(i=0; i<messages.length; i++) messages[i].style.display = 'none';

	document.getElementById(id).style.display = 'block';
}


/* обработчик клика по микрофону */
function startButton(event) {

  if (recognizing) { // если запись уже идет, тогда останавливаем
    recognition.stop();
	document.getElementById('final_span').innerHTML = '';
    return;
  }
 
  recognition.start();
  
}
</script>


</body>
</html>
Если кто знает как бороться с запросом на доступ к микрофону после 10 сек напишите пожалуйста?
Посмотреть как это работает можно здесь!!! http://www.youtube.com/watch?v=4YtVxEh8w8o
Последний раз редактировалось arbuzmaster 02 авг 2014, 00:35, всего редактировалось 1 раз.

sayk
Сообщения: 2
Зарегистрирован: 09 авг 2013, 13:48

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

Сообщение sayk » 08 июл 2014, 11:47

Уважаемые товарищи! Подскажите, возможно ли сейчас распознавание через google на linuxe? Или гугл намертво прикрыл это дело? Если все таки можно, то пожалуйста подскажите как? В силу моей не компетентности в данном деле и лишь поверхностного понимания ситуации хотелось бы получить готовый код))

arbuzmaster
Сообщения: 230
Зарегистрирован: 15 июл 2013, 23:43
Откуда: Астрахань

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

Сообщение arbuzmaster » 10 июл 2014, 09:03

Вверху вполне рабочий код Сам его использую. Насколько я понял Google отказался от распознавания медиа файлов с голосом и выдачи результата. У меня покрайней мере ничего не получается

Bluefox
Сообщения: 150
Зарегистрирован: 03 мар 2014, 20:02

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

Сообщение Bluefox » 12 июл 2014, 14:28

Голосовое управление домом при помощи Home Commander.
RusMain.png
RusMain.png (12.43 КБ) 12761 просмотр
http://youtu.be/UGvKVL_Pqgo - пруфлинк, что работает :)

Продолжение здесь: viewtopic.php?f=1&t=744&start=80#p13748

dima117
Сообщения: 3
Зарегистрирован: 07 июл 2014, 15:52

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

Сообщение dima117 » 16 июл 2014, 13:54

Мы делали голосовое управление и синтез голоса для своей системы управления домом по сценариям. https://github.com/dima117/thinking-home
Работает локально (без обращения к стороннему серверу) через Microsoft Speech API, но только на Windows. В принципе, если вы не завязаны на linux, это очень хороший вариант.

Голосовой модуль в состоянии разработки. Сейчас умеет запускать сценарии (последовательности действий) при получении голосовой команды. Активация - по кодовому слову (сейчас зашито в коде: "Эй, компьютер"). Также умеет говорить переданный ему текст.

Вот исходники голосового модуля: https://github.com/dima117/thinking-hom ... ins.Speech
Исходники всей системы: https://github.com/dima117/thinking-home
Возможно, кому-нибудь пригодится.

Ответить