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

۱. مقدمه

تعاملات انسانها از قدیم با روشهای مختلفی از جمله گفتار، نوشتار می باشد و با پیدایش فناوریهای جدید صفحه کلیدها و موبایل ها نیز باعث افزایش تعاملات شده اند و اما در سال های اخیر با پیشرفت فناوری، این ارتباطات به شیوه های نوین از جمله نوشتن بر روی صفحات لمسی رسیده است. تشخیص کاراکترها یا OCR یکی از نرم افزارهای موفق در حوزه شناسای خودکار الگوها است و تشخیص اعداد دست نوشته یکی از زیر بخش های جالب توجه و مهمی از تشخیص کاراکترهای می باشد که کاربردهای زیادی نیز همچون، دسته بندی نامه های پستی، خواندن خودکار مبالغ چک های بانکی، شناسایی خودکار اطلاعات ثبت شده در فرم ها، خواندن نوشته ها از روی صفحه های لمسی و خواندن اعداد از روی تصاویر دست نوشته می باشد. برای انجام تشخیص اعداد فارسی روش های متفاوتی وجود دارد از جمله استفاده از روش های آماری shadow coding، مدل مخفی مارکوف [1]، [2]SVM، نزدیک ترین همسایگی یا K-NN و یا روش های شبکه های عصبی، ژنتیک [3] و فازی را می توان نام برد که همه آنها در مسئله دقت و سرعت انجام کار از اهمیت ویژه ای برخوردار هستند در این راستا از روش هایی مانند PCA برای کاهش حجم داده مورد استفاده قرار می گیرد. از جمله نکات قابل تحقیق این است که از کجا معلوم اعداد موجود در یک عکس، دستنوشته و یا پرینت شده هستند [4]، در این راستا محقیق سعی به تفکیک این دو حالت دارند.همچنین، طرز نوشتن افرادی که در شهرهای مختلف هستند چقدر با هم متفاوت است؟ و نوشتار اعداد فارسی با زبان های دیگر مانند عربی و هندی چقدر با هم متفاوت هستند و چه تاثیری بر روی شناسایی الگو دارد [5]. حوزه دیگری که می تواند مورد اهمیت قرار بگیرد تشخیص درشت نویسی و یا مورب نویسی اعداد است که در زبان فارسی تقریباً کاری در این حوزه انجام نشده است.

شکل 1 نمایش اعداد فارسی

شکل 1 نمایش اعداد فارسی
در زبان فارسی 13 نوع نمایش اعداد دستنویس وجود دارد. در شکل 1 نمونه ای از آنها نشان داده شده است. در این زبان اعداد صفر، چهار و شش هستند که به دو صورت نوشته می شوند [2]. پس باید برای آن 13 دسته ایجاد کرد و کار تشخیص را برای هر دسته انجام داد.
برای انجام تشخیص اعداد فارسی نیاز به پایگاه داده ای می باشد که مشتمل بر یک سری اعداد دست نوشته فارسی باشد. پایگاه های داده زیادی برای انجام این کار وجود دارد. که در جدول 1 یک مجموعه ای از پایگاه داده های معروف نشان داده شده است.
برای این منظور، در طی انجام تشخیص اعداد، ابتدا نویز های عکس ها را برطرف می کنند و بعد آن ها را نرمال سازی می کنند. یعنی، اندازه همه آنها را به یک اندازه خاص به عنوان مثال 64×64 تبدیل می کنند. بعد از آن با استفاده از یکی و یا ترکیبی از روش های مطرح، سعی به آموزش دادن و یا جمع آوری اطلاعات و تولید ویژگی برای حل مسئله می کنند. در نهایت، مدل آموزش دیده را با داده های آزمونی، مورد آزمون قرار می دهند تا بتوانند میزان دقت کار را بسنجند.

نام پایگاه داده dpi نمونه های آزمایشی نمونه های آزمونی مجموعه نمونه ها
CENPARMI 166 4000 2000 60000
CEDAR 300 18468 2711 21179
MNIST Normalized into 20*20 7291 2007 9298

