Распознавание речи из видео — это одна из ключевых задач в области обработки естественного языка, которая находит свое широкое применение в различных сферах, начиная от развлекательной индустрии и заканчивая научными приложениями.
Технология распознавания речи широко используется в области здравоохранения, применяется для создания голосовых ассистентов, системы умного дома, автоматического создания субтитров, искусственного интеллекта и чат-ботов. С развитием технологий глубокого обучения и искусственного интеллекта стали доступны новые методы и подходы к распознаванию речи из видео, что существенно улучшает точность и эффективность этого процесса.
В данной статье мы рассмотрим проект по распознаванию речи из видео, преимущества и недостатки данной разработки, а также посмотрим на то, как ее внедрение помогло ускорить работу аналитиков и разработчиков на проекте.
Для чего нужен инструмент распознавания речи из видео?
Улучшение пользовательского опыта – для эффективного и удобного взаимодействия с контентом;
Автоматизация процессов: позволяет автоматизировать процессы транскрибирования и анализа видео-контента. Это может быть полезно для составления протоколов рабочих встреч, так как существенно сокращает время получения и обработки информации по сравнению с полным просмотром видео;
Поиск и анализ нужной информации в видеоматериалах. Благодаря тому, что добавлены в расшифрованную речь тайминги – с какого по какой период была распознана речь – это облегчает извлечение ценной информации.
На рынке уже есть готовые решения для распознавания речи из видео, но они платные: например, сервисы Писец, VEED, Yandex SpeechKit. В каждом из них присутствует бесплатная версия, но есть ограничения по длительности видео, его качеству и размеру файлов. Помимо этого, пользователь отправляет видео на сторонний сервис, что небезопасно с точки зрения конфиденциальности данных. Из-за специфики компании и политики безопасности было решено разрабатывать локальный проект, которому не нужен доступ в интернет.
На проекте, который мы рассмотрим в статье, было огромное количество материалов онбординга и записанных встреч – все это необходимо было просмотреть. Продолжительность многих видео более двух часов. Стоит также добавить, что некоторые встречи с заказчиками или встречи с другими отделами записывались для того, чтобы не забыть, о чем была встреча, так как она длятся в среднем более 40 минут.
Стек технологий проекта по распознаванию речи из видео
Для разработки проекта был выбран Python. Данный язык имеет богатую коллекцию различных библиотек с аудио и видео файлами.
В проекте используются библиотеки Python:
moviepy – работает с видео файлами и необходима для извлечения аудиодорожки;
pydub – для обрезки аудиодорожки на аудио фрагменты;
whisper – предобученная модель от OpenAI для распознавания речи из видео и аудиофайлов.
Нужно отметить, что whisper может самостоятельно распознавать видео и аудиофайлы, а также делить аудиодорожку на фрагменты, но на это затрачивается большое количество времени и ресурсов. Для «облегчения» проекта было принято решение «подставлять» в whisper готовые фрагменты. В результате удалось ускорить работу на 20%.
ПОЧЕМУ БЫЛ ВЫБРАН WHISPER?
Whisper предлагает очень простой и интуитивно понятный API, который позволяет легко и быстро реализовывать распознавание речи в своем коде. Поэтому даже новички в программировании могут с легкостью освоить библиотеку и начать использовать ее для своих проектов. Благодаря открытому коду вы можете свободно модифицировать и расширять функционал библиотеки под свои нужды, а также внести свой вклад в развитие сообщества и улучшение качества программного обеспечения. Whisper может работать без доступа к интернету, что позволяет не беспокоиться о конфиденциальности и безопасности данных.
Принцип работы проекта по распознаванию речи из видео
Для удобства использования и анализа были добавлены тайминги в распознанную речь для того, чтобы пользователь мог при необходимости прослушать фрагмент.
Проверка работы проекта по распознаванию речи из видео
Проект проверялся на записях встреч. Результат оказался положительным, распознанная речь приближена к оригинальному видео. Здесь мы демонстрируем результаты распознанной речи, по которым можно убедиться в том, что вместе с русской речью распознаются еще и английские слова, но стоит сказать, что не всегда правильно.
Недостатки проекта по распознаванию речи из видео
Как и у всех продуктов проект по распознаванию речи из видео имеет недостатки:
Медленное распознавание речи. Это связано с тем, что для работы необходимы ресурсы для ускорения (например, видео длительностью 1 час будет распознаваться около 30 минут);
При нечеткой речи диктора распознавание может отличаться;
Заедание слов. Если диктор часто делает длительные паузы, то может продублировать последнее слово;
Невозможность whisper использовать аудио фрагменты, которые хранятся в памяти, а не файлом. Из-за этого аудио файлы сохраняются локально и потом используются.
Вывод
Рассмотренный в статье кейс по распознаванию речи из видео продемонстрировал, как внедрение данной технологии позволило команде упростить работу на проекте за счет эффективного анализа встреч и конференций, а бизнесу – ускорить процесс принятия решений.
Инструкция по установке проекта: https://github.com/OnvoKoder/SpeechRecognitionFromVideo
Пример кода проекта
import whisper
import moviepy.editor as mp
from pydub import AudioSegment
import os
from datetime import datetime
def extract_audio(video_path:str) -> str:
video = mp.VideoFileClip(video_path)
audio_path = video_path.replace('.mp4', '.wav')
video.audio.write_audiofile(audio_path)
return audio_path
def split_audio(audio_path:str, interval:int) -> list[str]:
audio = AudioSegment.from_file(audio_path)
chunk:AudioSegment
chunks_name:str = ''
history = []
for i in range(0, len(audio), interval):
chunks_name = f'chunk{i}.wav'
chunk = audio[i : i + interval]
chunk.export(chunks_name, format = 'wav')
history.append(chunks_name)
return history
def extract_text(chunk:str, language:str) -> str:
model = whisper.load_model('small')
print(f'[{datetime.now()}] {chunk} start recognition')
audio_text = model.transcribe(chunk, language = language[0:2])
print(f'[{datetime.now()}] {chunk} complete recognition')
os.remove(chunk)
return audio_text['text']
def upload_video(video_path:str, interval:int, language:str) -> str:
audio_path:str = extract_audio(video_path)
chunks:list[str] = split_audio(audio_path, interval)
result = []
for chunk in chunks:
result.append(extract_text(chunk, language))
tmp:str = ''
for index in range(0, len(result)):
tmp += f'\ntime:{index} - {index + 1} minutes\n'
tmp += result[index]
return tmp
current_dir = os.getcwd()
for filename in os.listdir(current_dir):
if filename.endswith('.mp4') and filename.startswith('recognition!') == False:
print(f'[{datetime.now()}] {filename} start recognition')
text = from_video(filename, 60000)
file = open(filename.replace('.mp4', '.txt'), 'w')
file.write(text)
file.close()
os.rename(filename,f'recognition!{filename}')
print(f'[{datetime.now()}] {filename} finish recognition')
Комментарии (7)
zoldaten
15.10.2024 12:46у одного из whisperoв была возможность перегонять real-time речь в текст с микрофона. это может быть решением создания временных файлов.
также можно whisperов в докер-образы "настрогать" и туда аудио-chunkи отправлять, если локально whisper не дает распараллелиться.
vagon333
Заинтриговал заголовок.
Ожидал, что видеоряд как-то используется при распознавании аудио, а в реальности перегонка mp3 в текст.
Сохранение во временный файл, мне кажется, вполне решение.
Кстати, этот комментарий надиктовал через самописное приложение распознавания речи на базе Whisper, хостимый на Groq.
То есть прекрасно работает для real-time text-to-speech.
Время преобразования русскоязычной речи в текст от 300 миллисекунд со средним временем ответа 0,7 секунды..
Стоимость на текущий момент 0 рублей 0 копеек и в дальнейшем будет стоить тоже копейки, если посмотреть на расценки в Groq.
nehrung
А наоборот, speech-to-text, можете что-нибудь порекомендовать? Причём не просто speech из местного, достаточно качественного микрофона, а удалённый за тыщу км и поступающий по Скайпу или по тлф-линии, которая иногда достаточно сильно режет спектр. Нужно это для того, чтобы дать доступ к телефонной связи абсолютно глухому инвалиду и огромному количеству его собратьев по такой инвалидности.
В том, что задача разрешима, можно убедиться по функции "Прямая расшифровка", встроенной в смартфоны Google Pixel. Но во-первых, список поддерживаемых языков в этой опции не содержит русского, и во-вторых, даже если бы он там был - санкции...
Я уже задавал этот вопрос (вот тут), и каждый раз, когда я вижу статью по этой тематике, просыпается надежда, что сейчас наконец-то прочту о том, что решение этой проблемы найдено, или по крайней мере, находится в разработке. Но нет, люди занимаются чем-то другим...
vagon333
Я как раз и писал про Speech-to-Text.
Whisper для распознавания речи и перегонки в текст.
Я сейчас этот ответ надиктовываю вам через Whisper, который хостится на сайте Groq.
Написал простое приложение на питоне, которое по горячей кнопке распознаёт русскую и английскую речь и переводит в текст.
По отжатии горячей кнопки среднее время получения текста 0,7 секунды.
Также добавил возможность сделать перевод текста из русского в английский и из английского в русский.
То есть говорите на русском языке, а результат выдается на английском.
Вот этот текст я наговорил на русском языке.
I also spoke this text in Russian, but it was automatically translated into English.
nehrung
Ну, не знаю... Я ведь как прочитал, так и понял. У вас написано
а вовсе не Speech-to-Text. Но если там действительно Speech-to-Text, то может быть, дадите ссылочку на что-то реально работающее?
vagon333
Да, в первом комментарии моя ошибка.
Я имел в виду не text-to-speech, а speech-to-text.
Да, скину линк на свой git-репозиторий. В нем speech-to-text Python application и скомпилированный экзешник на 14 мегабайт, где этот же питоновский код переведен в executable.
В этом же репозитории powershell файл для конвертации питоновского кода в экзешник.
Напишите пожалуйста в личку, я скину линк.
zoldaten
@nehrung vosk попробуйте. а также base,learge модели whisper русским владеют.