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

Canonical page: https://phishdestroy.github.io/TgWitness/uk/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 ГіБ пам’яті, обмеженням PID та обмеженою тимчасовою файловою системою. Монтуються лише перевірена копія вибраного файлу та опціональний каталог моделі. База даних, сховище та сесія колектора не монтуються. Ці обмеження забезпечуються [прапорами середовища виконання Docker](https://docs.docker.com/reference/cli/docker/container/run/) ; це залишається межею контейнера, а не апаратним анклавом.

Розмір файлів обмежено до 50 МіБ, зображень — до 20 мільйонів пікселів, аудіозаписів — до 30 хвилин із відомою тривалістю, а час обробки — до п’яти хвилин. Одночасно працює лише один робочий процес, з максимум 20 завданнями в черзі/у виконанні та 100 збереженими завданнями на робочу область. Команда «Cancel» зупиняє контейнер; «Retry» створює нове завдання, пов’язане з попередньою спробою. Перервані завдання позначаються після перезапуску. Обробка може завершитися невдачею, якщо модель не відповідає налаштованим обмеженням; без ізоляції вона не працює в тихому режимі.