جدول 1- مجموعه ای از پایگاه های داده های مهم

در ادامه این مقاله، با یک سری از روش های مطرح و طرز کار آنها تحت عنوان کارهای مرتبط توضیحاتی داده خواهد شد. آزمایشات و نتیجه آنها و مقایسه روش ها نیز به عنوان موضوع بعدی ارائه خواهد شد. در نهایت نیز نتیجه گیری از کار را خواهیم داشت.

۲. کارهای مرتبط

همان طور که می دانید روش SVM یکی از روش های مطرح در حوزه شناسایی الگو می باشد. لذا، از این روش در شناسایی اعداد فارسی نیز استفاده شده است. چیزی که در اینجا مهم است ایده ای است که برای بدست آوردن ویژگی ها استفاده می شود. هدف اصلی این ویژگی ها این است که بتوان یک شی یا نمونه را به وسیله این ویژگی ها اندازه گیری کرد تا آنهایی که اندازه شان به هم نزدیک تر است بتواند در یک دسته قرار بگیرند. مقالات مختلف ایده های مختلفی را برای بدست آوردن ویژگی ها استفاده می کنند. برای نمونه روش مطرح شده در [2]، برای هر عددی که در عکس وجود دارد 4 دیدگاه مختلف تعریف می شود و از روی هر دیدگاه 16 ویژگی استخراج کرده است. بنابراین در کل برای هر عکس 64 ویژگی خواهد داشت. با این ویژگی ها یک SVM چندگانه آموزش داده می شود تا بتواند اعداد را با دقت 94.14% تشخیص دهد.
این روش ابتدا عکس ها را بعد از برطرف کردن نویزها با استفاده از روش دورنیابی نزدیک ترین همسایگی به عکس های 64×64 تبدیل می کند تا عکس ها نرمال شوند. در مرحله بعد، دیدگاه های بالا، پائین، چپ و راست ایجاد می شود. می دانید که عکس مورد نظر یک عکس 64×64 است. ماتریس عکس نیز یک ماتریس 64×64 خواهد بود که ارزش رنگ در آن نوشته شده است. از این ماتریس 1/4 آن انتخاب می شود. یک ماتریس 16×16 را ایجاد می کند. از روی این ماتریس، از هر طرف، بالا، پائین، چپ و راست، تعداد خانه های سفید تا به مرز خانه سیاه برسد، شمارش می شود. پس نموداری مانند شکل 2 را تولید خواهد کرد که از اتصال تعداد نقاط سفید در هر جهت از عکس منحنی ایجاد کرده اند. اگر از روی این منحنی مشتق بگیرید شکل 3 را برای دیدگاه های بالا، پائین، چپ و راست ایجاد می کند. مقدارهای مشتق ویژگی های این مسئله می شود. حال 64 ویژگی استخراج شده را با 13 تا SVM برای هر عدد ایجاد می شود و نتیجه نهایی برای تشخیص عدد نیز بیشترین مقدار بین این 13 تا SVM خواهد بود.

شکل 2 a: عکس اصلی، b: عکس نرمال شده، c-f: دیدگاه مختلف از بالا و پائین، چپ و راست

شکل 2 a: عکس اصلی، b: عکس نرمال شده، c-f: دیدگاه مختلف از بالا و پائین، چپ و راست

شکل 3 نمودار های مشتق گرفته شده از منحنی های دیدگاه های مختلف شکل 2

شکل 3 نمودار های مشتق گرفته شده از منحنی های دیدگاه های مختلف شکل 2

