FA-TOOLS — Header Component
فرآیند استخراج متن از تصویر با استفاده از کتابخانه پایتسرکت پایتون

آموزش جامع تشخیص متن در تصویر با Pytesseract و پایتون

آنچه در این مقاله یاد می‌گیرید:

در این راهنمای کاربردی، نحوه استخراج متن از تصاویر (OCR) را با استفاده از کتابخانه محبوب Pytesseract در پایتون آموزش می‌بینید. یاد می‌گیرید چطور تصاویر فارسی را با دقت بالا پردازش کنید، نویز تصاویر را با OpenCV از بین ببرید و خطاهای رایج در حین اجرای پروژه را برطرف سازید.

استخراج متن از تصاویر یا همان فناوری OCR (Optical Character Recognition)، یکی از کلیدی‌ترین نیازها در پروژه‌های اتوماسیون اداری، پردازش اسناد و بینایی ماشین است. با استفاده از پایتسرکت، شما می‌توانید سخت‌ترین تصاویر حاوی متون فارسی و انگلیسی را اسکن کرده و آن‌ها را به رشته‌های متنی قابل ویرایش و ذخیره در دیتابیس تبدیل کنید. در ادامه، این فرآیند را از صفر تا پیاده‌سازی حرفه‌ای یاد خواهیم گرفت.

۱. پایتسرکت (Pytesseract) چیست؟

آموزش تشخیص متن در تصویر با pytesseract — تصویر 1

پایتسرکت (Pytesseract) یک کتابخانه پایتون است که به عنوان یک لایه واسط (Wrapper) برای موتور قدرتمند Tesseract OCR گوگل عمل می‌کند. این ابزار به توسعه‌دهندگان اجازه می‌دهد فایل‌های تصویری مانند PNG، JPG و TIFF را مستقیماً به متن تایپ‌شده تبدیل کنند.

موتور اصلی تسراکت در ابتدا توسط شرکت HP توسعه یافت و سپس گوگل مدیریت آن را بر عهده گرفت. امروزه این ابزار به لطف هوش مصنوعی و شبکه‌های عصبی LSTM، از بیش از ۱۰۰ زبان مختلف دنیا از جمله زبان فارسی پشتیبانی می‌کند و یکی از دقیق‌ترین گزینه‌های متن‌باز موجود برای برنامه‌نویسان است.

۲. مراحل نصب و راه‌اندازی پیش‌نیازها

آموزش تشخیص متن در تصویر با pytesseract — تصویر 2

برای شروع کار با Pytesseract، نصب کردن خودِ پکیج پایتون کافی نیست. شما باید موتور اجرایی Tesseract را روی سیستم‌عامل خود نصب کرده و سپس مسیر آن را به پایتون معرفی کنید.

گام اول: نصب موتور Tesseract روی سیستم‌عامل

  • ویندوز (Windows): فایل نصبی exe را از وب‌سایت‌های معتبر یا گیت‌هاب رسمی Tesseract دانلود و نصب کنید. تیک مربوط به نصب پک‌های زبان اضافی (Additional language data) را بزنید تا بعداً دچار مشکل نشوید. مسیر پیش‌فرض نصب معمولاً C:Program FilesTesseract-OCR است.
  • لینوکس (Ubuntu/Debian): ترمینال خود را باز کرده و دستور زیر را اجرا کنید:
    sudo apt update && sudo apt install tesseract-ocr
  • مک (macOS): از مدیریت پکیج Homebrew استفاده کنید:
    brew install tesseract

گام دوم: نصب کتابخانه‌های پایتون

حالا نوبت به نصب کتابخانه پایتون و ابزار Pillow برای مدیریت تصاویر می‌رسد. اگر به ابزارهای برنامه‌نویسی پایتون علاقه‌مندید، پیشنهاد می‌شود آرشیو تکه‌کدهای پایتون ما را برای یادگیری پروژه‌های کاربردی‌تر دنبال کنید. دستور زیر را در خط فرمان اجرا کنید:

pip install pytesseract pillow opencv-python

۳. نوشتن اولین کد تشخیص متن انگلیسی

آموزش تشخیص متن در تصویر با pytesseract — تصویر 3

ساده‌ترین راه برای استخراج متن از تصویر در پایتون چیست؟ با وارد کردن کتابخانه Pillow و Pytesseract، باز کردن تصویر با متد Image.open() و فرستادن آن به تابع image_to_string()، متن تصویر به راحتی در قالب یک رشته خروجی داده می‌شود.

