طراحی و پیاده سازی OCR دست نویس فارسی با استفاده از عناصر ابتدایی تشکیل دهنده حروف
اگر تا حالا با یک اسکنر یا دوربین موبایل، یک برگه دستنویس فارسی رو عکس گرفته باشید و بعد سعی کرده باشید متنش رو با یک اپلیکیشن OCR معمولی به متن قابل ویرایش تبدیل کنید، احتمالاً نتیجه ناامیدکننده بوده. برخلاف OCR لاتین که سالهاست به دقت بالای ۹۹٪ رسیده، بازشناسی نوری حروف فارسی (Persian OCR) هنوز یکی از چالشبرانگیزترین مسائل حوزه پردازش تصویر با متلب است — و دلیلش هم فقط کمبود داده نیست، بلکه در دل ساختار زبانی خط فارسی نهفته.
OCR فارسی چیست و چرا اینقدر دشوار است؟
OCR یا Optical Character Recognition به معنای تبدیل تصویر یک متن (چاپی یا دستنویس) به یک فایل متنی قابل جستوجو و ویرایش است. در زبان فارسی، این فرایند به دلیل چسبیدن حروف به یکدیگر، تغییر شکل هر حرف بر اساس موقعیتش در کلمه (ابتدا، وسط، انتها یا جدا)، و وجود نقاط و اعراب، بهمراتب پیچیدهتر از OCR لاتین است.
چرا خط فارسی برای ماشین سختتر از انگلیسی است؟
چند ویژگی ساختاری خط فارسی، کار سیستمهای بازشناسی را دشوار میکنند:
- پیوستگی حروف: در فارسی برخلاف لاتین، اغلب حروف یک کلمه به هم متصلاند و مرز دقیق هر حرف مشخص نیست.
- چندشکلی بودن حروف: هر حرف بسته به موقعیتش در کلمه (اول، وسط، آخر، جدا) شکل ظاهری متفاوتی دارد — عملاً بهجای ۳۲ حرف، باید نزدیک به ۱۱۴ شکل مختلف را تشخیص داد.
- نقش نقاط: بیش از نیمی از حروف فارسی نقطه دارند و تعداد و موقعیت این نقاط (یک، دو یا سهتایی) نقش تعیینکنندهای در تشخیص حرف بازی میکند.
- تنوع خط زمینه: برخلاف لاتین که حروف روی یک خط پایه ثابت مینشینند، در فارسی «خط کرسی» باید جداگانه تشخیص داده شود تا موقعیت هر جزء از حرف مشخص شود.
OCR برخط در برابر برونخط
سیستمهای OCR فارسی به دو دسته اصلی تقسیم میشوند: برخط (Online) که در آن حرکت قلم روی صفحه دیجیتال در لحظه ثبت و تحلیل میشود، و برونخط (Offline) که در آن فقط تصویر نهایی متن (اسکنشده یا عکسگرفتهشده) در دسترس است. اغلب کاربردهای واقعی — از خواندن فرمهای دستنویس تا دیجیتالیکردن اسناد قدیمی — از نوع برونخط هستند، چون داده ورودی صرفاً یک تصویر است، نه توالی زمانی حرکت قلم.
پایپلاین فنی بازشناسی OCR فارسی چگونه کار میکند؟
سیستمهای OCR فارسی معمولاً از چهار مرحله اصلی عبور میکنند: پیشپردازش تصویر، قطعهبندی، استخراج ویژگی، و بازشناسی نهایی. برخلاف OCR لاتین که این مراحل کاملاً از هم مستقلاند، در فارسی به دلیل پیوستگی حروف، مرحله قطعهبندی و بازشناسی معمولاً باید همزمان یا با تعامل نزدیک با هم انجام شوند.
۱. پیشپردازش تصویر
اولین قدم، آمادهسازی تصویر ورودی است. این مرحله شامل تبدیل تصویر به حالت باینری (سیاه و سفید)، حذف نویز اسکن یا دوربین، و نرمالسازی اندازه قلم است تا الگوریتم بازشناسی مستقل از سایز فونت عمل کند. کیفیت این مرحله مستقیماً روی دقت نهایی سیستم اثر میگذارد؛ یک تصویر پرنویز یا کج، حتی بهترین الگوریتم بازشناسی را هم به اشتباه میاندازد.
۲. تعیین خط زمینه و شناسایی نقاط
پیش از هر چیز باید «خط کرسی» یا خط زمینهای که حروف روی آن مینشینند مشخص شود، چون موقعیت هر جزء از حرف (بالای خط، پایین خط) یکی از مهمترین سرنخها برای تشخیص است. همزمان، نقاط حروف (که ممکن است بعد از نازکسازی تصویر از بدنه اصلی جدا افتاده باشند) شناسایی و تعداد و موقعیتشان (بالا یا پایین خط) ثبت میشود.
۳. نازکسازی و استخراج اسکلت تصویر
برای اینکه بشود شکل کلی هر حرف را تحلیل کرد، باید ضخامت خط قلم را به یک پیکسل کاهش داد — این فرایند «نازکسازی» نام دارد. یک الگوریتم نازکسازی خوب باید سه شرط را رعایت کند: نقاط پایانی حرف را از بین نبرد، اتصال بین بخشهای مختلف حرف را قطع نکند، و اسکلت نهایی به سمت محور میانی شکل همگرا شود، نه اینکه بیشازحد نازک شود و اطلاعات را از دست بدهد.
۴. قطعهبندی به استروک و استخراج عناصر ابتدایی
بعد از نازکسازی، تصویر هر زیرکلمه به واحدهای کوچکتری بهنام «استروک» تقسیم میشود — مجموعهای از پیکسلهای متصل که یا خودشان یک شکل مستقلاند (تکاستروک) یا در نقطهای منشعب میشوند (چنداستروک). با استفاده از تبدیل هاف (Hough Transform)، خطوط تشکیلدهنده هر استروک شناسایی و به یکی از عناصر ابتدایی ساختاری — خط افقی، عمودی، مورب، یا انواع منحنی — نگاشت میشود. این عناصر ابتدایی همان واحدهای پایهای هستند که هر حرف فارسی از ترکیب چند تای آنها ساخته میشود.
۵. بازشناسی نهایی حرف
در آخرین مرحله، ترکیب عناصر ابتدایی استخراجشده از هر استروک، به همراه تعداد و موقعیت نقاط و جایگاه نسبت به خط زمینه، با یک پایگاه دانش از پیش تعریفشده (شامل الگوی هر حرف فارسی در چهار موقعیت جدا، اول، وسط و آخر) مقایسه میشود تا حرف نهایی مشخص شود. یکی از نکات کلیدی رویکردهای مدرنتر این است که این مقایسه دیگر لزوماً مبتنی بر قوانین دستی نیست، بلکه میتواند از طریق شبکههای عصبی یادگرفته شود — موضوعی که در ادامه به آن میپردازیم.
پیادهسازی OCR فارسی در متلب
یکی از نقاط قوت متلب برای این نوع پروژهها، در دسترس بودن توابع آماده پردازش تصویر است که مراحل پیشپردازش و تحلیل ساختاری را بهشکل قابلاجرا و قابلآزمایش درمیآورند. در ادامه، پیادهسازی هر مرحله از پایپلاین با توابع واقعی متلب توضیح داده شده.
تبدیل تصویر به باینری
برای تبدیل تصویر ورودی (که معمولاً بهصورت grayscale دریافت میشود) به تصویر باینری، از تابع im2bw استفاده میشود:
BW = im2bw(I, level);در این دستور، پیکسلهایی که شدت روشناییشان از مقدار level بیشتر باشد به ۱ (سفید) و بقیه به ۰ (سیاه) تبدیل میشوند. معمولاً مقدار level با تابع graythresh بهصورت خودکار محاسبه میشود تا وابسته به کیفیت نور تصویر ورودی نباشد.
حذف نویز با فیلتر میانه
تصاویر اسکنشده یا عکسگرفتهشده معمولاً دارای نویز نمکی-فلفلی (salt and pepper) هستند. برای حذف این نوع نویز بدون از بین بردن لبههای حروف، فیلتر میانه مناسبتر از فیلترهای معمول کانولوشنی عمل میکند:
B = medfilt2(A, [m n]);این تابع مقدار هر پیکسل خروجی را برابر با میانه پیکسلهای همسایهاش قرار میدهد — روشی که هم نویز را حذف میکند و هم لبههای اصلی حرف را دستنخورده نگه میدارد.
نرمالسازی اندازه قلم
برای اینکه سیستم مستقل از اندازه فونت ورودی کار کند، تصویر باید بر اساس اندازه قلم تخمینزدهشده نرمال شود. این کار با تابع imresize انجام میشود:
Normal_image = imresize(Main_image, 40/T);در این رابطه، T اندازه تخمینی قلم (معمولاً از طریق میانه ستونهای غیرصفر تصویر محاسبه میشود) و عدد ۴۰ یک مقیاس مرجع تجربی است که تصویر را به اندازه استاندارد نزدیک میکند.
استخراج خطوط با تبدیل هاف اصلاحشده
برای شناسایی خطوط تشکیلدهنده هر استروک، تبدیل هاف استاندارد معمولاً خطوط اضافی و نویزی زیادی تولید میکند. راهحل عملی، استفاده از یک نسخه اصلاحشده است که بهجای گام زاویهای ۴۵ درجه، از گام ۲۲.۵ درجه استفاده میکند و فقط پیکسلهایی را در نظر میگیرد که واقعاً روی اسکلت اصلی حرف (نه خط اتصال بین نقطه شروع و پایان) قرار دارند. این تنظیم دقت تشخیص خطوط اصلی حرف را بهطور محسوسی بالا میبرد و نویز ساختاری را حذف میکند.
ترکیب این توابع — im2bw، medfilt2، imresize و پیادهسازی سفارشی تبدیل هاف — همان زیرساختی است که یک سیستم OCR فارسی کاربردی روی آن ساخته میشود؛ چیزی که در سطح تئوری ساده به نظر میرسد اما پیادهسازی درست و تنظیم پارامترهای تجربیاش (مثل ضریب نرمالسازی یا گام زاویهای) نیازمند آزمایش و تجربه عملی است.
مقایسه دقت روشهای مختلف بازشناسی OCR فارسی
یکی از چالشهای واقعی این حوزه، نبود یک پایگاهداده استاندارد و یکسان است که بتوان دقت روشهای مختلف را روی آن بهطور منصفانه مقایسه کرد. با این حال، بررسی مقالات علمی منتشرشده در کنفرانسهای معتبر ایرانی و بینالمللی (از جمله ICEE) تصویر روشنی از سطح دقت قابلدستیابی در این حوزه بهدست میدهد.
| روش بازشناسی | ویژگی استخراجشده | دقت گزارششده |
|---|---|---|
| شبکه عصبی RBF | ممانهای زرنیک | ۹۱٪ (کاراکتر) / ۹۲.۸٪ (اعداد) |
| ماشین بردار پشتیبان (SVM) | ممانهای زرنیک | ۹۴٪ (کاراکتر) / ۹۴.۸٪ (اعداد) |
| SVM و CEPC | مقایسه ۶ روش کلاسبندی | تا ۹۹.۴٪ |
| شبکه عصبی دولایه (۱۳ و ۲۰ نود مخفی) | تبدیل موجک | ۹۶٪ (آموزش) / ۸۸٪ (تست) |
| ترکیب ویژگی ساختاری + موجک + فرکتال | نزدیکترین همسایه (NNC) | ۹۷٪ |
| شبکه عصبی سلسلهمراتبی + لغتنامه | گشتاورهای آماری + ویژگیهای ساختاری | ۷۷.۲٪ (بدون لغتنامه) / ۸۴.۴٪ (با لغتنامه) |
| عناصر ابتدایی حروف + تبدیل هاف اصلاحشده | ۸ عنصر ساختاری (خط، منحنی، دایره) | ۸۸.۷٪ (تکحرفی) تا ۹۸.۸٪ (اعداد) |
نکته قابلتوجه این است که روشهای مبتنی بر لغتنامه (که خروجی بازشناسی حرفبهحرف را با یک فرهنگ لغت از پیش آماده مقایسه میکنند) معمولاً دقت نهایی را بهطور محسوسی بالا میبرند، چون خطاهای تکحرفی را در سطح کلمه تصحیح میکنند. با این حال، همین وابستگی به لغتنامه، کاربرد این روشها را به متون با واژگان از پیش شناختهشده محدود میکند — نقطهضعفی که در بخش بعد به آن میپردازیم.
برای مرجعیت علمی این حوزه، پایگاهداده IFHCDB (تهیهشده توسط دانشکده مهندسی برق دانشگاه صنعتی امیرکبیر) یکی از منابع شناختهشده برای آزمایش سیستمهای OCR فارسی است که بیش از ۶۰ هزار نمونه حرف و عدد دستنویس جدا را در بر میگیرد.
چالشهای واقعی OCR فارسی که هنوز حلنشده باقی ماندهاند
با وجود پیشرفتهای قابلتوجه، بازشناسی متون فارسی هنوز فاصله زیادی تا یک سیستم ایدهآل دارد. چند چالش عملی همچنان دستوپاگیرند:
- نبود سیستم تجاری کارآمد داخلی: با وجود حجم قابلتوجه تحقیقات دانشگاهی در این حوزه، تاکنون هیچ نرمافزار OCR تجاری فارسی که از نظر دقت و کیفیت قابلمقایسه با OCR لاتین باشد، عرضه نشده است.
- وابستگی شدید به کیفیت تصویر ورودی: نرخ بازشناسی روشهای سنتی بهشدت به کیفیت اسکن، نور، و زاویه تصویربرداری وابسته است؛ در شرایط واقعی (مثلاً عکس گرفتهشده با موبایل) دقت افت محسوسی میکند.
- شکلهای خاص و ادغامشده حروف: برخی ترکیبها مثل «لا» یا اشکال خاص حروف «ه» و «ح» در برخی زیرکلمات، شکل ظاهری کاملاً متفاوتی از حالت استاندارد پیدا میکنند که الگوریتمهای مبتنیبر قوانین ثابت معمولاً از تشخیص آنها عاجزند.
- هزینه بالای جداسازی حروف پیوسته: در روشهای سنتی که ابتدا حروف را از هم جدا میکنند و بعد بازشناسی میکنند، خطای مرحله جداسازی مستقیماً به مرحله بازشناسی منتقل میشود و کل دقت سیستم را پایین میآورد.
رویکرد مدرنتر: یادگیری عمیق بهجای قوانین دستی
روشهای مبتنیبر عناصر ساختاری و قوانین دستی (مثل آنچه در این مقاله بررسی شد) مزیت مهمی دارند: نیازی به آموزش حجم عظیمی از داده ندارند و منطق تصمیمگیریشان قابلردیابی است. اما در مقابل، برای تعمیم به فونتها و سبکهای نوشتاری جدید، نیاز به تعریف دستی قوانین بیشتری دارند.
در سالهای اخیر، رویکرد غالب در تحقیقات بینالمللی OCR به سمت یادگیری عمیق و بهطور مشخص شبکههای عصبی کانولوشن (CNN) حرکت کرده است. برخلاف روشهای سنتی که ویژگیها را بهصورت دستی تعریف میکنند (مثل عناصر ابتدایی خط و منحنی)، شبکههای CNN این ویژگیها را مستقیماً از روی حجم زیادی داده آموزشی یاد میگیرند. این تفاوت بنیادی باعث میشود CNN معمولاً در برابر تنوع فونت، زاویه، و کیفیت تصویر مقاومتر عمل کند — هرچند به قیمت نیاز به دیتاست بزرگتر و زمان آموزش بیشتر.
برای پروژههایی که هدفشان صرفاً بازشناسی حروف چاپی با فونت محدود است، همان رویکردهای کلاسیک مبتنیبر یادگیری ماشین (مثل SVM یا نزدیکترین همسایه) هنوز گزینهای سریع و کمهزینهاند. اما برای دستنویسهای واقعی با تنوع بالای سبک نگارش، رویکرد یادگیری عمیق معمولاً نتیجه پایدارتری میدهد.
کاربردهای عملی OCR فارسی
- دیجیتالیسازی اسناد اداری و آرشیوی: تبدیل حجم بالای اسناد کاغذی به فرمت متنی قابلجستوجو در ادارات و کتابخانهها.
- پردازش فرمهای دستنویس: خواندن خودکار فرمهای ثبتنام، نظرسنجی، و چکهای بانکی.
- تشخیص پلاک خودرو: یکی از پرکاربردترین زیرشاخههای OCR در سیستمهای کنترل ترافیک و پارکینگ هوشمند.
- کمک به نابینایان: ترکیب OCR با سیستم تبدیل متن به گفتار برای خواندن خودکار متون چاپی.
- خودکارسازی مکاتبات پستی: تشخیص خودکار آدرس و کد پستی روی پاکت نامه برای مسیریابی سریعتر.
سؤالات متداول
آیا OCR فارسی بهاندازه OCR انگلیسی دقیق است؟
خیر، به دلیل پیوستگی حروف و چندشکلی بودن آنها، دقت سیستمهای OCR فارسی معمولاً پایینتر از OCR لاتین است، هرچند روشهای مدرن مبتنیبر یادگیری عمیق این فاصله را بهطور محسوسی کم کردهاند.
برای پیادهسازی OCR در متلب چه توابعی لازم است؟
توابع پایهای مثل im2bw برای باینریسازی، medfilt2 برای حذف نویز، و imresize برای نرمالسازی اندازه، همراه با پیادهسازی سفارشی تبدیل هاف برای استخراج خطوط ساختاری حروف.
آیا برای OCR دستنویس باید حتماً از شبکه عصبی استفاده کرد؟
نه لزوماً؛ برای دستنویسهای محدود یا فونتهای چاپی ثابت، روشهای ساختاری کلاسیک هم میتوانند دقت قابلقبولی بدهند. اما برای دستنویسهای واقعی با تنوع بالا، رویکردهای یادگیری عمیق معمولاً پایدارتر عمل میکنند.
اگر روی پیادهسازی یا بهبود یک سیستم OCR، پردازش تصویر، یا هر پروژه دیگری با متلب نیاز به کمک تخصصی دارید، میتوانید درخواست خود را ثبت کنید تا مجریان متخصص متلبی آن را بررسی کنند.










دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.