Управление Умным Домом с помощью голоса
-
- Сообщения: 395
- Зарегистрирован: 17 фев 2013, 23:49
- Откуда: Волгодонск, Ростовская обл.
- Контактная информация:
Re: Управление Умным Домом с помощью голоса
Спасибо. Вы подтолкнули начать писать пост
Re: Управление Умным Домом с помощью голоса
Спасибо за совет, долго я мучался как в ubuntu 13.10 перехватить звук.
Оставлю тут свое решение как у меня это получилось.
По этой [urlhttp://kawaikunee.blogspot.ru/2010/12/ubuntu.html]статье[/url] делаем все как там написано. Только в audacity настройки от куда брать звук выставил другие.
Воспроизведение не трогал, а запись выставил pulse: Mic:0. Заработало.
Теперь можно записывать приятный голос с сайта, мне гугловский не очень нравится.
Оставлю тут свое решение как у меня это получилось.
По этой [urlhttp://kawaikunee.blogspot.ru/2010/12/ubuntu.html]статье[/url] делаем все как там написано. Только в audacity настройки от куда брать звук выставил другие.
Воспроизведение не трогал, а запись выставил pulse: Mic:0. Заработало.
Теперь можно записывать приятный голос с сайта, мне гугловский не очень нравится.
-
- Сообщения: 184
- Зарегистрирован: 07 ноя 2011, 08:45
- Откуда: Ступино МО
Re: Управление Умным Домом с помощью голоса
Версия прошивки 3.03
Микрофон Шорох 7
ADC вход...
Папочка на GDrive будет пополняться скриншотами время от времени....
В этой теме поднимался вопрос о микрофонах и их количестве.
Ну... Сетевой микрофон уже есть - зачатки точнее, так что их можно нацепить столько, сколько у Вас ADC портов во всех Мегах =)
Сыро - пока всё очень и очень сыро.
Те кто хоть немного знаком со звуком могут посчитать...
1000 точек за ~8 секунд (Мега на 8MHz работает) UPD: 12,5Мгц
Забирал значения этим
Значения от 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. Мегой реально записывать голос, который прекрасно понимает человеческое (да и не только) ухо.
Микрофон Шорох 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";
Рисовал потом 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. Мегой реально записывать голос, который прекрасно понимает человеческое (да и не только) ухо.
Лень — двигатель прогресса...
Re: Управление Умным Домом с помощью голоса
Давно никаких новостей про распознование голоса на arm не было, может какие сложности возникли??
Re: Управление Умным Домом с помощью голоса
А кто ни будь с активацией по ключевому слову продвинулся куда ни будь?
так для затравки http://my-chrome.ru/2013/11/ok-google/
так для затравки http://my-chrome.ru/2013/11/ok-google/
-
- Сообщения: 184
- Зарегистрирован: 07 ноя 2011, 08:45
- Откуда: Ступино МО
Re: Управление Умным Домом с помощью голоса
Частота дискретизации нужна 8 кГц, меньше слишком тяжко распознавать хоть что-то. А так как за основу взят Мега девайс, то пока увы... (Если прошивка сейчас позволяет - тогда это прекрасно. Не слежу в последнее время за релизами... )Давно никаких новостей про распознование голоса на arm не было, может какие сложности возникли??
С активацией по ключевому слову в этой ветке уже было несколько решений. Через CVoiceControl, через php (Безумный велосипед, но работал), через Google. Можно и через Андроид (оффлайн - распознавание)... Вариантов куча.А кто ни будь с активацией по ключевому слову продвинулся куда ни будь?
Ссылка, которую Вы привели - это просто google-now. На Винде и Маке она уже давно в тестовой ветке. На Линуксе - увы. )))) Но есть вот такое расширение для хрома... Но использовать браузер для "ключевого слова" - это странно на мой взгляд.
Использовать Sphinx как вариант... Но сделать его "миниатюрным" довольно не тривиально. Хотя в 2013-2014 русская база у него выросла. Как пример - статьи на Хабре (там ноут в качестве сервера).
В принципе, как мне кажется, надо переключить внимание с нейронных сетей, матриц и прочей интересной математической составляющей на уже готовое... Андроид с его офлайн базой прекрасно подойдёт, надо будет попробовать.
Лень — двигатель прогресса...
-
- Сообщения: 17
- Зарегистрирован: 08 мар 2014, 11:11
Re: Управление Умным Домом с помощью голоса
поддержу вопрос с активацией по ключевому слову.
Есть идеи как реализовать такую схему?
1. Записать ключевое слово, типа Алиса.
2.Когда система его распознает(без гугла) отправляет команду подтверждения типа "Слушаю"
3. И только после этого производить запись команды и отправка ее гуглу на распознание
Есть идеи как реализовать такую схему?
1. Записать ключевое слово, типа Алиса.
2.Когда система его распознает(без гугла) отправляет команду подтверждения типа "Слушаю"
3. И только после этого производить запись команды и отправка ее гуглу на распознание
-
- Сообщения: 184
- Зарегистрирован: 07 ноя 2011, 08:45
- Откуда: Ступино МО
Re: Управление Умным Домом с помощью голоса
Проблема в пункте номер два =)dragon rider писал(а):поддержу вопрос с активацией по ключевому слову.
Есть идеи как реализовать такую схему?
1. Записать ключевое слово, типа Алиса.
2.Когда система его распознает(без гугла) отправляет команду подтверждения типа "Слушаю"
3. И только после этого производить запись команды и отправка ее гуглу на распознание
Почитайте от сюда или отсюда. Первая это велосипед на php, вторая CVoiceControl.
Лень — двигатель прогресса...
-
- Сообщения: 17
- Зарегистрирован: 08 мар 2014, 11:11
Re: Управление Умным Домом с помощью голоса
Ну это я все читал, в указанных примерах нет решения для пункта 2ArtSamovar писал(а): Проблема в пункте номер два =)
Почитайте от сюда или отсюда. Первая это велосипед на php, вторая CVoiceControl.
Походу придется gamecommander использовать
Re: Управление Умным Домом с помощью голоса
На smartliving, человек написал ссылку на еще один движок, который можно использовать для разговора.
Если карты лягут хорошо, то выложу скрипт на php общающийся с ivona.com
<?php
$msg=$_REQUEST["q"];
// дальше по вкусу. например так
$url="http://www.ispeech.org/p/generic/getaud ... on=convert";
print file_get_contents($url);
?>
Если карты лягут хорошо, то выложу скрипт на php общающийся с ivona.com
<?php
$msg=$_REQUEST["q"];
// дальше по вкусу. например так
$url="http://www.ispeech.org/p/generic/getaud ... on=convert";
print file_get_contents($url);
?>
Re: Управление Умным Домом с помощью голоса
Выкладываю.
Для вызова: ivonaTTS('Привет, меня зовут Татьяна.');
Работает только под линуксом.
Для вызова: 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;
}
}
?>
-
- Сообщения: 184
- Зарегистрирован: 07 ноя 2011, 08:45
- Откуда: Ступино МО
Re: Управление Умным Домом с помощью голоса
Кто-нибудь пробовал CMUSphinx?
Лень — двигатель прогресса...
-
- Сообщения: 254
- Зарегистрирован: 15 июл 2013, 23:43
- Откуда: Астрахань
Re: Управление Умным Домом с помощью голоса
Для тех у кого перестал работать google speech api https://github.com/gillesdemey/google-speech-v2
Re: Управление Умным Домом с помощью голоса
Поясню: Google Speech API закрыли для широкой общественности.arbuzmaster писал(а):Для тех у кого перестал работать google speech api https://github.com/gillesdemey/google-speech-v2
В браузере 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 передавать, у меня такие выкрутасы не заработали.
-
- Сообщения: 254
- Зарегистрирован: 15 июл 2013, 23:43
- Откуда: Астрахань
Re: Управление Умным Домом с помощью голоса
А теперь и это прикрыли 403. Это ошибка.
Ваш клиент не имеет разрешения, чтобы получить URL / speech-api/v2/recognize? выходной = JSON & LANG = RU-RU & ключ = AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4 с этого сервера. Вот и все, что мы знаем.
А в google для разработчиков Speech API теперь нету или я просто не нашёл!!
Ваш клиент не имеет разрешения, чтобы получить URL / speech-api/v2/recognize? выходной = JSON & LANG = RU-RU & ключ = AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4 с этого сервера. Вот и все, что мы знаем.
А в google для разработчиков Speech API теперь нету или я просто не нашёл!!
-
- Сообщения: 254
- Зарегистрирован: 15 июл 2013, 23:43
- Откуда: Астрахань
Re: Управление Умным Домом с помощью голоса
Если кому интересно то можно еще сделать на HTML5 + AJAX на Androide в Сhrome тоже будет работать! Найдёте var url замените на свой! В text.php ловить $_GET['text']; Но и здесь есть загвоздка - нужно создавать HTTPS соединение иначе при отсутствии речи более 10 сек появится запрос на доступ к микрофону Если кто знает как бороться с запросом на доступ к микрофону после 10 сек напишите пожалуйста?
Посмотреть как это работает можно здесь!!! http://www.youtube.com/watch?v=4YtVxEh8w8o
Код: Выделить всё
<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>
Посмотреть как это работает можно здесь!!! http://www.youtube.com/watch?v=4YtVxEh8w8o
Последний раз редактировалось arbuzmaster 02 авг 2014, 00:35, всего редактировалось 1 раз.
Re: Управление Умным Домом с помощью голоса
Уважаемые товарищи! Подскажите, возможно ли сейчас распознавание через google на linuxe? Или гугл намертво прикрыл это дело? Если все таки можно, то пожалуйста подскажите как? В силу моей не компетентности в данном деле и лишь поверхностного понимания ситуации хотелось бы получить готовый код))
-
- Сообщения: 254
- Зарегистрирован: 15 июл 2013, 23:43
- Откуда: Астрахань
Re: Управление Умным Домом с помощью голоса
Вверху вполне рабочий код Сам его использую. Насколько я понял Google отказался от распознавания медиа файлов с голосом и выдачи результата. У меня покрайней мере ничего не получается
Re: Управление Умным Домом с помощью голоса
Голосовое управление домом при помощи Home Commander.
http://youtu.be/UGvKVL_Pqgo - пруфлинк, что работает
Продолжение здесь: viewtopic.php?f=1&t=744&start=80#p13748
Продолжение здесь: viewtopic.php?f=1&t=744&start=80#p13748
Re: Управление Умным Домом с помощью голоса
Мы делали голосовое управление и синтез голоса для своей системы управления домом по сценариям. 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
Возможно, кому-нибудь пригодится.
Работает локально (без обращения к стороннему серверу) через Microsoft Speech API, но только на Windows. В принципе, если вы не завязаны на linux, это очень хороший вариант.
Голосовой модуль в состоянии разработки. Сейчас умеет запускать сценарии (последовательности действий) при получении голосовой команды. Активация - по кодовому слову (сейчас зашито в коде: "Эй, компьютер"). Также умеет говорить переданный ему текст.
Вот исходники голосового модуля: https://github.com/dima117/thinking-hom ... ins.Speech
Исходники всей системы: https://github.com/dima117/thinking-home
Возможно, кому-нибудь пригодится.