Skip to content

CallAnnotate — контейнеризованная система автоматической обработки телефонных разговоров, обеспечивающая диаризацию спикеров, распознавание речи, интеграцию с CardDAV, транскрипцию и формирование структурированных JSON-отчётов. Предоставляет REST и WebSocket API для интеграции.

License

Notifications You must be signed in to change notification settings

momentics/CallAnnotate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CallAnnotate

Полнофункциональное решение для автоматической аннотации телефонных разговоров в контейнере Docker под python:3.11-slim-bullseye.

CallAnnotate предоставляет разработчикам и системным администраторам гибкий серверный компонент с WebSocket и REST/JSON API, способный асинхронно обрабатывать аудиозаписи любой длительности и сложности, используя ресурсы CPU или при необходимости GPU.

CI Status License

Latest Release Last Commit

Требования

  1. Требуемая версия Python: 3.11

Основные возможности

  1. Docker-образ на базе python:3.11-slim-bullseye CallAnnotate создаёт лёгкий и безопасный контейнер, готовый к развёртыванию на любых серверах и облачных платформах, поддерживающих Docker.
  2. Универсальные интерфейсы API
    • WebSocket позволяет устанавливать постоянное соединение для потоковой передачи аудио и мгновенного получения результатов.
    • REST/JSON интерфейс предназначен для пакетной обработки задач: отправьте запрос с файлом, получите полную аннотацию в ответе.
  3. Асинхронная архитектура обработки Все задачи помещаются в очередь и обрабатываются асинхронно, что исключает блокировку сервера. CallAnnotate может распределять нагрузку между ядрами CPU и, при наличии поддерживаемого оборудования, GPU-ускорителем.
  4. Этапная архитектура обработки аудио (preprocess → diarization → transcription → recognition → carddav)
  5. Предобработка аудио (SoX, RNNoise, DeepFilterNet)
  6. Диаризация говорящих Алгоритмы выделения сегментов аудио автоматически распознают смены говорящих, разделяют файл на спикер-ориентированные блоки и сохраняют таймкоды каждого участка.
  7. Распознавание известных голосов Согласно конфигурации контейнера, CallAnnotate загружает заранее сформированные голосовые эмбеддинги и сопоставляет их с поступающими фрагментами. Это позволяет автоматически отмечать в аннотации имена участников, чьи голоса уже известны системе.
  8. Идентификация новых записей через CardDAV При встрече незнакомого голоса CallAnnotate выполняет запросы к CardDAV-серверу, чтобы найти совпадения по контактам пользователя. Если совпадений не обнаружено, система аккуратно помечает фрагмент как «неизвестный спикер».
  9. Транскрипция с многослойной разметкой Используя современные движки ASR, CallAnnotate переводит аудио в текст и структурирует результат по уровням (схоже с системой ELAN):
    • отдельное слово и его начало/конец
    • предложения и абзацы
    • метки спикеров
  10. Готовая аннотация в одном JSON По окончании обработки API возвращает полный объём метаданных:
    • сегментация по спикерам и таймкоды
    • идентификаторы и имена найденных голосов
    • ссылки на источники эмбеддингов
    • транскрипция с выделением уровней
    • при необходимости — URL для скачивания аудиофрагментов

Секция preprocess

В config/default.yaml в разделе preprocess:

 preprocess: model: "DeepFilterNet2" device: "cpu" chunk_duration: 2.0 overlap: 0.5 target_rms: -20.0 

Секция транскрипции

Этап transcription осуществляет пакетную транскрипцию аудио с помощью OpenAI Whisper.

Конфигурация этапа в config/default.yaml:

 transcription: model: "openai/whisper-small" \# размер модели Whisper device: "cpu" \# вычислительное устройство language: "ru" \# язык транскрипции ("auto" — автоопределение) batch_size: 16 \# размер пакета фрагментов task: "transcribe" \# "transcribe" или "translate" 

Пример использования

 curl -X POST http://localhost:8000/api/v1/jobs \ -F "file=@recording.wav" 

При получении результата через GET /api/v1/jobs/{job_id}/result возвращается JSON, содержащий, среди прочего, поле transcription:

 "transcription": { "full_text": "[speaker_01]: Здравствуйте!\n[speaker_02]: Привет!", "confidence": 0.93, "language": "ru", "segments": [ { "start": 0.000, "end": 3.500, "text": "Здравствуйте!", "speaker": "speaker_01", "speaker_confidence": 1.000, "no_speech_prob": 0.001, "avg_logprob": -0.25 } ], "words": [ { "start": 0.000, "end": 0.500, "word": "Здравствуйте!", "probability": 0.98, "speaker": "speaker_01" } ] } 

Основные этапы

  1. preprocess
  2. diarization
  3. transcription
  4. recognition
  5. carddav

Лицензия

Проект распространяется под лицензией Apache License 2.0. Подробности — в файлах LICENSE и NOTICE.

About

CallAnnotate — контейнеризованная система автоматической обработки телефонных разговоров, обеспечивающая диаризацию спикеров, распознавание речи, интеграцию с CardDAV, транскрипцию и формирование структурированных JSON-отчётов. Предоставляет REST и WebSocket API для интеграции.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published