我正在尝试将用于识别的音频文件发送给IBM Watson,后者通常用于语音到文本的转换。我已经按照HTTP Rest接口的教程,在那里我发现了这个:
curl -X POST -u {username}:{password}
--header "Content-Type: audio/flac"
--data-binary @{path}audio-file.flac
“https://stream.watsonplatform.net/speech-to-text/api/v1/recognize”
此命令用于识别要发送给watson的音频文件。
下面是我使用cURL的PHP代码。
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
"https://stream.watsonplatform.net/speech-to-
text/api/v1/recognize");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$post = array(
"file" => "@" .realpath("{path}audio-file.flac")
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "{username}" . ":" .
"{password}");
$headers = array();
$headers[] = "Content-Type: audio/flac";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
else{
print_r($result);
}
curl_close ($ch);
?>
当我在浏览器中运行时,我不断收到此错误:
{ "code" : 401 , "error" : "Not Authorized" , "description" : "2018-05-03T03:15:09-05:00, Error ERCDPLTFRM-INVLDCHR occurred when accessing https://stream.watsonplatform.net/speech-to-text/api/v1/recognize, Tran-Id: stream01-896101253 - " }
预期输出应为:
{
"results": [
{
"alternatives": [
{
"confidence": 0.891,
"transcript": "several tornadoes touch down as a line
of severe thunderstorms swept through Colorado on
Sunday "
}
],
"final": true
}
],
"result_index": 0
}
我不明白该怎么做以纠正错误。二进制数据字段是否正确?下面的那个:
$post = array(
"file" => "@" .realpath("{path}audio-file.flac")
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
还是有其他问题...
[注:
我通过提供有效的用户名和密码成功纠正了身份验证问题。但现在问题似乎有所不同。我的代码中的一些修改如下:
$post = array(
"file" =>
curl_file_create('<tmp_path>','file_type','file_name')
);
$headers[] = "Content-Type: audio/mp3";
这些修改是在我的音频文件是mp3扩展的情况下进行的。但现在在浏览器上运行脚本时,我得到了:
{“code_description”:“错误请求”,“代码”:400,“错误”:“流是0字节,但需要至少100字节。” }
我已查看有关此错误的相关帖子:400问题,但问题仍然存在。这是链接Send file via cURL from form POST in PHP
即使按照上述链接中的答案,我的问题仍未解决。
但是当在终端中运行以下内容时:
curl -X POST -u {some_username}:{some_password} --header“Content-Type:audio / mp3”--data-binary @ / var / www / test / 96 _-_ Cliches.mp3“{{3 }}“
完全按预期获取输出。但是当在浏览器上运行php脚本时,我遇到了这个问题。什么可能出错?请建议做什么。谢谢。
答案 0 :(得分:0)
我已经解决了这个问题!!这是下面负责问题的部分......
$post = array(
"file" =>
curl_file_create('<tmp_path>','file_type','file_name')
);
我必须在我的php文件中添加一些代码......
$data = file_get_contents(<temp_file_path>);
tmp_file_path来自..
$tmpfile = $_FILES['audio']['tmp_name'];(When you are using form to upload the audio and send to Watson server)
还添加了其他一些行...
curl_setopt($ch,CURLOPT_HTTPHEADER, ['Content-Type: audio/mp3']);
curl_setopt($ch,CURLOPT_BINARYTRANSFER,TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
然后在浏览器中执行代码,结果如预期的那样完美 如下所示:
{
"results": [
{
"alternatives": [
{
"confidence": 0.891,
"transcript": "several tornadoes touch down as a line
of severe thunderstorms swept through Colorado on Sunday
"
}
],
"final": true
}
],
"result_index": 0
}
所有人都照顾好了:D!