Серия «Soulcatcher voice changer bot»

Soulcatcher voice changer 1.2 "Идеи из комментариев"

Привет! Эта серия посвящена процессу разработки моего бота для распознавания и модификации голосовых сообщений в Telegram. Статья, является продолжением предыдущего поста из этой серии: Ответ на пост «Я сделал приложение для разумных трат»


Время чтения ~ 7 минут.


Приятно и одновременно удивительно, что предыдущий пост вышел в горячее. Отдельно греют душу черт знает откуда появившиеся звездочки на GitHub, видимо кого-то это действительно заинтересовало. Спасибо вам, ребята =)
В комментариях к предыдущему посту было предложено немало интересных идей по улучшению функционала бота. Основные предложения касались языковой поддержки уже имеющихся функций - распознавания и синтеза речи. Почитав комментарии и ознакомившись с аналогичными разработками, я вооружился верной кружкой-жабушкой я принялся за работу...

Soulcatcher voice changer 1.2 "Идеи из комментариев" Разработка, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Длиннопост, Python, Программирование

Вкратце для ЛЛ, список изменений выглядит следующим образом:

Soulcatcher voice changer 1.2 "Идеи из комментариев" Разработка, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Длиннопост, Python, Программирование

В принципе, дальше вы можете не читать, а перейти в бота и потестить самостоятельно: https://t.me/Soulcatcher_voice_changer_bot а я пока расскажу о каждом изменении и связанными с ними сложностями (мы же любим сложности?) по отдельности.

Начнем с минорной функции перевода текста. Она не является киллер фичей бота и в данной версии добавлена скорее как фундамент для будущей функции "распознавание + перевод", к которой мы вернемся чуть позже. Сама функция вызывается одной командой из главного меню и не имеет никаких дополнительных настроек. Выглядит это вот так:

Soulcatcher voice changer 1.2 "Идеи из комментариев" Разработка, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Длиннопост, Python, Программирование

Перевод происходит с любого из 180 поддерживаемых языков (которые я, естественно не тестировал) на язык пользователя. Пользовательский язык достается из метаданных сообщения. Несомненно, перевод, обладает некоторой степенью всратости, но мы к этому еще вернемся. Сейчас важно лишь то, что в качестве языкового движка использован Google Translate API. Для безлимитного (относительно) доступа к этой библиотеки, используется библиотека Translators, авторы которой, любезно предоставили свой приватный ключ. Как вы уже заметили, вместе с результатом перевода возвращается и флаг страны, язык которой был определен переводчиком - удобно. Для достижения этого результата я модифицировал библиотеку Translators, заставив ее возвращать не только перевод текста, но и код языка, для которого произведен перевод. По какой то причине, "из коробки", этого функционала небыло.


Машинная переозвучка тоже получила языковую поддержку. Выглядит это так:

Soulcatcher voice changer 1.2 "Идеи из комментариев" Разработка, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Длиннопост, Python, Программирование

Озвучка доступна на ~25 языках, нативный язык озвучки, так-же, как в переводчике, автоматически выбирается исходя из локали, установленной на устройстве пользователя. Помимо этого, вне зависимости от системного языка, всегда доступна озвучка на английском. В случае, если вы носитель одного из этих выдуманных языков с закорючками из самого низа языковых настроек телефона (иными словами, ваш язык не поддерживается ботом), для переозвучки будет предложен только английский =)


Подводя статью к самой интересной части - проблеме распознавания иностранной речи, не могу не отметить еще одно минорное изменение - перевод интерфейса бота на английский язык. Вот как выглядит ресаунд для англоговорящих пользователей (Обратите внимание, на список предложенных языков):

Soulcatcher voice changer 1.2 "Идеи из комментариев" Разработка, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Длиннопост, Python, Программирование

Абсолютно весь интерфейс бота переведен на английский язык. Интерфейс на английском автоматически выводится для всех пользователей, с локалью, отличной от русской. Перевод машинный, частично отредактированный вручную, так что указания на ошибки и опечатки приветствуются!


