Невозможно получить доступ к облачному API речи из веб-приложения, используя PHP - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь расшифровать аудиофайл, загруженный пользователем из веб-приложения, запущенного на экземпляре вычислительного механизма, у которого есть доступ ко всем облачным API и клиентским библиотекам, установленным с использованием composer. Однако я не получаю ответа от облачного речевого API после попытки отправить свой запрос с использованием PHP. Кто-нибудь, пожалуйста, помогите мне понять, чего не хватает. Вот мой код PHP, куда аудиофайл направляется из формы с селектором файлов. Я также пытался расшифровать, но аудиофайл из облачного хранилища все еще ничего не получил

<?php
require __DIR__ . '/vendor/autoload.php';
use Google\Cloud\Speech\V1\SpeechClient;
use Google\Cloud\Speech\V1\RecognitionAudio;
use Google\Cloud\Speech\V1\RecognitionConfig;
use Google\Cloud\Speech\V1\RecognitionConfig\AudioEncoding;

$audioFile = $_FILES["my_audio"]; //from file picker
$encoding = AudioEncoding::LINEAR16;
$sampleRateHertz = 32000;
$languageCode = 'en-US';

$content = file_get_contents($audioFile);
$audio = (new RecognitionAudio())
   ->setContent($content);
$config = (new RecognitionConfig())
   ->setEncoding($encoding)
   ->setSampleRateHertz($sampleRateHertz)
   ->setLanguageCode($languageCode);

$client = new SpeechClient();
$operation = $client->longRunningRecognize($config, $audio);
$operation->pollUntilComplete();

if ($operation->operationSucceeded()) {
   $response = $operation->getResult();

// each result is for a consecutive portion of the audio. iterate
// through them to get the transcripts for the entire audio file.
    foreach ($response->getResults() as $result) {
        $alternatives = $result->getAlternatives();
        $mostLikely = $alternatives[0];
        $transcript = $mostLikely->getTranscript();
        $confidence = $mostLikely->getConfidence();
        printf('Transcript: %s' . PHP_EOL, $transcript);
        printf('Confidence: %s' . PHP_EOL, $confidence);
    }
} else {
    print_r($operation->getError());
}

$client->close();
?>

1 Ответ

0 голосов
/ 11 июля 2020

В $_FILES["my_audio"] нет абсолютного пути. Поскольку вы упомянули, что файл загружен, мне интересно, устанавливаете ли вы что-то вроде этого:

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

С другой стороны, тот факт, что вы не получаете ответа от службы Speech API, это может означать для меня, что запрос не запущен / запущен. Вы можете выполнить валидацию во время загрузки файла или проверить наличие ошибок, используя $_FILES["pictures"]["error"], чтобы убедиться, что все в порядке.

Если проблема сохраняется даже с GCS с использованием $uri = 'gs://your-bucket-name/your-audio-file', проблема не могла быть - код, в таком случае, пожалуйста, подробно расскажите о других компонентах, задействованных в вашем варианте использования. Вы упомянули "composer", и мне было интересно, имеете ли вы в виду Cloud Composer.

UPDATE

Я не эксперт PHP, но я заставил его работать с в этом примере :

Сравнив ваш файл, я обнаружил, что у вас:

$uri = "gs://speech-text-audio/h_ana1.flac";
$content = file_get_contents($uri);
$audio = (new RecognitionAudio())
    ->setContent($content);

У меня это сработало:

$uri = 'gs://cloud-samples-tests/speech/brooklyn.flac';
$audio = (new RecognitionAudio())
    ->setUri($uri);
...