я уже потратил 1 день, чтобы узнать лучшие практики использования Google Speech API.
это моя последняя попытка здесь мы будем использовать онлайн источник чтобы убедиться, что у нас одинаковое аудио. Еще одно требование вам нужно ffmpeg
конвертировать mp3 в Google API желаемого формата.
аудио информация:
что я сделал:
выведите то, что я хочу: получить выравнивание текста. Но это второстепенная цель, потому что сейчас я сосредотачиваюсь на том, почему я получаю так много пропущенного транскрибированного текста.
Заметка: запустить его на bash / cmd
скрипт: базовый синхронный
transcrib.php
<?php
set_time_limit(300); //5min
//google speech php library
require __DIR__ . '/vendor/autoload.php';
# Imports the Google Cloud client library
use Google\Cloud\Speech\SpeechClient;
//use Google\Cloud\Storage\StorageClient;
use Google\Cloud\Core\ExponentialBackoff;//json credential path
$google_json_credential = 'cloud-f7cd1957f36a.json';
putenv("GOOGLE_APPLICATION_CREDENTIALS=$google_json_credential");
# Your Google Cloud Platform project ID
$projectId = 'cloud-178108';
//$languageCode = 'en-US'; //not good (too many miss
$languageCode = 'en-GB'; //adele country
$oldFile = "test.mp3";
//flac or wav??
$typeFile = 'wav';
$sampleRate = 16000;
if($typeFile = 'wav'){
$newFile = "test.wav";
$encoding='LINEAR16';
$ffmpeg_command = "ffmpeg -i $oldFile -acodec pcm_s16le -ar $sampleRate -ac 1 $newFile -y";
}else{
$newFile = "test.flac";
$encoding='FLAC';
$ffmpeg_command = "ffmpeg -i $oldFile -c:a flac -ar $sampleRate -ac 1 $newFile -y";
}
//download file
//original audio info: adele - chasing pavements, stereo (2 channel) 44100Hz mp3
$rawFile = file_get_contents("http://www.karaokebuilder.com/pix/toolkit/sam01.mp3");
//save file
file_put_contents($oldFile, $rawFile);
//convert to google cloud format using ffmpeg
shell_exec($ffmpeg_command);
# The audio file's encoding and sample rate
$options = [
'encoding' => $encoding,
'sampleRateHertz' => $sampleRate,
'enableWordTimeOffsets' => true,
];
// Create the speech client
$speech = new SpeechClient([
'projectId' => $projectId,
'languageCode' => $languageCode,
]);
// Make the API call
$results = $speech->recognize(
fopen($newFile, 'r'),
$options
);
// Print the results
foreach ($results as $result) {
$alternative = $result->alternatives()[0];
printf('Transcript: %s' . PHP_EOL, $alternative['transcript']);
print_r($result->alternatives());
}
Результат:
ан-США:
wav: even if it leads nowhere [confidence: 0.86799717]
flac: even if it leads nowhere [confidence: 0.92401636]
** en-GB: **
wav: happy birthday balloons delivered Leeds Norway [confidence: 0.4939031]
flac: happy birthday balloons delivered Leeds Norway [confidence: 0.5762244]
Ожидаемый результат:
Should I give up
Or should I just keep chasing pavements?
Even if it leads nowhere
Or would it be a waste?
Even If I knew my place should I leave it there?
Should I give up
Or should I just keep chasing pavements?
Even if it leads nowhere
если вы увидите результат против ожидаемого, вы поймете, что не только я пропустил так много текста, но и это тоже мисс.
Если честно. Я не знаю, может ли машина (облако Google) четко слышать преобразованный звук или нет. но я пытаюсь отправить лучший конвертированный аудио, как я могу.
я что-то пропустил в своем сценарии? или я не конвертирую аудио правильно?
Рассматривая ваш скрипт, кажется, ваш код был написан точно —https://cloud.google.com/speech/docs/reference/libraries#using_the_client_library.
Кроме того, тот факт, что было выбрано несколько слов, показывает, что облачный Google Speech API получает ваше преобразованное аудио. Хотя Speech API может успешно обрабатывать шумное аудио и распознает более 110 языков и вариантов, я считаю, что эта проблема с обработкой музыкальных файлов связана с ограничениями работы распознавателя речи. Я думаю, что вы должны попробовать простые аудио (не музыкальные) файлы для тестирования.
Других решений пока нет …