Итак, мы подошли к самому важному и неоднозначному нововведению в этой версии - мультиязычному распознаванию речи. Не смотря на то, что используемая технология позволяет распознавать речь с огромного количества языков, в предыдущей версии Soulcatcher, распознавание было возможным лишь с русского. Связано это с одной фундаментальной проблемой текущих решений в сфере распознавания речи: Я провел опредеенное время в изысканиях, после чего пришел к выводу, что на данный момент, не существует сервисов или отдельных технических решений, способных достаточно эффективно распознавать речь с заранее неизвестного языка. Даже такие гиганты как Google, не предоставляют своим клиентам (речь идет о коммерческих решениях) подобный функционал, что говорить о бесплатных сервисах? Обратите внимание на нижнюю часть скриншота:

Soulcatcher voice changer 1.2 "Идеи из комментариев" Разработка, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Длиннопост, Python, Программирование

Все дело в том, что современное распознавание речи производится при помощи языковых моделей, что само по себе, достаточно дорогой (в контексте аппаратных возможностей) процесс.  Для того, чтобы понять почему это сложнее, чем анаогичное автораспознавание языка в тексте, нужно понять, как это распознавание устроено. Хорошее объяснение одного из популярных подходов представлено на этой странице: https://translatedlabs.com/определение-языка (Не реклама, мне до работы в таких компаниях еще далеко)

Soulcatcher voice changer 1.2 "Идеи из комментариев" Разработка, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Длиннопост, Python, Программирование

Простыми словами, происходит сравнение переводимого текста с заранее загруженными образцами. В чем же проблема сравнить переводимый голос, с заранее записанными файлами? Дьявол кроется в деталях. Текст по своей сути так-сказать "стабилен", вне зависимости от автора, стиля и назначения текстовой информации, одни и те же слова, дадут предсказуемый, одинаковый результат при любом форматировании. Голос же, имеет такие неочевидные для компьютера свойства как тональность, интонация, акцент. Именно для этого существуют голосовые модели, уникальные для каждого языка и предназначенные для обработки этих, свойственных только человеческому голосу данных. Если еще проще, то при попытке сравнения одного и того же текста, продиктованного разными людьми с некими контрольными показателями, мы всегда будем получать разные результаты. Поэтому голос предварительно необходимо привести в "стабильный" вид при помощи голосовой модели. Для точного распознавания, необходимо применить к записи голоса все доступные языковые модели и только после этого, производить сравнение. Как было отмечено выше, для массового применения, это слишком дорогая (долгая) операция. По этой причине, я пошел по проторенной дорожке и ввел необходимость явно указывать язык распознавания:

Soulcatcher voice changer 1.2 "Идеи из комментариев" Разработка, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Длиннопост, Python, Программирование

Языки были выбраны по принципу "топ семь смешных лягушек 9 самых популярных языков мира"  =)

В целом, распознавание речи работает достаточно сносно, по крайней мере на английском и русском языках. Если в комментариях присутствуют носители индонезийского или, внезапно хинди, было бы здорово услышать ваше мнение.


Следующая версия будет сосредоточена на функционале для бесед, ибо текущая реализация со стейтами, хранимыми в оперативной памяти не только не устраивает меня с точки зрения производительности, но так-же не позволяет ввести функционал администрирования бота админами каналов. Кое-какие идеи, на этот счет уже есть. Еще раз хочу обратить внимание, на то, что без вашего внимания к посту и справедливым замечаниям под ним, это обновление никогда бы не вышло.  А на этом у меня все, еще раз спасибо =)

P.S. Возвращаясь к проблеме выбора API Google Translate в качестве штатного переводчика. Один находчивый человек в комментариях, посоветовал использовать DeepL для этих целей, в целом, я присоединяюсь к его мнению, DeepL реально превосходит все остальные решения на две головы за исключением одного но: Он не доступен в России. Клянусь, я пытался подделать эстонскую кредитку, чтобы зарегистрироваться на их ресурсе, но все тщетно. Если у кого то есть идеи, как это обойти не тратя кучу денег - буду рад их услышать.