کد زیر یک نمونه ساده و استاندارد برای خواندن متون انگلیسی از روی یک فایل تصویری معمولی است:

from PIL import Image
import pytesseract

# مشخص کردن مسیر فایل اجرایی Tesseract (فقط برای کاربران ویندوز)
# pytesseract.pytesseract.tesseract_cmd = r'C:Program FilesTesseract-OCRtesseract.exe'

# باز کردن تصویر با کتابخانه Pillow
image_path = 'sample-text.png'
img = Image.open(image_path)

# استخراج متن انگلیسی
extracted_text = pytesseract.image_to_string(img)

print("متن استخراج شده:")
print(extracted_text)

۴. تنظیم Pytesseract برای زبان فارسی

آموزش تشخیص متن در تصویر با pytesseract — تصویر 4

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

مراحل فعال‌سازی زبان فارسی:

  1. به گیت‌هاب رسمی Tesseract مراجعه کرده و فایل fas.traineddata مربوط به نسخه خود را دانلود کنید.
  2. فایل دانلود شده را به پوشه tessdata در مسیر نصب برنامه انتقال دهید (مثلاً: C:Program FilesTesseract-OCRtessdata).
  3. در کدهای پایتون پارامتر lang='fas' را تنظیم کنید.

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

from PIL import Image
import pytesseract

img = Image.open('persian-image.jpg')

# استفاده از زبان فارسی (fas) و انگلیسی (eng) به طور همزمان
text = pytesseract.image_to_string(img, lang='fas+eng')

print("متن فارسی استخراج شده:")
print(text)

۵. افزایش دقت OCR با پیش‌پردازش تصاویر (OpenCV)

آموزش تشخیص متن در تصویر با pytesseract — تصویر 5

چرا در تشخیص متون تصاویر کج، تار یا سایه‌دار دچار خطا می‌شویم؟ موتور OCR بر اساس تمایز شدید رنگ سفید و سیاه کار می‌کند. اگر کنتراست تصویر پایین باشد یا در پس‌زمینه نویز وجود داشته باشد، تسراکت حروف را اشتباه تشخیص می‌دهد. پیش‌پردازش تصاویر با استفاده از OpenCV، کلید طلایی افزایش ۱۰۰ درصدی دقت کار است.

در ادامه سه تکنیک حیاتی پیش‌پردازش شامل سیاه‌وسفید کردن دوحالته (Thresholding)، کاهش نویز (Denoising) و تغییر مقیاس (Rescaling) را بررسی می‌کنیم.

import cv2
import pytesseract

# خواندن تصویر با OpenCV
image = cv2.imread('blurry_invoice.png')

# ۱. تبدیل به تصویر خاکستری (Grayscale)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# ۲. فیلتر کردن نویز (سایش ملایم تصویر)
denoised = cv2.medianBlur(gray, 3)

