Распознавание речи из видео — это одна из ключевых задач в области обработки естественного языка, которая находит свое широкое применение в различных сферах, начиная от развлекательной индустрии и заканчивая научными приложениями.

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

В данной статье мы рассмотрим проект по распознаванию речи из видео, преимущества и недостатки данной разработки, а также посмотрим на то, как ее внедрение помогло ускорить работу аналитиков и разработчиков на проекте.

Для чего нужен инструмент распознавания речи из видео?

  • Улучшение пользовательского опыта – для эффективного и удобного взаимодействия с контентом;

  • Автоматизация процессов: позволяет автоматизировать процессы транскрибирования и анализа видео-контента. Это может быть полезно для составления протоколов рабочих встреч, так как существенно сокращает время получения и обработки информации по сравнению с полным просмотром видео;

  • Поиск и анализ нужной информации в видеоматериалах. Благодаря тому, что добавлены в расшифрованную речь тайминги – с какого по какой период была распознана речь – это облегчает извлечение ценной информации.

На рынке уже есть готовые решения для распознавания речи из видео, но они платные: например, сервисы Писец, VEED, Yandex SpeechKit. В каждом из них присутствует бесплатная версия, но есть ограничения по длительности видео, его качеству и размеру файлов. Помимо этого, пользователь отправляет видео на сторонний сервис, что небезопасно с точки зрения конфиденциальности данных. Из-за специфики компании и политики безопасности было решено разрабатывать локальный проект, которому не нужен доступ в интернет.

На проекте, который мы рассмотрим в статье, было огромное количество материалов онбординга и записанных встреч – все это необходимо было просмотреть. Продолжительность многих видео более двух часов. Стоит также добавить, что некоторые встречи с заказчиками или встречи с другими отделами записывались для того, чтобы не забыть, о чем была встреча, так как она длятся в среднем более 40 минут.

Стек технологий проекта по распознаванию речи из видео

Для разработки проекта был выбран Python. Данный язык имеет богатую коллекцию различных библиотек с аудио и видео файлами.

В проекте используются библиотеки Python:

  • moviepy – работает с видео файлами и необходима для извлечения аудиодорожки;

  • pydub – для обрезки аудиодорожки на аудио фрагменты;

  • whisper – предобученная модель от OpenAI для распознавания речи из видео и аудиофайлов.

Нужно отметить, что whisper может самостоятельно распознавать видео и аудиофайлы, а также делить аудиодорожку на фрагменты, но на это затрачивается большое количество времени и ресурсов. Для «облегчения» проекта было принято решение «подставлять» в whisper готовые фрагменты. В результате удалось ускорить работу на 20%.

ПОЧЕМУ БЫЛ ВЫБРАН WHISPER?

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

Принцип работы проекта по распознаванию речи из видео

Блок-схема работа с проектом по распознаванию речи из видео
Блок-схема работа с проектом по распознаванию речи из видео
Блок-схема работа проекта по распознаванию речи из видео
Блок-схема работа проекта по распознаванию речи из видео

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

Работа проекта
Работа проекта

Проверка работы проекта по распознаванию речи из видео

Проект проверялся на записях встреч. Результат оказался положительным, распознанная речь приближена к оригинальному видео. Здесь мы демонстрируем результаты распознанной речи, по которым можно убедиться в том, что вместе с русской речью распознаются еще и английские слова, но стоит сказать, что не всегда правильно.

Пример распознанной речи из записи встреч
Пример распознанной речи из записи встреч

Недостатки проекта по распознаванию речи из видео

Как и у всех продуктов проект по распознаванию речи из видео имеет недостатки:

  • Медленное распознавание речи. Это связано с тем, что для работы необходимы ресурсы для ускорения (например, видео длительностью 1 час будет распознаваться около 30 минут);

  • При нечеткой речи диктора распознавание может отличаться;

  • Заедание слов. Если диктор часто делает длительные паузы, то может продублировать последнее слово;

  • Невозможность whisper использовать аудио фрагменты, которые хранятся в памяти, а не файлом. Из-за этого аудио файлы сохраняются локально и потом используются.

