# شناسایی نوری حروف (OCR) و رونویسی محلی

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

تصاویر و فایل‌های صوتی ضبط‌شده را با یک کارگر محلی شناسایی کنید؛ متن استخراج‌شده را به فایل منبع آن پیوند دهید.

**نسخهٔ اصلی کنونی:** از نسخهٔ سورس استفاده کنید؛ پیش‌نمایش قابل‌حمل نسخهٔ ۰.۷.۰ پیش از این قابلیت عرضه شده است.

[راهنمای گردش کار](https://phishdestroy.github.io/TgWitness/docs/archive/) · [ویکی](https://github.com/phishdestroy/TgWitness/blob/main/docs/wiki/Archive-and-Integrations.md)

یک رکورد دفترچه یادداشت `media.saved` را باز کنید، **«شناسایی پیوست**» (**Recognize attachment**) را انتخاب کنید، سپس در بخش **«از آرشیو بپرس» (Ask the archive**) گزینه OCR یا رونویسی را برگزینید. پردازش به‌صورت دستی و محلی انجام می‌شود. حالت ابری یا بارگذاری خودکار وجود ندارد. بایت‌های اصلی پیوست و `media_sha256` بدون تغییر باقی می‌مانند؛ متن شناسایی‌شده صراحتاً به عنوان شناسایی ماشینی علامت‌گذاری شده و به طور جداگانه به همراه هش منبع، نسخه موتور/مدل، زبان، پارامترها و زمان تکمیل ذخیره می‌شود. رونوشت‌ها مهرهای زمانی بازگشتی را حفظ می‌کنند.

این نتایج را با استفاده از **متن شناسایی‌شده** و فیلتر OCR/پیاده‌سازی جستجو کنید. این یک جستجوی جداگانه مبتنی بر داده‌های مشتق‌شده است؛ این جستجو به‌طور پنهان شناسایی ماشینی را به متن اصلی تلگرام تبدیل نمی‌کند یا آن را به رویدادهای امضا‌شده اضافه نمی‌کند.

## راه‌اندازی کارگر اختیاری

نسخه ۱ به یک میزبان لینوکس با یک دیمون محلی داکر نیاز دارد. نصب‌های ویندوز می‌توانند TgWitness را در یک محیط VM/WSL لینوکس با دیمون محلی خود اجرا کنند. پنل هرگز خودِ فایل پیوست ناامن را رمزگشایی نمی‌کند.

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

این متغیرها را در محیط سرویس TgWitness تنظیم کرده و آن را مجدداً راه‌اندازی کنید. ساکت دیمون به طور پیش‌فرض روی `/var/run/docker.sock` تنظیم است؛ استقرارهای بدون روت می‌توانند `TGWITNESS_DOCKER_SOCKET` را تنظیم کنند. کارگر به صراحت از آن ساکت یونیکس استفاده می‌کند تا از یک زمینه دوکر (Docker) از راه دور. یک API دوکر را در اختیار کاربران پنل قرار ندهید یا ساکت آن را در داخل کانتینر شناسایی (recognition) مونت نکنید.

برای رونویسی، یک مدل Whisper سازگار با CTranslate2 را به طور جداگانه نصب کنید، سپس `TGWITNESS_WHISPER_MODEL_DIR` را به دایرکتوری آن تنظیم کنید. worker آن را با `local_files_only=True` بارگذاری می‌کند؛ مدل انتخاب‌شده و ورودی به صورت فقط-خواندنی mount می‌شوند. به [مستندات بارگذاری](https://github.com/SYSTRAN/faster-whisper) مدل این موتور مراجعه کنید. تصویر OCR ارائه‌شده شامل داده‌های آموزش‌دیده برای زبان‌های انگلیسی و روسی است. در صورت نیاز، زبان دیگری را به تصویر خود اضافه کنید؛ کدهای زبان مطابق با [CLI تسرَکت](https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html) هستند.

هیچ مدلی در حین پردازش بارگیری نمی‌شود. فرایند ساخت/دانلود ممکن است از شبکه استفاده کند؛ هر کانتینر تشخیص واقعی، شبکه را غیرفعال دارد. پیش از فعال‌سازی، ایمیج را نصب کنید؛ محیط اجرا از `--pull=never` استفاده می‌کند.

## محدودیت‌ها و بازیابی

کانتینر با کاربری فاقد امتیاز (unprivileged) و روت فقط-خواندنی (read-only)، با قابلیت‌های محدودشده (dropped capabilities)، `no-new-privileges` ، یک پردازنده (CPU)، ۲ گیگابایت حافظه، محدودیت PID و یک سیستم فایل موقت محدود اجرا می‌شود. تنها یک نسخه تأییدشده از فایل انتخاب‌شده و یک دایرکتوری مدل اختیاری مونت می‌شوند. پایگاه داده، گاوصندوق و جلسهٔ گردآورنده مونت نمی‌شوند. [پرچم‌های زمان اجرای Docker](https://docs.docker.com/reference/cli/docker/container/run/) این محدودیت‌ها را اعمال می‌کنند؛ این همچنان یک مرز کانتینر است، نه یک انکلوی سخت‌افزاری.

حجم فایل‌ها به ۵۰ مگابایت، تصاویر به ۲۰ میلیون پیکسل، فایل‌های صوتی با مدت‌زمان مشخص به ۳۰ دقیقه، و پردازش به پنج دقیقه محدود است. در هر زمان یک کارگر (worker) اجرا می‌شود، و در هر فضای کاری حداکثر ۲۰ کار در صف/در حال اجرا و ۱۰۰ کار ذخیره‌شده وجود دارد. لغو، کانتینر را متوقف می‌کند؛ و تلاش مجدد، یک کار جدید مرتبط با تلاش قبلی ایجاد می‌کند. کارهای متوقف‌شده پس از راه‌اندازی مجدد علامت‌گذاری می‌شوند. پردازش زمانی که یک مدل نتواند با محدودیت‌های پیکربندی‌شده مطابقت داشته باشد، ممکن است با شکست مواجه شود؛ این کار به‌صورت بی‌صدا و بدون ایزوله‌سازی اجرا نمی‌شود.
