Сегодня 11 февраля, вторник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7278
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Леонид Каганов. Онлайн дневник.
Леонид Каганов. Онлайн дневник.
Голосов: 4
Адрес блога: http://lleo.aha.ru/dnevnik/
Добавлен: 2007-10-21 03:51:40 блограйдером Lurk
 

2013/11/25 - Поговорить с роботом

2013-11-26 15:13:56 (читать в оригинале)

Простенькая безделушка, но забавная — произносишь в микрофон слово, а компьютер тебе в ответ голосом сообщает информацию обо всем на свете, что ни спросишь:

линукс
пушкин
путин
каганов

Что используем?

— API Гугля — распознавание речи

— API Гугля — синтез речи

— lurkmore.to — вычленение первого абзаца статьи

— ну и элементарные консольные утилитки по обработке звука: rec, flac, ffmpeg, sox, lame

Все работает на трех консольных файликах (консольных! не надо php браузером лезть открывать :)

info.sh - основной скрипт

#!/bin/bash

while : ; do

rm ./voice.flac ; rec -c 1 -r 16000 voice.wav silence 1 0.3 3% 1 0.3 3%

flac -f -s voice.wav -o voice.flac 2>&1 >/dev/null

php lurk.php `php google.php`

done

google.php - распознаём текст

#!/usr/bin/php

<?php

$ch=curl_init(); curl_setopt($ch,CURLOPT_POST,1);

curl_setopt($ch,CURLOPT_POSTFIELDS,array('myfile'=>'@voice.flac'));

curl_setopt($ch,CURLOPT_URL,'https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU');

curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type: audio/x-flac; rate=16000'));

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $r=curl_exec($ch); curl_close($ch);

$json=json_decode($r,true);

if(empty($json['hypotheses'][0]['utterance'])) die('');

die($json['hypotheses'][0]['utterance']);

?>

lurk.php - ищем и зачитываем голосом информацию

#!/usr/bin/php

<?php

if($argc<=1) die('error: arg'); $argv[0]=''; $q=trim(implode(' ',$argv));

passthru("rm speechout*.mp3");

$s=file_get_contents("http://lurkmore.to/".urlencode($q));

if($s=='') playz("не знаю"); else {

$a=explode("<p><b>",$s); $s=$a[1];

$s=preg_replace("/<\/p>\n.*$/si","",$s); $s=preg_replace("/\([^\)]+\)/s","",$s);

$s=strip_tags($s);$s=preg_replace("/\s+/s"," ",$s); $r=explode(" ",$s);

$get=0; $hore=0; $z=''; foreach($r as $l) { $z.=" ".$l; $hore+=(strlen($l)+1);

if(strstr($l,'.') && $hore >300 ) break;

if(strlen($z)>50 && (strstr($l,'.')||strstr($l,',')) ) $z=playz($z);

} playz($z);

}

$e=implode(" ",glob('speechout*')); passthru("play ".$e."");

if($e=='') exit;

passthru('lame voice.wav --resample 22050 voice.mp3 ; ffmpeg -i "concat:voice.mp3|'

.str_replace(' ','|',$e).'" -acodec copy "results/'.$q.'.mp3"');

function playz($z) { global $get; $z=trim($z); if($z=='') return '';

$g=passthru('wget -U "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5"'

.' "http://translate.google.com/translate_tts?q='.urlencode($z).'&tl=ru" -O speechout'.($get).'_.mp3 '

.' ; sox --show-progress speechout'.($get).'_.mp3 speechout'.($get).'.mp3 speed 1.5 pitch -500'

.' ; rm speechout'.($get++).'_.mp3'

.' &');

return '';

}

?>

У кого Линукс, можете сами проверить. Я думаю, осталось только запихнуть этого оракула в маленькую малахитовую шкатулку с Raspberry Pi внутри, вписать более умный разбор строки (реакция лишь на те фразы, которые начинаются на «что такое» или «кто такой»), и уже можно ехать в Сколково демонстрировать искусственный интеллект высоким правительственным чиновникам Минсвязи и Минобразования.

Оригинал заметки находится по адресу http://lleo.me/dnevnik/2013/11/25.html, там можно оставить комментарии.




 


Самый-самый блог
Блогер Рыбалка
Рыбалка
по среднему баллу (5.00) в категории «Спорт»
Изменения рейтинга
Категория «Новости»
Взлеты Топ 5
Падения Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.