Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Обязательные параметры
TG_BOT_TOKEN=your_telegram_bot_token_here

# Модель faster-whisper: tiny, base, small, medium, large-v3, turbo
WHISPER_MODEL=turbo

# Устройство: cpu, cuda, auto
WHISPER_DEVICE=cpu

# Тип вычислений: int8 (экономит RAM на CPU), float32, float16 (GPU)
COMPUTE_TYPE=int8

# Количество параллельных обработчиков
WORKER_COUNT=2

# Максимальный размер очереди задач
QUEUE_MAXSIZE=200

# Сохранять ли аудиофайлы после обработки
SAVE_VOICES=False

# Директория для сохранённых файлов
VOICES_DIR=voices

# Уровень логирования: DEBUG, INFO, WARNING, ERROR, CRITICAL, NONE
LOG_LEVEL=INFO
146 changes: 72 additions & 74 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,111 +1,109 @@
# WhisperBot — Telegram Bot для распознавания речи

Этот Telegram бот использует модель Whisper от OpenAI для преобразования голосовых сообщений и видео-кружочков в текст. Бот поддерживает очередь задач и обрабатывает сообщения параллельно с использованием нескольких рабочих потоков.
Telegram бот для преобразования голосовых сообщений и видео-кружочков в текст с использованием [faster-whisper](https://github.com/SYSTRAN/faster-whisper). Поддерживает очередь задач и параллельную обработку.

## Возможности

* Преобразование голосовых сообщений в текст.
* Поддержка обработки видео-кружочков (видео-сообщений).
* Очередь задач для обработки голосовых сообщений.
* Поддержка использования GPU для обработки с использованием CUDA.
* Возможность сохранять аудио-файлы, если требуется.
* Информирование пользователя о статусе очереди и обработке.
* Преобразование голосовых сообщений в текст
* Поддержка видео-кружочков (video note)
* Очередь задач с параллельной обработкой (настраиваемое число воркеров)
* VAD-фильтрация (пропуск тишины для ускорения)
* Поддержка CPU (int8 квантизация) и GPU (CUDA)
* Сохранение аудиофайлов (опционально)

## Установка

1. **Клонируйте репозиторий:**
### 1. Клонируйте репозиторий

```bash
git clone https://github.com/AlexMelanFromRingo/WhisperBot.git
cd WhisperBot
```
```bash
git clone https://github.com/AlexMelanFromRingo/WhisperBot.git
cd WhisperBot
```

2. **Создайте виртуальное окружение и активируйте его:**
### 2. Создайте виртуальное окружение

```bash
python -m venv venv
source venv/bin/activate # для Linux/Mac
.\venv\Scripts\activate # для Windows
```
```bash
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# .\venv\Scripts\activate # Windows
```

3. **Установите зависимости:**
### 3. Установите зависимости

```bash
pip install -r requirements.txt
```
```bash
pip install -r requirements.txt
```

4. **Создайте файл `.env` и настройте переменные окружения:**
### 4. Настройте конфигурацию

Пример содержимого `.env`:
```bash
cp .env.example .env
```

```env
TG_BOT_TOKEN=your_telegram_bot_token
WHISPER_MODEL=base # Возможные значения: base, small, medium, large, turbo, etc. Подробнее см. в документации OpenAI Whisper
WHISPER_DEVICE=cpu # Используйте "cuda" для GPU, "cpu" для использования процессора или "auto" для автоматического выбора
WORKER_COUNT=2 # Количество рабочих потоков
QUEUE_MAXSIZE=200 # Максимальный размер очереди
SAVE_VOICES=True # Устанавливайте False, если не хотите сохранять аудио файлы
VOICES_DIR=voices # Директория для хранения голосовых файлов
LOG_LEVEL=INFO # Уровень логирования (DEBUG, INFO, WARNING, ERROR, CRITICAL)
```
Отредактируйте `.env` — обязательно укажите `TG_BOT_TOKEN`.

5. **Запустите бота:**
Параметры `.env`:

```bash
python telegram_whisper_bot.py
```
| Параметр | По умолчанию | Описание |
|---|---|---|
| `TG_BOT_TOKEN` | — | Токен Telegram бота (обязательно) |
| `WHISPER_MODEL` | `turbo` | Модель: `tiny`, `base`, `small`, `medium`, `large-v3`, `turbo` |
| `WHISPER_DEVICE` | `cpu` | Устройство: `cpu`, `cuda`, `auto` |
| `COMPUTE_TYPE` | `int8` | Тип вычислений: `int8`, `float32` (CPU); `float16`, `int8` (GPU) |
| `WORKER_COUNT` | `2` | Количество параллельных обработчиков |
| `QUEUE_MAXSIZE` | `200` | Максимальный размер очереди |
| `SAVE_VOICES` | `True` | Сохранять аудиофайлы после обработки |
| `VOICES_DIR` | `voices` | Директория для сохранённых файлов |
| `LOG_LEVEL` | `INFO` | Уровень логирования |

## Использование
### 5. Запустите бота

### Команды бота
```bash
OMP_NUM_THREADS=4 python telegram_whisper_bot.py
```

* `/start` — Приветственное сообщение с информацией о сервере и возможностях бота.
* `/status` — Отображает статус очереди и состояние обработки сообщений для пользователя.
`OMP_NUM_THREADS` задаёт количество потоков для faster-whisper. Рекомендуется ставить по числу ядер CPU.

### Как это работает?
## Рекомендуемая конфигурация для CPU-сервера (4 Core, 24GB RAM)

1. Отправьте боту голосовое сообщение или видео-кружочек (video note).
2. Бот начнёт процесс транскрипции с использованием модели Whisper.
3. После завершения обработки бот отправит текст обратно в чат.
```env
WHISPER_MODEL=turbo
WHISPER_DEVICE=cpu
COMPUTE_TYPE=int8
WORKER_COUNT=2
```

Если очередь переполнена, бот сообщит об этом и предложит попробовать позже.
- `int8` снижает потребление RAM примерно вдвое по сравнению с `float32`
- `turbo` — оптимальный баланс скорости и качества
- `WORKER_COUNT=2` при 4 ядрах — каждый воркер использует ~2 ядра

### Структура проекта
## Команды бота

* **`bot.py`** — Основной файл с логикой работы бота.
* **`config.py`** — Конфигурационные настройки для работы с ботом.
* **`requirements.txt`** — Все необходимые библиотеки.
* **`.env`** — Файл с переменными окружения.
* **`voices/`** — Директория для хранения голосовых файлов (если `SAVE_VOICES=True`).
* **`logs/`** — Логи работы бота (если логирование активно).
* `/start` — информация о боте и сервере
* `/status` — статус очереди и задач пользователя

## Логирование
## Как это работает

Бот поддерживает логирование для отслеживания ошибок и состояния системы. Уровень логирования можно настроить в файле `.env` через переменную `LOG_LEVEL`.
1. Отправьте боту голосовое сообщение или видео-кружочек
2. Сообщение встаёт в очередь обработки
3. Свободный воркер берёт задачу, транскрибирует аудио через faster-whisper
4. Результат отправляется в ответ на исходное сообщение

* Уровни логирования: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`.
Один пользователь может отправить несколько голосовых подряд — все встанут в общую очередь.

## Примечания
## Структура проекта

* Если очередь обработки переполнена, бот уведомит пользователя о том, что сервер перегружен, и предложит повторить попытку позже.
* Для корректной работы с GPU, необходимо установить соответствующие зависимости для CUDA.
* Если модель Whisper не доступна для вашей системы, бот будет использовать CPU для обработки.
* **`telegram_whisper_bot.py`** — основной файл бота
* **`requirements.txt`** — зависимости
* **`.env.example`** — пример конфигурации
* **`voices/`** — директория для аудиофайлов (при `SAVE_VOICES=True`)

## Зависимости

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

* `whisper` — Модель для распознавания речи от OpenAI.
* `python-telegram-bot` — Библиотека для работы с Telegram API.
* `dotenv` — Для загрузки переменных окружения из файла `.env`.
* `torch` — Для работы с моделью Whisper на GPU (если доступно).

Установите их с помощью команды:

```bash
pip install -r requirements.txt
```
* [faster-whisper](https://github.com/SYSTRAN/faster-whisper) — быстрая реализация Whisper на CTranslate2
* [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) — Telegram Bot API
* [python-dotenv](https://github.com/theskumar/python-dotenv) — загрузка `.env`

## Автор

Этот проект был разработан Alex Melan и является открытым исходным кодом. Вы можете использовать его по своему усмотрению и модифицировать в соответствии с вашими потребностями.
Этот проект был разработан Alex Melan и является открытым исходным кодом.
7 changes: 2 additions & 5 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
python-telegram-bot==20.7
openai-whisper==20231117
faster-whisper>=1.1.0
python-dotenv==1.0.0
torch==2.1.0+cpu
torchaudio==2.1.0+cpu
numpy==1.24.3
ffmpeg-python==0.2.0
numpy>=1.24
Loading