Я пытаюсь отправить аудиофайл для распознавания в 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.
И ниже мой PHP-код с использованием cURL.
<?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": "Bad Request", "code": 400, "error": "Поток был 0 байтов, но должен быть не менее 100 байтов." }
Я проверил соответствующее сообщение об этой ошибке: проблема 400, но проблема остается. Это была ссылка Отправить файл через cURL из формы POST в PHP
Даже после ответов по приведенной выше ссылке моя проблема не решается.
Но когда в терминале запускается следующее:
curl -X POST -u {some_username}: {some_password} --header "Content-Type: audio / mp3" --data-binary @ / var / www / test / 96 _-_ Cliches.mp3 " https://stream.watsonplatform.net/speech-to-text/api/v1/recognize"
Он отлично выбирает вывод, как и ожидалось. Но когда я запускаю скрипт php в браузере, я получаю эту проблему. Что могло пойти не так? Пожалуйста, предложите, что делать. Спасибо.