#google-cloud-platform #google-cloud-speech
#google-облачная платформа #google-cloud-speech
Вопрос:
Уже 4 дня я усердно работаю над тем, чтобы заставить работать API преобразования речи в текст в облаке Google, но по-прежнему не вижу света в конце туннеля. Много искал в сети, много читал документацию, но результата не вижу.
Наш сайт bbsradio.com , мы пытаемся автоматически извлечь расшифровку из наших mp3-файлов с помощью Google speech-to-text api. Код написан на PHP и почти точная копия этого: https://github.com/GoogleCloudPlatform/php-docs-samples/blob/master/speech/src/transcribe_async.php
я вижу, что процесс завершен, и он доступен здесь « $operation->pollUntilComplete();
«, но он не показывает, что он был успешным в « if ($operation->operationSucceeded()) {
» и не возвращает никаких ошибок $operation->getError()
.
Я конвертирую mp3 в необработанный файл следующим образом: ffmpeg -y -loglevel panic -i /public_html/sites/default/files/show-archives/audio-clips-9-23-2020/911freefall2020-05-24.mp3 -f s16le -acodec pcm_s16le -vn -ac 1 -ar 16000 -map_metadata -1 /home/mp3_to_raw/911freefall2020-05-24.raw
Хотя я пробовал и с форматом FLAC, не сработало. Я протестировал преобразованный файл FLAC с помощью проигрывателя Windows Media, я могу четко прослушивать разговор. Я проверил файлы с частотой 16000 Гц, канал = 1 и его 16 бит. Я вижу, что файл загружен в облачное хранилище. Проверил это:
https://cloud.google.com/speech-to-text/docs/troubleshooting
и https://cloud.google.com/speech-to-text/docs/best-practices
Есть много обсуждений и документации, кажется, на данный момент ничего не помогает. Если кто-то действительно может помочь мне разобраться в проблеме, это будет действительно действительно здорово!
Ответ №1:
TLDR; конвертируйте из MP3 в 1-канальный файл FLAC с той же частотой дискретизации, что и ваш MP3-файл.
Длинное объяснение:
Поскольку вы используете файлы MP3 в качестве входных данных процесса, вероятно, артефакты сжатия MP3 могут повредить вам при повторной дискретизации до 16 кГц (вы не можете этого услышать, но алгоритм будет).
Чтобы подтвердить эту теорию:
- При выполнении
ffprobe -hide_banner filename.mp3
он выведет что-то вроде этого:
Metadata:
...
Duration: 00:02:12.21, start: 0.025057, bitrate: 320 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
Metadata:
encoder : LAME3.99r
-
В этом случае частота дискретизации подходит для Google-Spech-Api. Просто перекодируйте файл без изменения частоты дискретизации (удалите -ar 16000 из вашей команды ffmpeg)
-
У вас могут возникнуть проблемы, если исходный битрейт MP3 низкий. 320 КБ / с кажется безопасным (если в записи не много шума).
-
Примите во внимание, что голос, перекодированный со скоростью 64 КБ / с (качество линии ISDN), может быть понят человеком только при наличии некоторого шума.
Комментарии:
1. Спасибо за предложение. Я попробовал с предложением. Все еще не работает. Я попробовал с проверенным файлом mp3, я вижу, что он работает, так что код в порядке. Файл mp3, который я тестирую, имеет частоту 32000 Гц, битрейт 80 КБ / с, канал 2 (преобразован в flac с моно). Наверняка есть некоторые связанные с параметром файла mp3.
2. @Md.ShafiqHossain — Жаль это слышать. MP3 хорош для архивирования звука для людей. В настоящее время у машин возникают проблемы с этим. Я не знаю о работающем восстановителе MP3 -> to simple wave (с суперразрешением). Все еще продолжается работа.
3. Я пробовал с файлом wav, но безуспешно. Параметр файла WAV выглядит следующим образом: Продолжительность: 01:57:52.82, битрейт: 1411 кб / с Поток # 0: 0: Аудио: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Гц, стерео, s16, 1411 кб / с, преобразованный вFLAC, подобный этому: Продолжительность: 01:57:52.82, начало: 0.000000, битрейт: 153 кб / с Поток # 0: 0: Аудио: flac, 16000 Гц, моно, s16 <br> Также пробовал с 44100 Гц, тот же результат безуспешен.
Ответ №2:
Наконец-то я нашел решение и причину проблемы. На самом деле получение пустых результатов является ошибкой кода php api. Что вам нужно сделать:
Замените это:
$operation->pollUntilComplete();
этим:
while(!$operation->isDone()){
$operation->pollUntilComplete();
}
Прочитайте это: введите описание ссылки здесь