отправить данные CURL в IBM Watson для распознавания - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь отправить аудиофайл для распознавания в 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 в браузере, я получаю эту проблему. Что могло пойти не так? Пожалуйста, предложите, что делать. Спасибо.

1 Ответ

0 голосов
/ 04 мая 2018

Я решил проблему !! Это была часть ниже, которая была ответственна за проблему ...

$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!

...