حوزه دیگری که بسیار قابل رقابت با روش SVM است روش دیاگراف تکرار 1 می باشد. این روش نشان می دهد که چگالی رنگ مشکی در عکس به چه میزان است. این روش در [6] مورد بررسی قرار گرفته است. این مرجع، ابتدا عکس ها را به اندازه های 40×40 نرمال سازی می کند. بعد، ماتریس عکس های که برای مثال عدد 5 را مشخص می کنند را با هم رنگهای مشکی با هم جمع، همچنین رنگهای سفید را با هم جمع و رنگ سیاه را از سفید و یا سفید را از سیاه تفریق می کنند. در نهایت یک ساختاری که نشان دهنده ساختار عدد 5 باشد را ایجاد می کند. شکل 4 نشان دهنده این حالت می باشد که از مجموعه ای از عکس ها که برای عدد 5 هستند ایجاد شده است. همچنین، این کار را بر روی اعداد دیگر نیز اعمال می کنند و برای تشخیص از روش شباهت 2 استفاده می کنند تا بتوانند یک عدد را تشخیص دهند. اگر بخواهید روش بدست آوردن دیاگرام تکرار را فرموله کنید می توانید از فرمولD_i(x,y)=\frac{1}{N_i} \sum\limits_{n=0}^N_i (f_n(x,y)*2-1)*100 که در آن x,y = 0,…,39 می باشد، استفاده کنید. همچنین فرمول تشابه نیز می تواند به صورت زیر باشد.

S_i=\sum\limits_{y=0}^{39}\sum\limits_{x=0}^{39} sgn[(F(x,y)*2-1)*D_i(x,y)]*|D_i(x,y)|

شکل 4 دیاگرام تکرار برای 300 نمونه از عدد 5، حالت سیاه و سفید آن نیز در سمت بالا سمت راست نشان داده شده است.

شکل 4 دیاگرام تکرار برای 300 نمونه از عدد 5، حالت سیاه و سفید آن نیز در سمت بالا سمت راست نشان داده شده است

