TgWitness / Документация

Справочник / Архив и интеграции

Локальное распознавание текста (OCR) и транскрипция

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

Текущая версия: используйте репозиторий исходного кода; в портативной предварительной версии 0.7.0 эта функция ещё не реализована.

Руководство по рабочему процессу · Вики

Откройте запись журнала media.saved, выберите «Распознать вложение», затем выберите «OCR» или «транскрипция» в разделе «Запросить у архива». Обработка осуществляется вручную и локально. Режим облачного хранения медиафайлов или автоматическая загрузка отсутствуют. Исходные байты вложения и файл media_sha256 остаются неизменными; распознанный текст явно помечается как результат машинного распознавания и хранится отдельно с указанием исходного хеша, версии движка/модели, языка, параметров и времени завершения. В транскрипциях сохраняются возвращённые временные метки.

Выполняйте поиск по этим результатам с помощью функции «Поиск по распознанному тексту» и фильтра «OCR/транскрипт». Это отдельный поиск по производным данным; он не преобразует результаты машинного распознавания в исходный текст Telegram и не добавляет их к подписанным событиям.

Настройте дополнительный рабочий процесс#

Версия 1 требует хоста под управлением Linux с локальным демоном Docker. При установке в Windows TgWitness можно запускать в виртуальной машине Linux или среде WSL с собственным локальным демоном. Панель никогда не декодирует недоверенные вложения самостоятельно.

docker build -f deploy/media-worker/Dockerfile -t tgwitness-media:local .
export TGWITNESS_MEDIA_IMAGE=tgwitness-media:local

Установите эти переменные в среде службы TgWitness и перезапустите её. По умолчанию сокет демона — /var/run/docker.sock; при развёртывании без прав root можно установить TGWITNESS_DOCKER_SOCKET. Рабочий процесс явно использует этот сокет Unix, а не удалённый контекст Docker. Не предоставляйте доступ к API Docker пользователям панели управления и не монтируйте его сокет внутри контейнера распознавания.

Для транскрипции необходимо отдельно установить модель Whisper, совместимую с CTranslate2, а затем указать TGWITNESS_WHISPER_MODEL_DIR в качестве её каталога. Рабочий процесс загружает её с помощью local_files_only=True; выбранная модель и входные данные монтируются в режиме «только для чтения». См. документацию по загрузке моделей движка. Поставляемое OCR-образа содержит обучающие данные на английском и русском языках. При необходимости добавьте другой язык в ваше образа; коды языков соответствуют CLI Tesseract.

При обработке модели не загружаются. Процесс сборки/загрузки установочного пакета может использовать сеть; в каждом контейнере фактического распознавания сетевые функции отключены. Установите образ перед его включением; в процессе выполнения используется --pull=never.

Ограничения и восстановление#

Контейнер запускается от имени пользователя без привилегий с корневым каталогом, доступным только для чтения, ограниченными возможностями, режимом no-new-privileges , одним процессором, 2 GiB памяти, ограничением PID и ограниченной временной файловой системой. Монтируются только проверенная копия выбранного файла и, по желанию, каталог модели. База данных, хранилище и сессия сборщика не монтируются. Флаги среды выполнения Docker обеспечивают соблюдение этих ограничений; это остается границей контейнера, а не аппаратным анклавом.

Размер файлов ограничен 50 MiB, изображений — 20 миллионами пикселей, аудиозаписей — 30 минутами при известной продолжительности, а время обработки — пятью минутами. Одновременно работает один рабочий процесс, при этом в очереди или в процессе выполнения может находиться не более 20 заданий, а в рабочей области сохраняется не более 100 заданий. Команда «Cancel» останавливает контейнер; «Retry» создаёт новое задание, связанное с предыдущей попыткой. Прерванные задания помечаются после перезапуска. Обработка может завершиться сбоем, если модель не укладывается в заданные ограничения; без изоляции она не выполняется в фоновом режиме.