fix: исправлена маркировка спикеров — левый канал = callee, правый = caller

This commit is contained in:
ed0ss 2026-06-26 12:49:12 +03:00
parent 7f03949593
commit fc8df87ee4
5 changed files with 25 additions and 6 deletions

1
.gitignore vendored
View file

@ -11,3 +11,4 @@ build/
downloads/ downloads/
temp/ temp/
.DS_Store .DS_Store
folders.txt

View file

@ -25,7 +25,7 @@ Novofon DATA API ──► call-to-text ──► Directus (Postgres)
- Звонки получаются через JSON-RPC API (`get.calls_report`) - Звонки получаются через JSON-RPC API (`get.calls_report`)
- Аудио скачивается по прямой ссылке - Аудио скачивается по прямой ссылке
- Стерео-файлы разделяются на каналы: левый = caller, правый = callee - Стерео-файлы разделяются на каналы: левый = callee, правый = caller
- Каждый канал транскрибируется через faster-whisper на CUDA - Каждый канал транскрибируется через faster-whisper на CUDA
- Результат сохраняется в Directus (коллекции `calls` / `calls_*`) - Результат сохраняется в Directus (коллекции `calls` / `calls_*`)
@ -239,7 +239,7 @@ docker compose down -v
1. `get.calls_report` получает звонки чанками по 90 дней (максимум API) 1. `get.calls_report` получает звонки чанками по 90 дней (максимум API)
2. Скачивается аудио по `full_record_file_link` или `call_records` 2. Скачивается аудио по `full_record_file_link` или `call_records`
3. FFmpeg конвертирует в WAV: 16 кГц, pcm_s16le, моно или стерео 3. FFmpeg конвертирует в WAV: 16 кГц, pcm_s16le, моно или стерео
4. Если каналы разные (реальное стерео) — левый = caller, правый = callee 4. Если каналы разные (реальное стерео) — левый = callee, правый = caller
5. Каждый канал транскрибируется faster-whisper на CUDA (float16) 5. Каждый канал транскрибируется faster-whisper на CUDA (float16)
6. Сегменты выравниваются по времени и маркируются спикером 6. Сегменты выравниваются по времени и маркируются спикером
7. Результат сохраняется в Directus 7. Результат сохраняется в Directus

View file

@ -8,7 +8,7 @@ def align(left_segments: list[dict], right_segments: list[dict]) -> list[dict]:
merged.append({ merged.append({
"start": seg["start"], "start": seg["start"],
"end": seg["end"], "end": seg["end"],
"speaker": "caller", "speaker": "callee",
"text": seg["text"].strip(), "text": seg["text"].strip(),
}) })
@ -16,7 +16,7 @@ def align(left_segments: list[dict], right_segments: list[dict]) -> list[dict]:
merged.append({ merged.append({
"start": seg["start"], "start": seg["start"],
"end": seg["end"], "end": seg["end"],
"speaker": "callee", "speaker": "caller",
"text": seg["text"].strip(), "text": seg["text"].strip(),
}) })

18
folders.txt Normal file
View file

@ -0,0 +1,18 @@
Отправленные
Архив
Вход
ГБУ Малый бизнес
Запись разговоров
Исходящие
Регистрации
Спам
Старые
Удаленные
Черновики
Черновики|template
INBOX
Mailspring
Mailspring|Snoozed
Support
Templates
hh.ru

View file

@ -112,7 +112,7 @@ def _transcribe_stereo(wav_path: str, meta: dict) -> dict:
click.echo(" Real stereo, splitting channels...") click.echo(" Real stereo, splitting channels...")
left_wav, right_wav = split_stereo_channels(wav_path, config.TEMP_DIR) left_wav, right_wav = split_stereo_channels(wav_path, config.TEMP_DIR)
click.echo(" Transcribing left channel (caller)...") click.echo(" Transcribing left channel (callee)...")
left_segments, left_text = transcribe( left_segments, left_text = transcribe(
left_wav, left_wav,
model_size=config.WHISPER_MODEL_SIZE, model_size=config.WHISPER_MODEL_SIZE,
@ -120,7 +120,7 @@ def _transcribe_stereo(wav_path: str, meta: dict) -> dict:
compute_type=config.WHISPER_COMPUTE_TYPE, compute_type=config.WHISPER_COMPUTE_TYPE,
) )
click.echo(" Transcribing right channel (callee)...") click.echo(" Transcribing right channel (caller)...")
right_segments, right_text = transcribe( right_segments, right_text = transcribe(
right_wav, right_wav,
model_size=config.WHISPER_MODEL_SIZE, model_size=config.WHISPER_MODEL_SIZE,