همان طور که مشخص است، این روش ها نیاز دارند تا در لحظه انجام تشخیص، این الگو ها را تولید کنند و این می تواند یکی از معایب این روش باشد. لذا، همه این عملیات با حجم بسیار زیادی از داده های آموزشی باید در سیستم معمولی مانند یک موبایل و یا تبلت ها اجرا شود. این کار هزینه انجام کار را بالا خواهد برد. لذا سعی می شود تا با استفاده از روش های کاهش سایز آموزشی زمان انجام کار را بالا ببرند.
برای کاهش سایز در پایگاه داده باید دو کار انجام شود. اول باید بٌعد را کاهش دهند و دوم باید سایز را کاهش دهند [7]. در کاهش بٌعد سعی می شود تا در ابتدا ویژگی هایی که اهمیت کمی دارند را شناسایی و از مجموعه ویژگی ها حذف کنند. برای انجام این کار از روش های مختلفی مانند PCA، EMG، random projection و ... استفاده می شود. همچنین، می توان برای این کار با استفاده از روش های ترکیبی نتیجه بهتری گرفت.
در کاهش سایز سعی می شود تا نمونه های آموزشی را کاهش دهند. اکثر نمونه ها دو گروه از نمونه های آموزشی را از مجموعه خود حذف می کنند. 1) نمونه هایی که خیلی از کلاس خود دور هستند. 2) نمونه هایی که خیلی به مرکز کلاس خود نزدیک هستند. برای انجام این کار از روش هایی مانند K-means و یا روش های مختلف داده کاوی استفاده می کنند تا نمونه ها را به چندین کلاس تقسیم کنند. در نهایت، در [7] با استفاده از روش کاهش سایز PCA توانسته برای روش دیاگرام تکرارها به دقت 97% برسد و اگر انجام نمی داد در زمانی دو برابر به دقت 97.7% می رسید.
یکی از پر طرفدار ترین روش های تشخیص الگو و آموزش دادن به سیستم ها روش شبکه های عصبی است. برای نمونه [8] بعد از حذف نویز و نرمال سازی، عکس نرمال شده را به عکسی به ضخامت یک پیکسل تبدیل می کند و سعی می کند تا عکس نازک سازی شود و اسکلت تصویر مشخص شود، دوباره عکس مورد نظر را به سایز دو برابر تبدیل می کند. این عمل باعث می شود تا میزان کلفتی و نازکی پهنای دست نوشته تاثیری بر روی روش نداشته باشد. حال کل ماتریس عکس را به 16 خانه n*n تقسیم می کنند و از مقدار داخل آنها میانگین گرفته می شود. حاصل 16 عدد است که نشان دهنده ویژگی ها خواهد بود. با استفاده از روش شبکه های عصبی با وزن دهی به نرون ها و بایاس کردن مقدار اولیه و استفاده از تابع سیگموئید دو قطبی مانند تانژانت سیگموئید سعی به شناسایی اگو می کند و تا 97.2% دقت در شناسایی اعداد دارد. لازم به توضیح است که اگر از روش projection استفاده می شد به درصد دقت 99% می رسید [9]. البته اگر ویژگی ها با استفاده از روش ژنتیک استخراج می شد و با استفاده از روش های شبکه عصبی پرسپترون انجام می شد به دقت 98.1% می رسید [10].
یکی دیگر از ویژگی هایی که می توان در شناسایی اعداد از آن تاثیر گرفت، جهت حرکت قلم و یا جهت شکستگی ها می باشد. از این ویژگی بیشتر در حوزه های SVM، شبکه های عصبی [8] و مدل مخفی مارکوف [1] مورد استفاده قرار می گیرد. برای مشخص کردن جهت حرکت قلم ابتدا اسکلت عکس را استخراج می کنند. جهت قلم می تواند 4 سمت شمال، جنوب، شرق و غرب باشد. همچنین 4 جهت نیز با چرخش 45 درجه این جهت ها وجود خواهد داشت. اگر این جهت ها را در جهت چرخش عقربه ساعت شماره گذاری کنید در نتیجه، 8 سمت خواهید داشت. در شکل 5 دنباله مشاهدات برای عدد 1 نشان داده شده است. در روش مطرح در [1] از مدل مخفی مارکوف، روش جهت حرکت قلم استفاده گردیده تا تشخیص اعداد را انجام دهد. با توجه به اینکه براساس جهت حرکت قلم طراحی شده، برای هر رقم به ازای هر روش نوشتن از لحاظ جهت حرکت قلم یک مدل مخفی ایجاد شده است. هر مدل حداکثر 8 حالت انتقال و هر کدام آنها 8 مشاهده دارند که همان جهت حرکت قلم است. احتمالات انتقال بین حالتها و مشاهدات با توجه به شکلهای استاندارد و غیراستاندارد هر رقم تعیین می شود. در این مدلها ویژگی هدایت شوندگی دیده می شود، به این معنی که در مسیر حرکت بین حالتها امکان بازگشت به حالت قبلی وجود ندارد و مدل را مجبور به طی کردن یک مسیر مشخص می کند، که این ویژگی به تشخیص دقیق تر مدل کمک بسیاری کرده است. و در نهایت این روش دارای دقت 96.76% در تشخیص اعداد می باشد.

شکل 5 چند نمونه دنباله مشاهدات برای رقم 1.

شکل 5 چند نمونه دنباله مشاهدات برای رقم 1

