Skip to content

About

Cross-platform OCR, PDF text extractor and speech-to-text tool in Python

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Repository files navigation

OCR-STT Tool

Stars License Last commit

Cross-platform OCR, PDF text extractor and speech-to-text tool in Python (CLI + Kivy GUI, Persian supported).

📖 آموزش قدم‌به‌قدم استفاده (موبایل + ویندوز + لینوکس + مک) · 🌐 نسخه وب بدون نصب (مخصوص کاربران عادی)

ابزار استخراج متن و تبدیل گفتار

ابزار چندسکویی پایتون برای استخراج متن از عکس و PDF و تبدیل گفتار به نوشتار؛ با رابط خط فرمان و رابط گرافیکی Kivy و پشتیبانی از زبان فارسی.


📘 OCR‑STT Tool

ابزار چندسکویی برای استخراج متن از تصویر، PDF و تبدیل گفتار به نوشتار

یک ابزار پایتونی چندسکویی (Cross‑Platform) که قابلیت‌های زیر را در یک پروژه واحد ارائه می‌دهد:

  • استخراج متن از تصویر (OCR)
  • استخراج متن از PDF
  • تبدیل گفتار به نوشتار (Speech‑to‑Text)
  • رابط CLI برای استفادهٔ سریع
  • رابط GUI با Kivy برای اجرا روی Windows / macOS / Linux / Android / iOS

این پروژه کاملاً اوپن‌سورس است و برای توسعه‌دهندگان، پژوهشگران، دانشجویان و کاربران عمومی طراحی شده است.


⭐ لطفاً از پروژه حمایت کنید اگر این ابزار برای شما مفید بود، لطفاً با زدن دکمهٔ Star ⭐ از پروژه حمایت کنید. این کار باعث می‌شود پروژه دیده شود و توسعهٔ آن ادامه پیدا کند.


📢 کانال رسمی تلگرام برای دریافت آخرین آپدیت‌ها، نسخه‌های جدید، آموزش‌ها و ابزارهای مرتبط: کانال رسمی: @a_c_official


✨ ویژگی‌ها

  • پشتیبانی از تصویر، PDF، فایل صوتی
  • پشتیبانی از زبان‌های مختلف (fa‑IR، en‑US و …)
  • اجرای مستقیم روی:
    • Windows
    • macOS
    • Linux
    • Android (با Buildozer، با محدودیت OCR — بخش موبایل را ببینید)
    • iOS (با Xcode + Kivy-iOS، با محدودیت OCR)
  • طراحی ماژولار و قابل توسعه
  • مدیریت خطای مناسب (پیام واضح به‌جای Traceback خام)

📖 آموزش قدم‌به‌قدم

اگر تازه شروع کرده‌ای، صفحه آموزش تعاملی را باز کن — بخش موبایل (اندروید/آیفون) و دسکتاپ (ویندوز/لینوکس/مک) کاملاً تفکیک شده‌اند:

📖 ورود به صفحه آموزش · مشاهده فایل آموزش در ریپو


🌐 نسخه وب بدون نصب (برای کاربران عادی)

اگر حوصله خط فرمان و نصب نداری: فایل docs/web-ocr.html را دانلود کن و در مرورگر گوشی یا کامپیوتر باز کن. عکس یا PDF را انتخاب می‌کنی و متن فارسی/انگلیسی را در کادر پایین تحویل می‌گیری — بدون نصب هیچ‌چیز، پردازش داخل خود دستگاه:

🌐 اجرای نسخه وب · دانلود فایل نسخه وب از ریپو

دفعه اول به اینترنت نیاز است تا موتور و داده زبان دانلود شود؛ فایل تو هیچ‌جا آپلود نمی‌شود. در هر اجرا حداکثر ۱۰ صفحه خوانده می‌شود — بازه صفحه (مثلاً ۱ تا ۱۰، ۱۱ تا ۲۰) را خودت بگذار.


📁 ساختار پروژه

ocr-stt-tool/
├─ app/
│  ├─ core/
│  │  ├─ __init__.py
│  │  ├─ models.py
│  │  ├─ image_ocr.py
│  │  ├─ pdf_ocr.py
│  │  ├─ speech_to_text.py
│  │  ├─ whisper_stt.py
│  │  └─ fa_normalize.py
│  ├─ __init__.py
│  ├─ __main__.py
│  ├─ cli.py
│  └─ gui_kivy.py
├─ examples/
│  ├─ sample.png
│  ├─ sample.pdf
│  └─ sample.wav
├─ tests/
│  ├─ test_smoke.py
│  └─ test_golden.py
├─ docs/
│  ├─ tutorial.html
│  └─ web-ocr.html
├─ requirements.txt
├─ requirements-gui.txt
├─ requirements-optional.txt
├─ pyproject.toml
├─ buildozer.spec
├─ Dockerfile
├─ CHANGELOG.md
├─ README.md
└─ LICENSE

