0
<< предыдущая заметкаследующая заметка >>
25 ноября 2013
Поговорить с роботом

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

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

Что используем?
— API Гугля — распознавание речи
— API Гугля — синтез речи
— lurkmore.to — вычленение первого абзаца статьи
— ну и элементарные консольные утилитки по обработке звука: sox (в нем же rec), flac, ffmpeg, lame (если sox выдает ошибку отсутствия библиотек libasound, то еще alsa-lib) Все работает на трех консольных файликах (консольных! не надо php браузером лезть открывать :)

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

<?php#!/bin/bashwhile : ; dorm./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 - распознаём текст

<?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 - ищем и зачитываем голосом информацию

<?php#!/usr/bin/php<?phpif($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($ras$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"');

functionplayz($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 внутри, вписать более умный разбор строки (реакция лишь на те фразы, которые начинаются на «что такое» или «кто такой»), и уже можно ехать в Сколково демонстрировать искусственный интеллект высоким правительственным чиновникам Минсвязи и Минобразования.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий