April 21, 2021

Бот-Переводчик

После нначала работы над ботом-переводчиком, у меня была лишь одна существенная проблема: сервер(RPi 3B) не мог быть подключенным к серверам Telegram больше определённого времени(я насчитал примерно час). Надо заметить, что данная проблема присутствует только на RPi, если я запускаю бота на своём ПК, то такой проблемы не возникает. После выявления данной проблемы я переустановил ОС на RPi, думая что это поможет.

Помимо проблемы с "сервером", у меня возникла другая: изначально я хотел переводить текст с помощью библиотеки, которая работает на Google Translate. Но, так как при использовании дуфолтной версии библиотеки googletrans из Pypi компилятор выдавал ошибку, я решил использовать библиотеку от Microsoft(называется просто "translate"). Ничего не предвещало беды, как вдруг оказалось, что библиотека от MC имеет "ограничение по запросам на перевод". Если число запросов превысит определённый порог, то запросы перестанут приниматься НА ЧАС! Послав библиотеку от Microsoft в известное место, я нашёл способ заставить работать googletrans.

Когда перевод текста и озвучка были готовы, мне пришла мысль сделать распознование речи из аудио записей и просто аудио файлов. Естественно, для этого я решил использовать SpeechRecognition от тех же Google. Мне предстояло решить уже известную мне по опыту проблему: Заставить SP распозновать текст из аудио файла. Конкретно, SP может распознавать только FLAC, WAV и AIFF. При запихивании аудио файла в SP в каком-либо формате ошибка была всегда идентична:

raise ValueError("Audio file could not be read as PCM WAV, AIFF/AIFF-C, or Native FLAC; check if file is corrupted or in another format")

После трёх дней попыток решения и танцев с бубнами, у меня получилось решить данную проблему(Здесь Решение), если в кратце, то SpeechRecognition требуется WAV в конкретном кодеке. Для решения данной проблемы используется ffmpeg(програ для Linux, наличее её на других ОС не проверял), он перекодирывает файл в нужный кодек и вуаля, SP принимает файл!

У данного решения я нашёл небольшой недостаток, ffmpeg не может переписывать файлы, так что чтобы записать "result.wav", нужно убедится, что такого файла уже нет в выбранной дериктории.

Помните самую первую проблему? Хотите знать как её решить? Я тоже хочу, но к сожалению не знаю как. Так что по факту бот работает, но не на моём сервере.