From 2a25305aa86a39c8cda71777ec2ab21ad11a9b53 Mon Sep 17 00:00:00 2001 From: Mikhail Shardin <43311539+empenoso@users.noreply.github.com> Date: Mon, 15 Sep 2025 16:47:13 +0500 Subject: [PATCH] Update README.md --- README.md | 134 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 97 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index c3dd29d..6cdbbdb 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,71 @@ -# Локальная система распознавания речи на базе OpenAI Whisper +# Локальная система распознавания и диаризации речи (Whisper & WhisperX) -Этот репозиторий содержит набор скриптов для создания полностью автономной системы расшифровки аудиозаписей (лекций, докладов, совещаний) на вашем компьютере. Решение использует мощную open-source модель **OpenAI Whisper**, что гарантирует высокую точность и полную приватность ваших данных. +Этот репозиторий содержит набор скриптов для создания полностью автономной системы расшифровки аудиозаписей на вашем компьютере. Решение позволяет не только превращать речь в текст, но и автоматически разделять его по говорящим (диаризация), что идеально подходит для анализа лекций, интервью и совещаний. -## 🚀 Что делает проект? +В основе лежат мощные open-source модели **OpenAI Whisper** и **WhisperX**, что гарантирует высокую точность и полную приватность ваших данных. -Проект позволяет вам превратить аудиофайлы в текст локально, без отправки данных в облако и без необходимости платных подписок. Это достигается за счет использования модели OpenAI Whisper и скриптов, которые автоматизируют процесс установки, настройки и массовой обработки файлов. - -## ✨ Почему это полезно? +## ✨ Ключевые возможности +* **Два режима работы:** + 1. **Простая транскрибация (Whisper):** быстрое получение сплошного текста из аудио. Идеально для монологов, лекций. + 2. **Транскрибация с диаризацией (WhisperX):** получение структурированного диалога с разметкой по спикерам (`SPEAKER_01`, `SPEAKER_02`). Отлично подходит для совещаний, интервью. * **Приватность:** все ваши аудиозаписи и текстовые расшифровки остаются на вашем компьютере. Никакие данные не передаются третьим лицам. -* **Бесплатно:** проект построен на бесплатных open-source инструментах. Вы не платите за подписку или поминутное распознавание. -* **Высокая точность:** используется модель `large-v3` от OpenAI, которая является одной из самых точных моделей для распознавания речи, включая русский язык. -* **Полный контроль:** вы контролируете весь процесс — от выбора модели до формата выходных данных. -* **Массовая обработка:** скрипт `whisper_transcribe.py` позволяет автоматически обработать все аудиофайлы в указанной папке. +* **Бесплатно и Open Source:** проект построен на бесплатных инструментах. Вы не платите за подписку или поминутное распознавание. +* **Высокая точность:** используется модель `large-v3` от OpenAI, которая является одной из самых точных для распознавания речи, включая русский язык. +* **Ускорение на GPU:** решение оптимизировано для работы с видеокартами NVIDIA, что многократно ускоряет обработку. +* **Простая установка:** для каждого режима предусмотрены bash-скрипты, которые автоматизируют настройку окружения. -## 🛠️ Как начать? +## 🤔 Какой метод выбрать? -Для развертывания системы на вашем компьютере (протестировано на Ubuntu) выполните следующие шаги. +| Критерий | Метод 1: Простая транскрибация (Whisper) | Метод 2: Диа-ри-за-ци-я (WhisperX + Docker) | +| :--- | :--- | :--- | +| **Задача** | Получить сплошной текст из аудио (лекция, доклад) | Разделить речь на реплики разных спикеров (совещание) | +| **Результат** | `...текст одного спикера текст другого...` | `[время] SPEAKER_01: текст...`
`[время] SPEAKER_02: текст...` | +| **Технологии** | Python, PyTorch, Whisper | Docker, NVIDIA Container Toolkit, WhisperX | +| **Сложность** | Простая настройка в виртуальном окружении Python | Требует Docker и токен Hugging Face. Установка автоматизирована. | +| **Когда использовать** | Для быстрой расшифровки монологов, лекций, личных заметок. | Для анализа диалогов, интервью, совещаний, создания протоколов. | + +--- + +## 🚀 Метод 1: простая транскрибация (Whisper) + +Этот метод идеально подходит для быстрой расшифровки аудиозаписей без необходимости разделять речь по спикерам. ### Шаг 1: Подготовка окружения -Для автоматической установки всех необходимых компонентов (Python, FFmpeg, NVIDIA Drivers, CUDA, PyTorch) был написан специальный bash-скрипт. +Для автоматической установки всех необходимых компонентов (Python, FFmpeg, NVIDIA Drivers, CUDA, PyTorch) используется специальный bash-скрипт. 1. **Клонируйте репозиторий:** ```bash git clone https://github.com/empenoso/offline-audio-transcriber - cd https://github.com/empenoso/offline-audio-transcriber + cd offline-audio-transcriber ``` 2. **Сделайте скрипт установки исполняемым:** ```bash - chmod +x setup_whisper.sh + chmod +x whisper_transcribe_setup.sh ``` 3. **Запустите скрипт:** ```bash - ./setup_whisper.sh + ./whisper_transcribe_setup.sh ``` - Скрипт обновит систему, установит драйверы NVIDIA (если необходимо), CUDA, создаст виртуальное окружение `.venv` и установит все Python-библиотеки, включая PyTorch и Whisper. + Скрипт обновит систему, установит драйверы NVIDIA (если необходимо), CUDA, создаст виртуальное окружение `.venv` и установит все Python-библиотеки. > **Примечание:** Если скрипт установит драйверы NVIDIA, может потребоваться перезагрузка компьютера. -### Шаг 2: Запись и размещение аудио +### Шаг 2: Запуск распознавания -* Запишите лекцию, доклад или совещание на диктофон или телефон. -* Для лучшего качества располагайте микрофон ближе к источнику звука и избегайте фонового шума. -* Скопируйте аудиофайлы (поддерживаются `.mp3`, `.wav`, `.m4a` и другие) в отдельную папку, например, `audio`. +1. **Поместите ваши аудиофайлы** (поддерживаются `.mp3`, `.wav`, `.m4a`) в любую папку, например, `audio/`. -### Шаг 3: Запуск распознавания - -1. **Активируйте виртуальное окружение:** +2. **Активируйте виртуальное окружение:** ```bash source .venv/bin/activate ``` -2. **Запустите скрипт `whisper_transcribe.py`:** +3. **Запустите скрипт `whisper_transcribe.py`:** - * **Простой запуск** (поиск аудио в текущей папке, использование `large` модели, результаты в папку `transcripts`): + * **Простой запуск** (поиск аудио в текущей папке): ```bash python3 whisper_transcribe.py ``` @@ -65,24 +74,78 @@ ```bash python3 whisper_transcribe.py ./audio large ./results ``` - * `./audio` — папка с вашими аудиофайлами. - * `large` — используемая модель Whisper. Доступные модели: `tiny`, `base`, `small`, `medium`, `large`. Чем больше модель, тем выше точность, но и выше требования к ресурсам. - * `./results` — папка, куда будут сохранены результаты. -### Шаг 4: Анализ результатов +### Шаг 3: Анализ результатов После выполнения скрипта в выходной папке вы найдете: * **`.txt` файл** для каждой аудиозаписи с полным текстом. * **`.srt` файл** для каждой аудиозаписи с субтитрами и таймкодами. * **`all_transcripts.txt`** — один файл, содержащий все расшифровки подряд. -## 🔮 Будущие планы: диа-что? Диа-ри-за-ция! +--- -Следующий большой шаг — **диаризация**, то есть автоматическое разделение текста по спикерам. Это позволит не просто получать сплошной текст совещания, а видеть, кто именно и что сказал. +## 🚀 Метод 2: транскрибация с диаризацией (WhisperX + Docker) -На данный момент интеграция с **WhisperX** (расширенная версия Whisper с поддержкой диаризации) отложена из-за технических сложностей с зависимостями. Планируется решить эту проблему с помощью Docker-контейнеров от NVIDIA. Следите за обновлениями! +Этот метод использует Docker для решения проблем с зависимостями и позволяет не только транскрибировать аудио, но и определять, кто из спикеров говорил. -Файл `whisperx_diarization.py` в репозитории является заглушкой для будущей реализации. +### Пререквизиты + +1. **Docker и NVIDIA GPU:** для работы требуется установленный Docker и видеокарта NVIDIA с актуальными драйверами. +2. **Токен Hugging Face:** для диаризации необходим токен доступа. + * Получите его в [настройках профиля Hugging Face](https://huggingface.co/settings/tokens). + * Примите условия использования моделей [pyannote/speaker-diarization-3.1](https://huggingface.co/pyannote/speaker-diarization-3.1) и [pyannote/segmentation-3.0](https://huggingface.co/pyannote/segmentation-3.0). + +### Шаг 1: Установка и настройка + +Специальный скрипт автоматизирует установку Docker, NVIDIA Container Toolkit и настройку рабочего пространства. + +1. **Сделайте скрипт исполняемым:** + ```bash + chmod +x whisperx_diarization_setup.sh + ``` + +2. **Запустите установщик:** + ```bash + ./whisperx_diarization_setup.sh + ``` + Скрипт установит и настроит Docker, скачает необходимый образ WhisperX и создаст структуру папок (`audio`, `results`) и файл конфигурации `config.env`. + +3. **Настройте `config.env`:** + Откройте файл `config.env` и вставьте ваш токен Hugging Face: + ```ini + HF_TOKEN=your_token_here + ``` + +4. **Перезагрузка:** После установки может потребоваться перезагрузка, чтобы применились права для группы `docker`. + ```bash + sudo reboot + ``` + +### Шаг 2: Запуск диаризации + +1. **Поместите аудиофайлы** в папку `audio/`. + +2. **Запустите скрипт-оркестратор:** + * Для проверки системы: + ```bash + python3 whisperx_diarization.py --check + ``` + * Для обработки всех файлов в папке `audio/`: + ```bash + python3 whisperx_diarization.py + ``` + +### Шаг 3: Анализ результатов + +Результаты для каждого аудиофайла будут сохранены в отдельной подпапке внутри `results/`. Вы получите структурированный протокол встречи. + +**Было (обычный Whisper):** +> ...да, я согласен с этим подходом но нужно учесть риски которые мы не обсудили например финансовую сторону вопроса и как это повлияет на сроки я думаю нам стоит вернуться к этому на следующей неделе... + +**Стало (WhisperX с диаризацией):** +> [00:01:15.520 --> 00:01:19.880] SPEAKER_01: Да, я согласен с этим подходом, но нужно учесть риски, которые мы не обсудили. +> [00:01:20.100 --> 00:01:22.740] SPEAKER_02: Например, финансовую сторону вопроса и как это повлияет на сроки? +> [00:01:23.020 --> 00:01:25.900] SPEAKER_01: Именно. Я думаю, нам стоит вернуться к этому на следующей неделе. ## ❓ Где получить помощь? @@ -93,6 +156,3 @@ * **Автор:** Михаил Шардин * **Онлайн-визитка:** [shardin.name](https://shardin.name/?utm_source=github) * **Telegram-канал:** ["Умный Дом Инвестора"](https://t.me/+asaEcPax8o41MjQy) - ---- -Этот проект является демонстрацией того, как современные open-source инструменты позволяют решать сложные задачи без значительных финансовых затрат и с полным контролем над своими данными.