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

Canonical page: https://phishdestroy.github.io/TgWitness/ru/docs/reference/media-analysis/

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

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

[Руководство по рабочему процессу](https://phishdestroy.github.io/TgWitness/docs/archive/) · [Вики](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md)

Откройте запись журнала `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`; выбранная модель и входные данные монтируются в режиме «только для чтения». См. [документацию по загрузке моделей](https://github.com/SYSTRAN/faster-whisper) движка. Поставляемое OCR-образа содержит обучающие данные на английском и русском языках. При необходимости добавьте другой язык в ваше образа; коды языков соответствуют [CLI Tesseract](https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html).

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

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

Контейнер запускается от имени пользователя без привилегий с корневым каталогом, доступным только для чтения, ограниченными возможностями, режимом `no-new-privileges` , одним процессором, 2 GiB памяти, ограничением PID и ограниченной временной файловой системой. Монтируются только проверенная копия выбранного файла и, по желанию, каталог модели. База данных, хранилище и сессия сборщика не монтируются. [Флаги среды выполнения Docker](https://docs.docker.com/reference/cli/docker/container/run/) обеспечивают соблюдение этих ограничений; это остается границей контейнера, а не аппаратным анклавом.

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