البته اگر روش شناسایی جهت حرکت قلم را با روش قطعه بندی انجام بدهید به میزان دقت 94.4% می رسید [11]. در روش قطعه بندی سعی می شود تا بعد از بدست آوردن اسکلت اعداد، بخش های مختلف اسکلت را از هم جدا کنند و هر بخش را جداگانه مورد بررسی قرار بدهند که این کار می تواند در شناسایی اعداد فارسی موثر واقع گردد.
روش مطرح دیگری که در این حوزه باقی می ماند روش های آماری مانند بیز است. در [12] از مدل مخروطی گوسی برای تشخیص اعداد لاتین استفاده کرده است و به دقت 94% دست یافته است. در این روش از مدل مخروطی گوسی در دو مرحله استفاده شده است. ابتدا برای تعیین زیر کلاسهای مربوط به هر عدد و سپس برای تخمین وفقی تابع چگالی احتمال هر زیر کلاس در قالب یک دسته بندی کننده بیز. اگر این روش را با ترکیب روش های HMM و SVM استفاده کنید، در این صورت به میزان دقت 98% خواهید رسید [13].
روش های یادگیری نیمه نظارتی نیز از جمله روش هایی هستند که مورد توجه قرار می گیرند. روشهای نیمه‌نظارتی دسته‌ای از روش‌های یادگیری ماشین است که در آن از داده‌های بدون برچسب و داده‌های برچسب‌دار به صورت هم‌زمان برای بهبود دقت یادگیری استفاده می‌شود. در این نوع آموزش تعداد کمی از داده ها برچسب دارند و مابقی بدون برجسب مورد استفاده قرار خواهد گرفت. این روش ها اکثراً بر روی شبکه های عصبی اعمال می شوند. این در حالی است که خود شبکه های عصبی عضو روش های نظارتی هستند. این روش دو بخش عمده دارد. در بخش اول پیش آموزش بدون نظارت مطرح می شود. در این بخش وزن های لایه ها با استفاده از آموزش بدون نظارت لایه ها مقدار دهی اولیه می شود. در بخش دوم، fine-tuning نام دارد که وزنهای عمومی که با برچسب ها آموزش دیده اند بر روی روش های نظارتی به صورت انتشار عقبگرد اعمال می شود. همه روش هایی که به این صورت عمل می کنند را روش نیمه نظارتی می گویند. داده های بدون برچسب نیز داده هایی هستند که بیشترین احتمال را برای یک کلاس داشته باشند و کلاس آنها نیز درست پیش بینی شده باشد. این روش می تواند همه مدل های شبکه های عصبی را با روش های آموزش به خوبی ترکیب کند. این روش در [14]، به صورت کامل مطرح شده و از نمونه های MNIST استفاده کرده تا شناسایی اعداد را داشته باشد. این کار را با چندی روش مقایسه کرده است و همه آنها را با تعداد نقاط آموزشی 100 تا، 600، 1000 و 3000 انجام داده است و برای تست نیز از 1000 نمونه استفاده کرده است که در جدول 2 میزان خطای کلاس بندی نشان داده شده است که در [14] روش های dropNN، +PL و روش +PL+DAE مطرح شده است. عمومآً برای جلوگیری از overfitting از روش drop کردن استفاده می شود که آموزش نظارتی مورد استفاده قرار میگیرد. در +PL به شبکه های عصبی آموزش بدون برچسب نیز اضافه کرده است و در +PL+DAE به آموزش بدون برچسب بدون نظارت DAE اضافه می شود. DAE را در بخش اول یعنی در پیش آموزش بدون نظارت استفاده می کنند.

روش 100 600 1000 3000
NN 25.81 11.44 10.7 6.04
SVM 23.44 8.85 7.77 4.21
CNN 22.98 7.68 6.45 3.35
TSVM 16.81 6.16 5.38 3.45
DBN-rNCA - 8.7 - 3.3
EmbedNN 16.86 5.97 5.73 3.59
CAE 13.47 6.3 4.77 3.2
MTC 12.03 5.13 3.64 2.57
dropNN 21.89 8.57 6.59 3.72
+PL 16.15 5.03 4.30 2.80
+PL+DAE 10.49 4.01 3.46 2.69

جدول 2 میزان خطای روش های مختلف که برای تشخیص اعداد است و با 100، 600، 1000 و 30000 نقطه آموزشی

۳. آزمایش‌ها

۴. مراجع

