我一直在研究语音识别和如何在一个网站上实现这一点。我已经找到了许多与Python一起使用它的例子,甚至还有一个与Node.js一起使用它的例子,但是我希望能够在这里使用PHP。
是否有任何方法可以使用CMUSphinx访问Linux服务器上的来处理输入?
谢谢
发布于 2014-09-04 14:19:47
可以做,但要使用星号作为音频捕获和处理引擎。请参阅http://www.voip-info.org/wiki/view/Sphinx
在您的服务器配置好之后,下面的示例代码
function sphinx($filename='', $timeout=3000, $service_port = 1069, $address = '127.0.0.1'){
/* if a recording has not been passed in we create one */
if ($filename=="") {
$filename = "/var/lib/asterisk/sounds/sphinx_".$this->request['agi_uniqueid'];
$extension = "wav";
$this->stream_file('beep', 3000, 5);
$this->record_file($filename, $extension, '0',$timeout);
$filename=$filename.'.'.$extension;
}
/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
return false;
}
$result = socket_connect($socket, $address, $service_port);
if ($result < 0) {
return false;
}
//open the file and read in data
$handle = fopen($filename, "rb");
$data = fread($handle, filesize($filename));
socket_write($socket, filesize($filename)."\n");
socket_write($socket, $data);
$response = socket_read($socket, 2048);
socket_close($socket);
unlink($filename);
return $response;
}查看该网站后的另一个想法是,sphinx 4允许web服务访问识别处理守护进程,即:将斯芬克斯作为守护进程运行(它的java!)然后,您可以像上面这样打开套接字,直接将一个.wav输入到它中,主要是使用上面的代码修改,所以,而不是调用星号服务器来检索,然后记录音频,您可以使用其他的东西,比如html5等等来记录音频。
另一件需要考虑的事情是,chrome和html5已经内置在语音识别中了。
发布于 2014-09-05 05:55:07
这种系统的体系结构取决于您要处理的音频类型。如果音频很长,您只需将其存储到临时文件中,并调用pocketsphinx_continuous作为外部工具来处理:
http://php.net/manual/en/function.shell-exec.php
您可以调用pocketsphinx_continuous -infile file.wav > decode-result.txt,这样就可以显示结果。这种方法的问题是解码初始化需要时间,所以您将无法将该方法用于短文件。
如果您想要处理短示例或想要以流模式处理音频,您需要某种服务器来加载模型并等待请求。关于如何实现它,有不同的变体,从简单的手工制作的服务器,通过简单的协议监听TCP端口,接受数据,再到更复杂的解决方案,比如http://unimrcp.org。
https://stackoverflow.com/questions/25666760
复制相似问题