🔧 نصب و راه‌اندازی

نسخه پایتون مهم است: همه قابلیت‌ها (OCR، گفتار گوگل، whisper) فقط روی پایتون 3.10 تا 3.12 کار می‌کنند. روی 3.13+ نصب انجام می‌شود ولی فقط استخراج متن PDF کار می‌کند. ویندوز: از python.org نسخه 3.12 را نصب کن و با py -3.12 اجرا کن (می‌تواند کنار نسخه فعلی باشد).

کدام فایل نیازمندی برای چیست؟

File EN FA
requirements.txt CLI + core: image OCR, PDF text extraction, Google STT — no GUI, no heavy ML هسته و CLI: OCR عکس، استخراج متن PDF، گفتار گوگل — بدون GUI و بدون مدل سنگین
requirements-gui.txt Desktop GUI only (Kivy) — CLI works without it فقط رابط گرافیکی دسکتاپ (Kivy) — CLI بدون آن کار می‌کند
requirements-optional.txt Optional extras — mic input, MP3 convert, scanned-PDF OCR, offline Whisper STT, Persian normalize; install only what you need موارد اختیاری — ورودی میکروفون، تبدیل MP3، OCR اسکن-PDF، STT آفلاین Whisper، نرمالایز فارسی؛ فقط همان را نصب کن که لازم داری
  1. نصب وابستگی‌ها (CLI و هسته — بدون GUI)
pip install -r requirements.txt
# ویندوز با چند نسخه پایتون: py -3.12 -m pip install -r requirements.txt

GUI دسکتاپ (Kivy):

pip install -r requirements-gui.txt

موارد اختیاری (میکروفون، تبدیل MP3، OCR اسکن-PDF، STT آفلاین، نرمالایز فارسی):

pip install -r requirements-optional.txt
# یا انتخابی (از روی سورس): pip install ".[offline,fa]"
  1. نصب Tesseract OCR
brew install tesseract tesseract-lang
  • Linux:
sudo apt install tesseract-ocr tesseract-ocr-fas tesseract-ocr-eng poppler-utils

بررسی:

tesseract --version
tesseract --list-langs

▶️ اجرای ابزار

اجرای CLI

python -m app.cli image examples/sample.png --ocr-lang eng
python -m app.cli pdf examples/sample.pdf
python -m app.cli pdf scan.pdf --ocr-fallback --ocr-lang fas+eng
python -m app.cli audio examples/sample.wav --lang fa-IR
python -m app.cli audio speech.wav --lang en-US -o out.txt

آفلاین (بدون اینترنت، نیازمند pip install faster-whisper):

python -m app.cli audio speech.wav --engine whisper --whisper-model small --lang fa-IR

فرمت خروجی و نرمالایز فارسی:

python -m app.cli pdf examples/sample.pdf --format json -o res.json
python -m app.cli audio speech.wav --engine whisper --format srt -o subs.srt
python -m app.cli audio speech.wav --normalize-fa -o clean.txt

--format srt فقط برای صوت است؛ خروجی json شامل موتور، زبان، تعداد صفحات، هشدارها و زمان اجراست. --normalize-fa از hazm (اگر نصب باشد) وگرنه جایگزین داخلی استفاده می‌کند. چیدمان اصلی متن (سطرها و فاصله‌ها) به‌صورت پیش‌فرض حفظ می‌شود؛ با --no-layout به حالت قدیمی برمی‌گردی.

اجرای GUI

python -m app.gui_kivy

در GUI زبان STT و OCR و موتور (google/whisper) از منوی کشویی انتخاب می‌شود، گزینهٔ Normalize FA نرمال‌سازی فارسی را فعال می‌کند، کار سنگین در Thread پس‌زمینه اجرا می‌شود (UI فریز نمی‌شود) و خطاها داخل خود برنامه نمایش داده می‌شوند.


🐳 اجرا با Docker (بدون نصب Tesseract و poppler روی سیستم)

docker build -t ocrstt:1.2.0 .
docker run --rm -v "$PWD/examples:/data" ocrstt:1.2.0 pdf /data/sample.pdf
docker run --rm -v "$PWD:/work" ocrstt:1.2.0 audio /work/speech.wav --lang fa-IR --format json

ایمیج شامل tesseract-ocr-fas، poppler-utils و ffmpeg است (پایتون 3.12-slim).


📱 وضعیت موبایل (Android / iOS) — آزمایشی

هدف اصلی پروژه دسکتاپ و سرور است. بیلد موبایل نگه داشته شده ولی آزمایشی محسوب می‌شود:

محدودیت مهم: pytesseract فقط Wrapper است و به باینری tesseract نیاز دارد. python-for-android و kivy-ios به‌صورت پیش‌فرض tesseract ندارند، پس OCR عکس روی موبایل بدون Recipe اختصاصی و باندل fas.traineddata کار نمی‌کند. استخراج متن PDF (text-layer) واقع‌بینانه‌ترین قابلیت روی موبایل است.