Неправильно распознанное слово deposit rate из-за нечеткой дикции
Неправильно распознанное слово deposit rate из-за нечеткой дикции
Заедание слова из-за долгой паузы диктора
Заедание слова из-за долгой паузы диктора

Вывод

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

Инструкция по установке проекта: 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)


  1. vagon333
    15.10.2024 12:46

    ... распознавание речи в видеоконтенте

    Заинтриговал заголовок.
    Ожидал, что видеоряд как-то используется при распознавании аудио, а в реальности перегонка mp3 в текст.

    Невозможность whisper использовать аудио фрагменты, которые хранятся в памяти, а не файлом.

    Сохранение во временный файл, мне кажется, вполне решение.

    Кстати, этот комментарий надиктовал через самописное приложение распознавания речи на базе Whisper, хостимый на Groq.
    То есть прекрасно работает для real-time text-to-speech.
    Время преобразования русскоязычной речи в текст от 300 миллисекунд со средним временем ответа 0,7 секунды..
    Стоимость на текущий момент 0 рублей 0 копеек и в дальнейшем будет стоить тоже копейки, если посмотреть на расценки в Groq.


    1. nehrung
      15.10.2024 12:46

      А наоборот, speech-to-text, можете что-нибудь порекомендовать? Причём не просто speech из местного, достаточно качественного микрофона, а удалённый за тыщу км и поступающий по Скайпу или по тлф-линии, которая иногда достаточно сильно режет спектр. Нужно это для того, чтобы дать доступ к телефонной связи абсолютно глухому инвалиду и огромному количеству его собратьев по такой инвалидности.

      В том, что задача разрешима, можно убедиться по функции "Прямая расшифровка", встроенной в смартфоны Google Pixel. Но во-первых, список поддерживаемых языков в этой опции не содержит русского, и во-вторых, даже если бы он там был - санкции...

      Я уже задавал этот вопрос (вот тут), и каждый раз, когда я вижу статью по этой тематике, просыпается надежда, что сейчас наконец-то прочту о том, что решение этой проблемы найдено, или по крайней мере, находится в разработке. Но нет, люди занимаются чем-то другим...


      1. vagon333
        15.10.2024 12:46

        А наоборот, speech-to-text, можете что-нибудь порекомендовать?

        Я как раз и писал про Speech-to-Text.

        Whisper для распознавания речи и перегонки в текст.
        Я сейчас этот ответ надиктовываю вам через Whisper, который хостится на сайте Groq.
        Написал простое приложение на питоне, которое по горячей кнопке распознаёт русскую и английскую речь и переводит в текст.
        По отжатии горячей кнопки среднее время получения текста 0,7 секунды.

        Также добавил возможность сделать перевод текста из русского в английский и из английского в русский.
        То есть говорите на русском языке, а результат выдается на английском.

        Вот этот текст я наговорил на русском языке.
        I also spoke this text in Russian, but it was automatically translated into English.


        1. nehrung
          15.10.2024 12:46

          Ну, не знаю... Я ведь как прочитал, так и понял. У вас написано

          прекрасно работает для real-time text-to-speech.

          а вовсе не Speech-to-Text. Но если там действительно Speech-to-Text, то может быть, дадите ссылочку на что-то реально работающее?


          1. vagon333
            15.10.2024 12:46

            Да, в первом комментарии моя ошибка.
            Я имел в виду не text-to-speech, а speech-to-text.

            Да, скину линк на свой git-репозиторий. В нем speech-to-text Python application и скомпилированный экзешник на 14 мегабайт, где этот же питоновский код переведен в executable.
            В этом же репозитории powershell файл для конвертации питоновского кода в экзешник.

            Напишите пожалуйста в личку, я скину линк.


      1. zoldaten
        15.10.2024 12:46

        @nehrung vosk попробуйте. а также base,learge модели whisper русским владеют.


  1. zoldaten
    15.10.2024 12:46

    у одного из whisperoв была возможность перегонять real-time речь в текст с микрофона. это может быть решением создания временных файлов.
    также можно whisperов в докер-образы "настрогать" и туда аудио-chunkи отправлять, если локально whisper не дает распараллелиться.