Я пытаюсь отправить строку Base64 в Google Speech-to-Text API на PHP. Из-за досадных причин я не могу использовать composer для получения библиотеки PHP, поэтому я пытаюсь использовать Speech to Text API через cURL.
$file = base64_encode( file_get_contents(__DIR__.'/test.ogg') );
$data = array(
'config' => array(
"encoding" => 'OGG_OPUS',
'sampleRateHertz' => 16000,
"languageCode"=> "en-GB"),
"audio"=> array (
"content"=> $file
)
);
$ch = curl_init("https://speech.googleapis.com/v1/speech:recognize?key=AIzaSyBxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxx");
curl_setopt_array($ch, array(
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json")
));
$json = curl_exec($ch);
Что я знаю:
Итак, простой вопрос, я надеюсь — что я делаю не так?
Я взял ваш точный код и сам запустил его с PHP 7.1, и я получил ошибку неверного ключа от API. Это говорит о том, что сам код работает нормально и связан с вашей системой, вашей сетью или некоторыми конфигурациями.
Некоторые предложения о том, что вы могли бы посмотреть;
Хорошо. Оказывается, Google API очень требователен к файлам Ogg Opus. Запуск файла через ffmpeg для преобразования его во flac сортирует его.
Что немного странно. Chrome (Google) создает файл опуса webm (Google), который не может обработать система преобразования речи в текст (Google). Преобразуйте его в файл Ogg Opus, который, как утверждает API, он может обработать, и он молча терпит неудачу. Преобразуйте этот Ogg Opus в файл flac (таким образом, с потерями в без потерь, который является ментальным), и он внезапно работает. И работает невероятно хорошо.
Или кто-то еще споткнется об этом в будущем, команда ffmpeg была
ffmpeg -i input.ogg -b:a 16000 output.flac
Это устанавливает его на 16000 бит / с, но я не могу на всю жизнь вспомнить, что делает: a.