ساخت اسکریپت تبدیل تصویر به متن با پایتون
در دنیای امروز، پردازش تصویر و استخراج اطلاعات از آن اهمیت فزایندهای پیدا کرده است. یکی از کاربردهای مهم این پردازش، تبدیل تصاویر حاوی متن به متن قابل ویرایش است. این قابلیت در زمینههای مختلفی مانند دیجیتالی کردن اسناد، استخراج اطلاعات از رسیدها و فاکتورها، و ایجاد سیستمهای دسترسیپذیری برای افراد نابینا کاربرد دارد. در این مقاله، به آموزش ساخت یک اسکریپت پایتون برای تبدیل تصویر به متن میپردازیم. این آموزش در دسته بندی ‘اتوماسیون و اسکریپتنویسی’ قرار میگیرد و برای افراد با دانش پایه پایتون مناسب است.
پیشنیازها
قبل از شروع، اطمینان حاصل کنید که پیشنیازهای زیر را دارید:
- نصب پایتون: نسخه 3.6 یا بالاتر
- نصب کتابخانه Tesseract OCR: این کتابخانه موتور اصلی تشخیص متن در تصویر است.
- نصب کتابخانه pytesseract: این کتابخانه رابطی بین پایتون و Tesseract OCR فراهم میکند.
- نصب کتابخانه Pillow (PIL): برای باز کردن و پردازش تصاویر.
برای نصب کتابخانهها، میتوانید از pip استفاده کنید:
pip install pytesseract pillow
نصب Tesseract OCR بسته به سیستم عامل شما متفاوت است. برای ویندوز، میتوانید فایل نصبی را از وبسایت رسمی Tesseract دانلود و نصب کنید. در لینوکس، معمولاً با استفاده از مدیر بسته سیستم عامل قابل نصب است (مثلاً sudo apt-get install tesseract-ocr در اوبونتو).
مراحل ساخت اسکریپت
اکنون میتوانیم به ساخت اسکریپت پایتون بپردازیم. مراحل اصلی عبارتند از:
- باز کردن تصویر
- پیشپردازش تصویر (اختیاری)
- تشخیص متن با استفاده از Tesseract OCR
- نمایش یا ذخیره متن استخراج شده
1. باز کردن تصویر
برای باز کردن تصویر، از کتابخانه Pillow استفاده میکنیم. کد زیر یک تصویر را باز میکند:
from PIL import Image image_path = 'path/to/your/image.png' img = Image.open(image_path)
به جای 'path/to/your/image.png'، مسیر تصویر خود را قرار دهید.
2. پیشپردازش تصویر (اختیاری)
پیشپردازش تصویر میتواند دقت تشخیص متن را بهبود بخشد. برخی از تکنیکهای پیشپردازش عبارتند از:
- تبدیل به تصویر سیاه و سفید: این کار باعث کاهش پیچیدگی تصویر و تمرکز Tesseract بر روی متن میشود.
- افزایش کنتراست: این کار باعث واضحتر شدن متن میشود.
- حذف نویز: این کار باعث کاهش خطاهای تشخیص متن میشود.
- تغییر اندازه تصویر: گاهی اوقات تغییر اندازه تصویر میتواند دقت را بهبود بخشد.
کد زیر یک مثال از پیشپردازش تصویر است:
from PIL import Image, ImageEnhance, ImageFilter
img = img.convert('L') # تبدیل به تصویر سیاه و سفید
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2) # افزایش کنتراست
img = img.filter(ImageFilter.MedianFilter()) # حذف نویز
توجه داشته باشید که پیشپردازش تصویر همیشه ضروری نیست و ممکن است در برخی موارد باعث کاهش دقت شود. آزمایش با تکنیکهای مختلف پیشپردازش و ارزیابی نتایج، بهترین راه برای تعیین اینکه کدام تکنیکها برای تصویر شما مناسب هستند، است.
3. تشخیص متن با استفاده از Tesseract OCR
برای تشخیص متن، از کتابخانه pytesseract استفاده میکنیم. کد زیر متن را از تصویر استخراج میکند:
import pytesseract text = pytesseract.image_to_string(img, lang='fa')
پارامتر lang زبان متن موجود در تصویر را مشخص میکند. در اینجا، از 'fa' برای زبان فارسی استفاده شده است. اگر تصویر شما به زبان دیگری است، زبان مناسب را جایگزین کنید. اگر زبان تصویر شما انگلیسی است، از ‘eng’ استفاده کنید.
همچنین میتوانید پارامترهای دیگری را به تابع image_to_string ارسال کنید تا رفتار Tesseract را سفارشی کنید. برای مثال، میتوانید پارامتر config را برای تنظیم پیکربندی Tesseract استفاده کنید.
4. نمایش یا ذخیره متن استخراج شده
پس از استخراج متن، میتوانید آن را نمایش دهید یا در یک فایل ذخیره کنید. کد زیر متن را در کنسول نمایش میدهد:
print(text)
کد زیر متن را در یک فایل ذخیره میکند:
with open('output.txt', 'w', encoding='utf-8') as f:
f.write(text)
توجه داشته باشید که پارامتر encoding='utf-8' برای پشتیبانی از کاراکترهای فارسی ضروری است.
اسکریپت کامل
در اینجا یک اسکریپت کامل برای تبدیل تصویر به متن ارائه شده است:
from PIL import Image, ImageEnhance, ImageFilter
import pytesseract
def image_to_text(image_path, lang='fa'):
try:
img = Image.open(image_path)
img = img.convert('L')
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2)
img = img.filter(ImageFilter.MedianFilter())
text = pytesseract.image_to_string(img, lang=lang)
return text
except Exception as e:
return f"Error: {e}"
if __name__ == "__main__":
image_path = 'path/to/your/image.png'
text = image_to_text(image_path)
print(text)
with open('output.txt', 'w', encoding='utf-8') as f:
f.write(text)
به جای 'path/to/your/image.png'، مسیر تصویر خود را قرار دهید.
بهبود دقت تشخیص متن
دقت تشخیص متن به عوامل مختلفی بستگی دارد، از جمله کیفیت تصویر، فونت متن، و پیچیدگی پسزمینه. در اینجا چند نکته برای بهبود دقت تشخیص متن ارائه شده است:
- استفاده از تصاویر با کیفیت بالا
- انتخاب فونتهای استاندارد
- ساده کردن پسزمینه تصویر
- استفاده از تکنیکهای پیشپردازش مناسب
- تنظیم پارامترهای Tesseract OCR
- آموزش Tesseract OCR با دادههای خاص (برای فونتها و زبانهای خاص)
اتوماسیون و اسکریپتنویسی پیشرفته
این اسکریپت را میتوان به عنوان پایه ای برای اتوماسیون و اسکریپتنویسی پیشرفتهتر استفاده کرد. برای مثال، میتوان اسکریپتی نوشت که به طور خودکار تمام تصاویر موجود در یک پوشه را پردازش کند و متن استخراج شده را در یک فایل واحد ذخیره کند. همچنین میتوان اسکریپتی نوشت که تصاویر را از یک وبسایت دانلود کند و متن استخراج شده را در یک پایگاه داده ذخیره کند.
با استفاده از پایتون و کتابخانههای مرتبط، میتوانید سیستمهای قدرتمندی برای پردازش تصویر و استخراج اطلاعات ایجاد کنید.

بدون دیدگاه