🟩 Android (Buildozer، روی لینوکس)

pip install buildozer
sudo apt install openjdk-17-jdk unzip autoconf libtool pkg-config zlib1g-dev \
  libncurses-dev cmake libffi-dev libssl-dev
buildozer -v android debug

فایل buildozer.spec در ریپو موجود است. خروجی: bin/*.apk. دسترسی اینترنت/حافظه در spec فعال شده (INTERNET, READ_EXTERNAL_STORAGE).

🟦 iOS (Kivy-iOS + Xcode، روی macOS)

pip install kivy-ios
toolchain build python3 kivy pillow
toolchain create ocrstt .
open ocrstt-ios/ocrstt.xcodeproj

سپس در Xcode بیلد و اجرا روی دستگاه یا شبیه‌ساز.


🖥️ راهنمای بیلد برای دسکتاپ

Windows / macOS / Linux

pip install pyinstaller
pyinstaller --name ocrstt --paths . --onefile -m app.cli

خروجی در پوشهٔ dist/ قرار می‌گیرد. توجه: باینری tesseract جداگانه روی سیستم مقصد لازم است (داخل exe باندل نمی‌شود).


⚠️ نکات مهم

  • برای STT آنلاین نیاز به اینترنت دارید (Google Speech API). صوت شما به سرور گوگل ارسال می‌شود — برای فایل حساس رضایت بگیرید. جایگزین آفلاین: requirements-optional.txt (Vosk / faster-whisper).
  • برای OCR فارسی باید دیتای زبان فارسی Tesseract نصب شود (fas) و --ocr-lang fas یا fas+eng بدهید.
  • PDF اسکن‌شده لایهٔ متنی ندارد؛ خروجی خالی یعنی اسکن است — با --ocr-fallback (نیازمند poppler + tesseract) دوباره تلاش کنید.
  • فرمت صوتی پشتیبانی‌شده: WAV/AIFF/FLAC. برای MP3/OGG/M4A اول با ffmpeg به WAV تبدیل کنید.
  • توجه نسخه پایتون: همه قابلیت‌ها فقط روی 3.10 تا 3.12 تست شده‌اند. روی 3.13+ کتابخانه SpeechRecognition (حذف aifc) و faster-whisper (نبود ویل av) کار نمی‌کنند و ابزار برای حالت صوتی خطای واضح می‌دهد؛ استخراج متن PDF همچنان کار می‌کند.
  • روی موبایل، عملکرد OCR وابسته به قدرت CPU دستگاه است.
  • محدودیت حجم پیش‌فرض برای جلوگیری از OOM: عکس ۳۰MB، PDF و صوت ۱۰۰MB.

🛠️ Troubleshooting | عیب‌یابی

EN:

  • tesseract: command not found — install Tesseract (see install section) and make sure tesseract is in PATH; check with tesseract --version. For Persian OCR also install the fas language data and pass --ocr-lang fas or fas+eng.
  • Wrong Python version — all features (OCR, Google STT, Whisper) are only tested on Python 3.10–3.12. On 3.13+ install succeeds but only PDF text extraction works; audio mode shows a clear error.
  • Whisper model did not download — first --engine whisper run needs internet and disk space (~1–3 GB depending on --whisper-model); retry with a smaller model (e.g. --whisper-model small) on a stable connection.

FA:

  • خطای tesseract پیدا نشد — تسرکت را از بخش نصب، نصب کن و مطمئن شو دستور tesseract در PATH است؛ با tesseract --version تست کن. برای OCR فارسی دیتای زبان fas را هم نصب کن و --ocr-lang fas یا fas+eng بده.
  • نسخه اشتباه پایتون — همه قابلیت‌ها (OCR، گفتار گوگل، Whisper) فقط روی پایتون 3.10 تا 3.12 تست شده‌اند. روی 3.13+ نصب انجام می‌شود ولی فقط استخراج متن PDF کار می‌کند و حالت صوتی خطای واضح می‌دهد.
  • دانلود نشدن مدل Whisper — اولین اجرای --engine whisper به اینترنت و فضای دیسک نیاز دارد (بسته به --whisper-model حدود ۱ تا ۳ گیگ)؛ با اتصال پایدار و مدل کوچک‌تر (مثلاً --whisper-model small) دوباره تلاش کن.

📄 لایسنس این پروژه تحت لایسنس MIT منتشر شده است. برای مشاهدهٔ متن کامل، فایل LICENSE را ببینید.


Contributing / مشارکت

  • EN: Issues and Pull Requests are welcome. Please see CONTRIBUTING.md.
  • FA: برای گزارش مشکل یا پیشنهاد قابلیت جدید، لطفا ایشو یا پول‌ریکوئست ثبت کنید.

License / لایسنس

MIT — see LICENSE.

Contact / ارتباط

About

Cross-platform OCR, PDF text extractor and speech-to-text tool in Python

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages