Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 19.04.2015, 03:05   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Распознавание речи

Сабж. Небраузерное приложение с возможностью обращаться к сетевым ресурсам по протоколам прикладного уровня. Степень говнокодности решения несильно волнует: это модульная фича, не затрагивающая архитектуру остальной части приложения. Тем не менее, желательно обойтись без инсталляции дополнительного софта в систему.
В принципе, сейчас с моей стороны интерфейс доведён до записанных фрагментов речи (*.wav). Осталось придумать: как это преобразовать в текст. Вроде как люди делают подобное на ПыХПых-е, при помощи сервиса от гугл. Но я в оном языке не силён, поэтому не очень понимаю алгоритм действий (мне-то что с файликами звукозаписи делать?).
upd:
Пока писал подумал, что на худой конец, можно в невидимое окно браузера направить поток с микрофона и считывать из формочки распознанный текст. Но, к моему ужасу, в том же гугл-переводчике не обнаружил функции речевого ввода (а ведь точно помню, что она была!).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 02:18   #2
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Распознавание речи

Распознавание речи в текст и преобразование текста в речь.

Источник: http://wiki.virt2real.ru/w/%D0%A0%D0...B5%D1%87%D0%B8

Распознавание речи

Распознавание речи производится с помощью сервиса Google, соответственно, работает только при наличии подключения к Интернету.
Принцип заключается в том что на борту Виртурилки с микрофонного входа записывается небольшой фрагмент речи, который кодируется во FLAC и отсылается на сервер Google. После отправки файла Google возвращает JSON ответ, в котором содержится результат распознавания. Это одна (или несколько) гипотез с указанием вероятности для каждой.

Процесс состоит из следующих стадий:

Запись голоса

Так как нам нужно распознавать словесные команды, необходимо записывать голос до появления паузы. Реализуется это с помощью пакета Sox.
Про установку пакета Sox см. инструкцию в самом низу.
rec -c 1 -r 16000 -b 16 /tmp/rec.wav silence 1 0.1 6% 1 0.5 8%
Данная команда записывает в файл /tmp/rec.wav 16-ти битный моно-звук с частотой дискретизации 16000 Гц. При записи используется фильтр silence, который как раз и реализует старт записи при появлении звука и останавливает запись при появлении тишины в течении пол-секунды.
Параметры
1 0.1 6% 1 0.5 8%
задают длительность и громкость стартового звука и длительность и уровень тишины для остановки. Это та ещё магия, подробнее см. документацию на Sox.
При этом в консоли увидим что-то вроде такого ("Done." появится после окончания записи).
Input File : 'default' (alsa)
Channels : 1
Sample Rate : 16000
Precision : 16-bit
Sample Encoding: 16-bit Signed Integer PCM

In:0.00% 00:00:01.02 [00:00:00.00] Out:3.02k [ | ] Hd:0.0 Clip:0
Done.

Кодирование звука во FLAC

Осуществляется командой
flac -f -s /tmp/rec.wav -o /tmp/rec.flac
Где /tmp/rec.wav - входной файл (который мы записали), а /tmp/rec.flac - выходной файл, звук в формате FLAC.

Отправка на сервер Google

Производится с помощью CURL PHP. Данный фрагмент не идеальный, но работает.
Переменная $lang задаёт язык, на котором мы говорили в микрофон во время записи. Гугл сам определять не умеет.
"ru-RU" - для русского,
"en-US" - для американского английского.
$file_to_upload = array('userfile'=>'@/tmp/rec.flac');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=$lang");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Firefox/17.0');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: audio/x-flac; rate=16000"));
curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$json=curl_exec ($ch);
curl_close($ch);
Результат теперь содержится в переменной $json.

Разбор ответа

Ответ сервера Google выглядит примерно вот так (для фразы "привет")
{"status":0,"id":"","hypotheses":[{"utterance":"привет","confidence":0.72668469}]}

Нас тут больше всего интересуют параметры utterance (высказывание) и confidence (уверенность). Т.е. текстовый результат распознавания фразы и вероятность, на сколько эта фраза соответствует действительности.

Синтезирование речи

Для синтезирования речи из текста на данный момент имеется два варианта - локальный, с помощью пакета espeak, и удалённый, через Интернет, с помощью сервиса Google. Второй способ работает только при наличии подключения к Интернету.

eSpeak

Самый неприхотливый к ресурсам движок. Соответственно, самый слабый по возможностям и по качеству синтезированного звука.
Официальный сайт - http://espeak.sourceforge.net. Подробности по параметрам запуска см. там.
Установка осуществляется через пакетную систему Виртурилки, подробнее см. внизу страницы.
Простейший вариант использования:
espeak "hello" --stdout | aplay
eSpeak работает через portaudion, соответственно, необходимо настроить параметры звуковой карты. Правильно это пока сделать не получилось, по-этому вывод программы espeak производится в плеер aplay, таким образом всё отлично работает. Когда разберёмся с настройкой ALSA, внесу коррективы в инструкцию.

Google

Самое приличное произношение на русском языке. Один недостаток - для работы требуется подключение к Интернету. Однако, результаты, полученные от сервера Google (обычные mp3-файлы маленького размера) можно кэшировать в локальной файловой системе, так что при повторном запросе фразы можно брать локально. Этот функционал реализован в примерном скрипте /etc/virt2real/speech/speak.php (про него чуть далее).
Отправка текста фразы на сервер и загрузка результата - mp3-файла производится командой консоли
$TEXT - текст фразы
$LANG - язык. "ru" - для русского, "en" - для английского.
wget -q -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US Gecko/20091102 Firefox/3.5.5" "http://translate.google.com/translate_tts?q=$TEXT&tl=$LANG" -O /tmp/result.mp3
Результат теперь содержится в файле /tmp/result.mp3, который можно воспроизвести командой
play /tmp/result.mp3

Использование скрипта /etc/virt2real/speech/speak.php
Для упрощения выполнения базовых функций по синтезу речи был сделан скрипт, которому надо указать единственный обязательный параметр - текст, который надо произнести.
/etc/virt2real/speech/speak.php text [lang] [engine]
Однако, можно указать ещё два необязательных параметра.
lang - задаёт язык и может принимать значения "ru" - для русского и "en" для английского
engine - задаёт использование движка синтезатора. 0 - использовать eSpeak, 1 - использовать Google
Если дополнительные параметры не указаны - они берутся из глобальной настройки в файле /etc/virt2real/speech/config.json, который устанавливается в модуле "Речь" админки.
При использовании движка Google фразы кэшируются в каталоге /usr/share/googlevoice.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо DarkInside за это полезное сообщение:
impersonalis (15.11.2016), St_AnGer (15.11.2016)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 23:54.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com