# ۳. اعمال آستانه‌گذاری تطبیقی برای تبدیل به سیاه و سفید خالص
threshold_img = cv2.threshold(denoised, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

# ذخیره موقت تصویر پیش‌پردازش شده برای تایید بصری
cv2.imwrite('clean_image.png', threshold_img)

# ارسال تصویر بهینه شده به تسراکت
extracted_data = pytesseract.image_to_string(threshold_img, lang='fas')
print(extracted_data)

۶. آشنایی با مدهای پیکربندی (PSM)

Tesseract گزینه‌های مختلفی برای تقسیم‌بندی صفحات (Page Segmentation Modes یا همان PSM) ارائه می‌دهد. با تغییر این تنظیمات، شما مشخص می‌کنید که هوش مصنوعی تصویر را به صورت یک بلاک متنی بزرگ، یک کلمه تک، یا یک خط تکی بررسی کند. برای مثال اگر تصویری حاوی یک کلمه کوتاه دارید، حتماً از مد ۸ استفاده کنید تا دقت کار به حداکثر برسد.

شماره مد (PSM) کاربرد و معنی آن در پردازش تصویر
3 حالت خودکار کاملاً استاندارد بدون استفاده از جهت‌یابی و زوایا (پیش‌فرض).
4 در نظر گرفتن تصویر به صورت یک ستون متنی واحد در سایزهای مختلف.
6 مناسب برای اسناد متنیِ بلوک‌بندی شده و ساده (مانند بخش‌هایی از یک کتاب).
7 پردازش تصویر به عنوان یک سطر متنی واحد و پیوسته.
8 مناسب برای تصاویری که فقط شامل یک واژه یا کلمه خاص هستند.

جهت پیاده‌سازی این تنظیمات در پروژه خود، کافیست دستور پیکربندی زیر را به صورت آرگومان برای تابع تسراکت ارسال نمایید:

# تنظیم مد صفحه روی حالت 6 (بلوک متن یکنواخت)
custom_config = r'--psm 6'
text = pytesseract.image_to_string(img, lang='fas', config=custom_config)

۷. عیب‌یابی سریع و رفع خطاهای رایج

راهنمای رفع مشکلات رایج کاربران

۱. ارور TesseractNotFoundError: tesseract is not installed…
این مشکل شایع‌ترین باگ است و نشان می‌دهد مفسر پایتون محل دقیق نصب Tesseract را نمی‌شناسد. در ویندوز باید متغیر pytesseract.pytesseract.tesseract_cmd را به طور صریح با آدرس فایل اجرایی Tesseract مقداردهی کنید. همچنین اضافه کردن این مسیر به Environment Variables سیستم‌عامل مشکل را برای همیشه حل می‌کند.

۲. کاهش کیفیت تشخیص اعداد فارسی و برعکس خوانده شدن حروف
دلیل اصلی این اختلال، ناسازگار بودن فایل‌های آموزش داده شده در برخی نسخه‌ها است. مطمئن شوید آخرین نسخه استاندارد را از مخزن داده‌های آموزش دیده‌ی تسراکت در گیت‌هاب با نام tessdata_best دریافت کرده‌اید.

۳. خطای Memory Error یا توقف برنامه در تصاویری با حجم بالا
قبل از اینکه تصویر حجیم را به پردازش بفرستید، سایز طول و عرض تصویر را با متد resize() در کتابخانه Pillow کاهش دهید تا پردازنده دچار گلوگاه محاسباتی نشود.

۸. پرسش‌های متداول

در این بخش به متداول‌ترین سوالات شما درباره کار با موتور قدرتمند Pytesseract پاسخ داده‌ایم:

آیا Pytesseract از متون دست‌نویس فارسی هم پشتیبانی می‌کند؟

خیر، مدل‌های پیش‌فرض تسراکت برای تشخیص متون چاپی، تایپ‌شده و استاندارد طراحی شده‌اند. برای پردازش خطوط دست‌نویس باید مدل‌های اختصاصی شبکه‌های عصبی عمیق (دیپ لرنینگ) را روی داد‌ه‌های فارسی آموزش دهید.

چگونه می‌توانیم فایل PDF چند صفحه‌ای را پردازش کنیم؟

شما ابتدا باید با کتابخانه‌هایی مثل pdf2image صفحات PDF را به تصاویر جداگانه تبدیل کنید و سپس با نوشتن یک حلقه پایتون ساده، تصاویر را به صورت صفحه به صفحه به Pytesseract تحویل دهید.

چرا خوانایی اعداد در فاکتورهای فروشگاهی تا این حد پایین است؟

این مشکل به دلیل فونت‌های غیراستاندارد فارسی و خطوط تاخورده کاغذ است. برای حل آن استفاده از تکنیک بایرنیزاسیون یا آستانه‌گذاری‌های دوبعدی هیستوگرام در کتابخانه OpenCV به شدت توصیه می‌شود.

آیا بدون نصب نرم‌افزار Tesseract می‌توان از کتابخانه پایتون استفاده کرد؟

خیر، کتابخانه Pytesseract تنها به عنوان یک رابط پایتونی برای اجرای کدهای کامپایل‌شده‌ی پروژه تسراکت عمل می‌کند و بدون وجود فایل‌های اجرایی اصلی سیستم‌عامل کاربردی ندارد.

قدم بعدی برای شما چیست؟

اکنون که مهارت پایه‌ای برای تشخیص متن از تصویر را کسب کرده‌اید، توصیه می‌کنیم آن را با پروژه‌های خلاقانه‌ای مثل خواندن فاکتورهای کاغذی و ذخیره‌سازی داده در قالب فایل اکسل ترکیب کنید. همچنین می‌توانید با مراجعه به منبع وبلاگی ما، مجموعه‌ای گسترده از تکه‌کدهای برنامه‌نویسی را در زمینه‌های وب، پایتون و طراحی ظاهر سایت بررسی کرده و مهارت فنی خود را ارتقا دهید.

Table of Contents

آخرین نوشته‌ها