INT 21h

Домашняя страница самого страшного прерывания

Яндекс открыл бесплатный доступ к технологии распознавания речи

№ 6609 В разделе "Программирование" от August 7th, 2014,

http://api.yandex.ru/speechkit/cloud-api/

Ура! Наконец я получил доступ к этой шикарной штуке и уже прикрутил к нашему томскому авторадиоканалу. Чтобы получить ключ вам Яндекс пришлет письмо с вопросом кто вы и какого хрена вам надо. Описываете ваш проект и в течении 1 рабочего дня мне активировали ключик. Однако, не все так прозрачно. Для HTTP запросов бесплатный период всего 1 месяц, а для мобильного SDK бесплатно если запросов до 10000 в сутки. Почему так сделано я не понял. Очевидно, это какая-то особенная магия.

c++-программирование-1138265

Сразу скажу, что из под Linux работать с этим сервисом проще простого. Как это делать из под Windows я не знаю и особо не стремлюсь это узнать, т.к. не использую её. Устанавливайте пакеты с программами sox и speex. Они пригодится для записи аудиофайла. Также нужен curl. Я не стал увлекаться писаниной (ну ленивый я, ага) с php-curl и поэтому в тупую делаю exec с curl.

В моей программе эхорепитера я изменил строку записи сообщения:

/usr/bin/rec -q -r 16000 -b 16 -c 1 $recdir/rec.wav trim 0 30
speexenc --vbr --denoise $recdir/rec.wav $recdir/rec.spx

Таким образом я записал сообщение в удобном для яндекса формате, сразу же обрезал до максимум 30 секунд и перекодировал. Теперь самое время отправить файл на распознавание и чтение ответа.

<?
$recfile = 'rec.spx'; //ваш файл для распознавания
$apikey = 'ваш лицензионный ключик'; //получаете у яндекса
$topic = "freeform"; //это тематика разговоров
$lang = "ru-RU"; //язык
$uuid = "35678909876543235678965432345612"; //сами выдумываете 

//ну тут все из мануала от самого же яндекса. ничего сложного.
$cmd = exec('curl --silent -F "Content-Type=audio/x-speex" -F "audio=@tmp/'.$recfile.'" 
asr.yandex.net/asr_xml\?key='.$apikey.'\&uuid='.$uuid .'\&topic='.$topic.'\&lang='.$lang, $answer);.

$res_xml = implode($answer); //нам вернется массив строк. склеиваем в одну строку
$xml = simplexml_load_string($res_xml); //и кормим библиотеке simplexml

//наиболее вероятный вариант стоит обычно в самом начале
if ($xml->attributes()->success == 1) echo $xml->variant[0]."\n"; else
    echo "not recognized\n";
?>

Ответ будет примерно таким:

string(253) "<?xml version="1.0" encoding="utf-8"?><recognitionResults success="1">
<variant confidence="0.92">привет робот скажи погода</variant>  <variant confidence="0">
привет robot скажи погода</variant></recognitionResults>"

А вот и сам xml-ответ после того, как его скормили библиотеке SimpleXML

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [success] => 1
        )

    [variant] => Array
        (
            [0] => привет робот скажи погода
            [1] => привет robot скажи погода
        )

)

Как я уже писал выше, наиболее вероятный ответ в самом начале списка возможных ответов. Не забывайте сделать проверку на то, что фраза вообще была распознана правильно. Вам поможет в этом аттрибут [success] => 1.

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

Журнал передач автоканала Томска

Ну а сейчас будет долгое упорное исследование точности распознования речи в условиях её передачи по радио в городе. Если в журнале автоканала будет осмысленая речь, то можно начать делать робота для анализа разговоров и ответа на вопросы. Сейчас я собираю архив (публично не доступен) где лежат записи разговоров и их стенограмма.

В любом случае функция архивирования разговоров будет доступна в репозитории с кодом сразу после отладки.

Нет комментариев »

Оставьте ваш комментарий »

Форма отправки комментария

CAPTCHA
*

Разрешенные HTML-теги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

RSS RSS Feed только для этого поста |


Комментарии
  • Серегй: Не совсем грабить)) если грабить можно и без рации, есть более благие цели, вы просто ответьте на мой вопрос,...
  • 21h: магазин грабить собрались? ) не, тут я не помощник ;)
  • Серегй: А что бы мне поймать чужую волну, что мне для этого нужно сделать? Допустим я купил данную рацию себе, мне...
  • 21h: слушать никто не запрещает. нет закона, который запрещает слушать. те, кто говорит иначе нагло врут. а если...
  • Серегй: Я хотел узнать могу ли я просто прийти с данной рацией baofeng uv-5r, допустим на объект, ну или вообще...
  • 21h: У меня есть только эти 2. По другим ничего не знаю. В интернете можно скачать инструкцию к вашей модели рации,...
  • Серегй: Добрый день! Хотелось бы задать пару вопросов по поводу раций, у Вас есть куда можно обратиться ТАТ.
  • 21h: потому, что нейросетью проще. яркость светофора меняется в зависимости от времени суток от маленькой красной...
  • Михаил: А зачем нейросеть? Почему цвет светофора определить без нейросетей?
  • Александр: Иногда нужна техника без доступа интернета и компьютера. Для хранения паролей, счетов, записей и т.д....