-----


По ссылке ниже, вы попадете в репозиторий бота на моем Github, где сможете подробнее ознакомиться с функционалом, стеком использованных технологий, а так же узнать тайну отсылки в его названии. Мой телеграм для связи можно найти как в самом боте, так и на Github.

https://github.com/Raiksler/Soulcatcher-voice-changer

Показать полностью 8

Ответ на пост «Я сделал приложение для разумных трат»

Гхм... Пикабу разрабатывательный =) До этого момента даже не рассматривал Пикабу, как площадку для вывода собственных проектов в публичное поле, да и в целом как-то стеснялся делиться с людьми своими скромными наработками. Спасибо автору исходного поста за вдохновение.


Еще до введения соответствующего платного функционала в телеграм премиум, я разработал бота, преднозначенного для распознавания и\или модификации речи в голосовых сообщениях. Да, прямо как в ВК. Хотя скорее, как в ВК образца 2017 года, т.к. в угоду бесплатности, а так-же в силу ограниченности аппаратных возможностей сервера, бот использует не самые совершенные технологии распознавания, но тем не менее. Хочется быстро пробежать глазами длинное голосовое? Или в силу физических особенностей, нет возможности слушать голосовые? А может нужно отправить голосовое сообщение не "засветив" голос? (И зачем это вам...) О том, как реализовать все это (и немного более) при помощи моего бота, я расскажу ниже!


Как это работает? На самом деле просто. Заходим в бота по ссылке: https://t.me/Soulcatcher_voice_changer_bot или вбиваем в поиск тг "Soulcatcher"...

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

Переходим в бота, тыкаем Start...

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

Кликаем help, для выбора режима работы

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

На данный момент, реализовано три режима, представленные на скрине. Все предельно просто. Суть первого режима понятна из названия - бот принимает входящее голосовое, распознает речь и возвращает ответ в текстовом формате. Машинная переозвучка работает по тому же принципу, за исключением того, что в качестве ответа, бот пришлет голосовое сообщение с синтетически переозвученным текстом. Изменение тональности вернет исходное голосовое, с измененной на случайнуюю величину (внезапно!) тональностью, прямо как в фильмах про шпиёнов.


Пример использования функции распознавания речи. Выбираем режим, отправляем боту голосовое сообщение, получаем ответ о начале обработки:

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

По окончании обработки, которая обычно занимает несколько секунд, получаем ответ:

Ответ на пост «Я сделал приложение для разумных трат» Разработка, Python, Telegram, Telegram бот, Общение, Анонимность, Распознавание голоса, Ответ на пост, Длиннопост

Вот, собственно, и все! Остальные функции работают по тому же принципу. Помимо записывания голосовых непосредственно в самом боте, можно пересылать ему сообщения из других чатов. Кроме того, существует возможность добавить бота в беседу, где он будет обрабатывать сообщения всех участников в потоковом режиме. В этом случае, для каждого участника можно выбрать свой режим работы.


Обращаю отдельное внимание на то, что обработка голосовых сообщений происходит на 3rd party сервере (на моем), что звучит как потенциальная угроза утечки информации. Я, разумеется, даю честное слово, что голосовые сообщения не остаются на сервере по окончании процесса обработки, но тем не менее, заклинаю вас не использовать Soulcatcher, для совершения противоправных действий, а так же, для обработки чувствительных данных, таких как пароли, логины и имена ваших котеек.


Благодарю вас за время, потраченное на чтение поста и надеюсь, что бот окажется кому-то полезным =)


По ссылке ниже, вы попадете в репозиторий бота на моем Github, где сможете подробнее ознакомиться с функционалом, стеком использованных технологий, а так же узнать тайну отсылки в его названии. Мой телеграм для связи можно найти как в самом боте, так и на Github.


https://github.com/Raiksler/Soulcatcher-voice-changer

Показать полностью 5
Отличная работа, все прочитано!