[1] ا. ابراهمی مقدم, و. فاضلی نیا, ل. رشیدی و م. وفایی جهان, “تشخیص دست نویس رقم لاتین توسط مدل مخفی مارکوف,” در اولین همایش ملی مهندسی رایانه و مدیریت فناوری اطلاعات, 1393.
[2] J. Sadri, C. Suen and T. Bui, "Application of support vector machines for recognition of handwritten Arabic/Persian digits," in Proceedings of Second Iranian Conference on Machine Vision and Image Processing, 2003.
[3] م. اشکواری و م. کبانی, “تشخیص اعداد دست نویس فارسی با استفاده از تکنیک PCA و شبکه عصبی,” در همایش منطقه ای علوم کامپیوتر، مهندسی کامپیوتر و فناوری اطلاعات, خرداد 1391.
[4] J. Franke and M. Oberlander, "Writing style detection by statistical combination of classifiers in form reader applications," in Second International Conference on Document Analysis and Recognition, 1993.
[5] C. Tanprasert and S. Sae Tang, "Thai type style recognition," in IEEE International Symposium on Circuits and Systems.
[6] H. Khosravi and E. Kabir, "Introducing a very large dataset of handwritten Farsi digits and a study on their varieties," Pattern Recognition Letters, vol. 28, pp. 1133-1141, 2007.
[7] M. A. Shayegan and S. Aghabozorgi, "A New Dataset Size Reduction Approach for PCA-Based Classification in OCR Application," Mathematical Problems in Engineering, pp. 1-14, 2014.
[8] ع. جعفرنژاد, “ارائه یک سیستم کارآمد برای شناسایی اعداد دست نویس با استفاده از شبکه عصبی,” در اولین کنفرانس ملی رویکردهای نویس در مهندسی کامپیوتر و بازیابی اطلاعات ایران, 15 مهر 1392.
[9] M. A. Abu-Zanona and B. M. El-Zaghmour, "Current Arabic ( Hindi ) Hand Written Numbers Segmentaion and Recognition Advance ImageProcessing and Neural Network," Journal of Emerging Trends in Computing and Information Sciences, vol. 3, no. 6, pp. 936-941, 2012.
[10] م. ل. افراسیابی, ز. فرهمندپور و ح. ختن لو, “تشخیص اعداد دست نویس عربی با استفاده از ترکیب الگوریتم ژنتیک و شبکه عصبی,” در سومین کنفرانس مهندسی برق و الکترونیک ایران, 22 تیر 1390.
[11] م. زیارت بان, ک. فائز, س. مظفری و م. ازوجی, “ارائه یک روش ساختاری جدید مبتنی بر قطعه بندی تصویر نازک شده برای شناسایی اعداد دست نویس فارسی/عربی,” در سویمن کنفرانس ماشین بینایی و پردازش تصویر ایران, 1383.
[12] م. ر. ارباب شیرانی و م. ت. صادقی, “بازشناسی خودکار اعداد دست نویس لاتین با استفاده از مدل گوسی دو مرحله ای,” در پانزدهمین کنفرانس مهندسی برق ایران.
[13] ع. برومند نیا و ا. امیری, “تشخیص اعداد فارسی (عربی) با استفاده از ساختار ترکیبی SVM/HMM,” در اولین کنفرانس ملی محاسبات نرم و فناوری اطلاعات.
[14] D.-H. Lee, "Pseudo-Label : The Simple and Effcient Semi-Supervised Learning Method for Deep Neural Networks," in Challenges in Representation Learning (WREPL), Atlanta, Georgia, USA, 2013.

۵. پیوندهای مفید


  1. Frequency Diagram

  2. similarity

امین جولا

از زمانی که صرف کرده اید تشکر میکنم. نکاتی که به بهبود کارتان کمک میکند عرض میکنم:
1- اگر جدولی یا شکلی از جایی می آورید حتما باید منبع آن را ذکر کنید.
2- هر جدول یا شکلی که می آید حتما در متن شما باید در مورد آن توضیح داده شود. به عنوان مثال شما هیچ تحلیل در مورد اعداد موجود در جدول 2 نداشته اید.
3 - در انتهای بخش کارهای مرتبط انتظار می رود بعد از ذکر این چندین روش یک جمع بندی جزیی داشته باشید که از میان این روش ها شما سراغ کدامیک خواهید رفت و ارتباط بخش کارهای مرتبط را با بخش آزمایشات مهیا کنید تا خواننده بتواند سیر مطالب را دنبال کند.