Распознавание речи из видео — это одна из ключевых задач в области обработки естественного языка, которая находит свое широкое применение в различных сферах, начиная от развлекательной индустрии и заканчивая научными приложениями.
Технология распознавания речи широко используется в области здравоохранения, применяется для создания голосовых ассистентов, системы умного дома, автоматического создания субтитров, искусственного интеллекта и чат-ботов. С развитием технологий глубокого обучения и искусственного интеллекта стали доступны новые методы и подходы к распознаванию речи из видео, что существенно улучшает точность и эффективность этого процесса.
В данной статье мы рассмотрим проект по распознаванию речи из видео, преимущества и недостатки данной разработки, а также посмотрим на то, как ее внедрение помогло ускорить работу аналитиков и разработчиков на проекте.
Для чего нужен инструмент распознавания речи из видео?
-
Улучшение пользовательского опыта – для эффективного и удобного взаимодействия с контентом;
-
Автоматизация процессов: позволяет автоматизировать процессы транскрибирования и анализа видео-контента. Это может быть полезно для составления протоколов рабочих встреч, так как существенно сокращает время получения и обработки информации по сравнению с полным просмотром видео;
-
Поиск и анализ нужной информации в видеоматериалах. Благодаря тому, что добавлены в расшифрованную речь тайминги – с какого по какой период была распознана речь – это облегчает извлечение ценной информации.
На рынке уже есть готовые решения для распознавания речи из видео, но они платные: например, сервисы Писец, 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')
ссылка на оригинал статьи https://habr.com/ru/articles/850608/
Добавить комментарий