طبقه‌بندی ارقام دست‌نویس

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

# مقدمه
پیدایش علوم وفنون جدید . جوامع بشری را با شکل های مختلفی از اطلاعات روبرو نموده است . سطح توسعه ی یک جامعه را می توان با مقدار اطلاعات ودانش تولیدشده در ان آرزیابی کرد . تولید فراینده اطلاعات به شکل های مختلف صورت می گیرد وبا درجات متفاوتی از پیچدگی همراه است .
در نتیجه نیاز به دستگاه های پردازش اطلاعات به صورت روزافزون افزایش می یابد . یکی از مسائل مهم در طراحی دستگاه های مدرن اطلاعات باشناسی خودکار الگوها است .

بازشناسی ارقام وحروف دستنویس فارسی. موضوعی است که سالهاست روی آن کار میشود چه در حوزه تحقیقات دانشگاهی وچه در حوزه های تجاری وکاربردی.مقالات وپایان نامه های در این زمینه ارئه شده است والبته کارهای صنعتی زیادی هم صورت گرفته است 
از مهمترین کاربردهای شناسایی ارقام وحروف دستنویس :

·        وارد کردن اطلاعات اسناد اداری از جمله چک ها و فرم های پر شده
·        شناسایی اتوماتیک شماره پلاک برای سیستم کنترل ترافیک
·        شناسایی کاراکترهای نوشته شده بر روی صفحات لمسی
·       کنترل سیستم به وسیله رسم اشکال
·        شکستن کپچا
·        طراحی تکنولوژی های یاری دهنده نابینایان و افراد با ضعف بینایی

با وجود پیشرفت های فراوانی که در این حوزه انجام گردیده و وجود نرم افزارهای قدرتمندی مانند Readiris ساخت شرکت I.R.I.S. که این کار را برای کاراکترها و
اعداد لاتین به خوبی انجام می دهند اما متاسفانه در مورد کاراکترها و اعداد فارسی/عربی کیفیت کار آنها بسیار پایین است.
از مشکلاتی که به آن مواجه هستیم  اختلاف  فراوان در شیوه نگارش اعداد است. و شباهت زیادی که ارقام به هم دارند همچنین افراد با توجه به سطح سواد و مناطق جغرافیایی اعداد را به صورت های متفاوتی می نویسند 
وهمچنین نوشتن  صفر تو خالی وتو پر می باشد که در طبقه بندی مشکلاتی را بروز میدهد .و همچنین چهار و شش هر کدام به دو صورت متفاوت در بین فارسی نویسان رواج دارند به این ترتیب باید اعداد را در ۱۳ دسته متفاوت طبقه بندی کرد و پس از بررسی عدد وارد شده آن را به شبیه ترین دسته از بین این ۱۳ دسته نسبت داد.
![شکل 1 نمایش اعداد فارسی](https://dl.dropboxusercontent.com/u/106369898/Pr-Pro_L/I1.jpg)

برای متغیریهای مورد بررسی از پایگاه داده هدی استفاده میشود که اولین مجموعه ی بزرگ  دست نویس فارسی مشتمل بر 102353 نمونه دست نوشته سیاه سفید است . این مجموعه طی انجام یک پروژه کارشناسی ارشد در باره بازشناسی برگه های دست نویس تهیه شئده است . داده های این مجموعه از حدود 12000 فرم ثبت نام آزمون سراسری کاشناسی ارشد سال 1384 و آزمون کاردانی پیوسته ی دانشگاه جامع علمی کاربردی سال 1383 استخراج شده است که مورد استفاده در آزمایش ها است .[1] 
![شکل 2 مجموعه داده ای هدی](http://dadegan.ir/sites/default/files/uploads/dadegan/hoda_sample.jpg)

# کارهای مرتبط
برای سیستم تشخیص کارکترهای دست نویس  از سه  قسمت تشکیل میشود
1- پیش پردازش 
2- استخراج ویژگی 
3-طبقه بندی 
![شکل 3 سیستم تشخیص ارقام دست نویس](https://boute.s3.amazonaws.com/194-u.png)

در این مقاله[3] برای پیش پردازش کاهش نویز و نرمال سازی تصاویر به اندازه  n *  n  انجام می گردد . وبرای استخراج ویژگی  
از  ویژگی گرادیان استفاده می گردد  که  اولا مقدار وزاویه گرادیان برای هر نقطه از تصویر محاسبه مشود وبه چند زاویه استاندارد تبدیل میشوند (شکل  5 a   ). و اگر زاویه گرادیان بین دو زاویه استاندارد واقع شود نقطه مربوطه درمقدار مختلف در دو زاویه متفاوت بدس خواهد آمد (شکل 5 b ).
سپس  8 تصویر مجزا از روی گرادیان حاصل خواهد شد که هر کدام مربوط به یکی از راستاهای استاندارد .
 ![شکل 5  نحوه استاندارد سازی زاویه گرادیان ](https://boute.s3.amazonaws.com/194-uu.png)
 وبرای استخراج ویژگی های نهایی از تصاویر قبل نمونه برداری میشود  با استفاده از توابع گاسی  که تعداد k *k ماسک گاسی با فواصل یکسان به اندازه n/k در راستای افقی و عمودی روی تصویر قرار  داده و مقدار مربوط به هر ماسک محاسبه می گردد . که با توجه به اینکه کلا 8 تصویر از روی گرادیان ساخته می شود  ودر هر تصویر نمونه برداری با تعداد k*k ماسک گاسی  صورت  می گیرد کلا 8*k*k ویژگی از روی گرادیان حاصل می شود .
 در شکل 6  مثالی از نحوه به دست آوردن ویژگی گرادیان 4 جهته نشان داده می شود .
 ![شکل 6  نحوه به دست آوردن ویژگی گرادیان 4 جهته  a- تصویر اولیه  b- تصویر نرمال شده  c-تا f- بترتیب تصویر گرادیان در هر یک از راستاهی افقی .قطر اصلی عمودی و قطر فرعی  g- بلاکهای مربوط به نمونه برداری از تصویر c](https://boute.s3.amazonaws.com/194-Untitle.png)
  وبرای طبقه بندی دوکرنل RBF و کرنل چند جمله ای برای دسته بندی کننده  SVM بصورت جداگانه مورد آزمایش قرار گرفتند  .همچنین   با استفاده از 4974 نمونه آموزشی و 3939 نمونه آزمایشی که مورد بررسی قرار گرفته بهترین میزان تشخیص حاصل 99.49 در صد بوده است .

'pac' الگوریتم  موثر  در استخراج ویژگی است و  بطور گسترده ای در سیستم های تشخیص ارقام دستنویس مورد استفاده قرار می گیرد[7] .با این حال به سختی میتواند مقابله کند با الگوهای دارای تغییرات غیر خطی پیچیده مثل گسیختن نوشت یا الودگی نویز .
در [5]  روش kpca ارائه میشود که مشکلات pca را برطرف میکند . که اولا داده های ورودی نگاشت میشوند به یک فضای با بعدی بالاتر با فاصله kernel  و ویژگی ها با حدا اکثر امکان پذیر توصیف میشوند . سپس از pca استفاده میشود تا ویژگی ها ازماتریس ;ernel استخراج شوند آخر از svn برای طبقه بندی تا تصمیم را  بگیرد . در این مقاله از پایگاه داده MINST استفاده شده وبهترین میزان تشخیص حاصل 99.1 در صد بوده است .
در [7] از ویژگی های موجک برای دسته بندی وبازشناسی اعداد مجزای فارسی کردند. در این مقاله از دسته بندی کننده svm برای دسته بندی کننده  svm برای دسته بندی اعداد فارسی استفاده شد . و در [8] از رهیافتی مبتنی برقالب استخراج وژگی های تصویر استفاده شد . در این مقاله به طور ابتکاری 20 قالب که در بر دارنده مهم ترین اطلاعات تصاویر درستنویس فارسی/عربی هستند انتخاب شدند .برای استخراج ویژگی ها از انظباق قالبی استفاده شد . سپس برای دسته بندی وبازشناسی این تصاویر از شبکه عصبی پرسپتون چدلایه استفاده شد .



# آزمایش‌ها

برای انجام ازمایش .در ابتدا باید پایگاه داده اعداد دستنویس فارسی را در نظر گرفت که ما در این آزمایش از اعداد فارسی موجود در مرجع [6] استفاده خواهیم کرد .
در این پایگاه داده 60000 داده آموزشی وجود دارد (برای هر یک از اعداد صفر تا نه، 6000 نمونه). همچنین، 20000 نمونه نیز برای تست در این پایگاه داده وجود دارد (برای هر کدام از اعداد صفر تا نه، 2000 نمونه).
 در ابتدا همه عکس ها را به عکس های 16*16تبدیل می کنیم رای انجام این کار در QTاز دستور  <pre>
  cv::resize(m,ImageInput,Size(16,16));
</pre>استفاده می کنیم 

**به دست آوردن ویژگی ها**
برای آستخراج ویژگی ها از توصیف گر HOG استفاده می کنیم که به طور خلاصه بر آن مرور میکنیم 
مروری بر توصیف گر HOG : 
HOG یکی از پرکاربردتری توصیف گرهای پردازش مقادیر وبینایی ماشین است   HOG برای تشخیص  اشیا درتصاویر بسیار مناسب است .در HOG  میزان ونوع زاویه گرادیان در قسمت های محلی تصویر محاسبه می شود که میتواند به طور  موثری ویژگی شکل یک تصویر را ضبط کند. در روش HOG نصویر به سلولهای مربعی کوجک تقسیم میشود و در هر سلول بردار هیستوگرام زاویه گرادیان محاسبه مشود . سپس با استفاده از الگوی بلوکی نتایج هر سلول هنجار می شود ویک بردار ویژگی تشکیل مشود ودر نهایت برای هر بلوک هیستو گرامی از ویژگی ها توصیف گر نهایی تصویر خواهند بود  
از کنار هم قرار دادن بردارهای ویژگی سلول ها . یک بردار ویژگی بزرک تر ساخته می شود که بردار ویژگی نهایی حاصل از HOG  است .[10]
![شکل (7) توضیح کلی عمل  HOG](http://8pic.ir/images/cwmbi8wlodie8k99ugil.png) 

حجم سلول ها 8 * 8 پیکسل  وتعداد سلولها در یک بلوک 16 * 16  و حجم پنجره 16 * 16   فرض کردیم  برای تعیین این مقادیر از دستورات زیر استفاده می شود 
   
		    hog.blockSize=Size(16,16);
             hog.blockStride=Size(16,16);
             hog.cellSize=Size(8,8);
             hog.winSize=Size(16,16);
 برای طبقه بندی از طبقه بندیکننده SVM استفاده کریدیم   که  به طور خلاصه بر آن مرور می کنیم  
 مروری بر طبقه بندی کننده SVM : 
یکی از روش‌های یادگیری بانظارت است که از آن برای طبقه‌بندی و رگرسیون استفاده می‌کنند.
این روش از جملهٔ روش‌های نسبتاً جدیدی است که در سال‌های اخیر کارایی خوبی نسبت به روش‌های قدیمی‌تر برای طبقه‌بندی از جمله شبکه‌های عصبی پرسپترون نشان داده است. مبنای کاری دسته‌بندی کنندة SVM دسته‌بندی خطی داده‌ها است و در تقسیم خطی داده‌ها سعی می‌کنیم خطی را انتخاب کنیم که حاشیه اطمینان بیشتری داشته باشد. حل معادلة پیدا کردن خط بهینه برای داده‌ها به وسیله روش‌های QP که روش‌های شناخته شده‌ای در حل مسائل محدودیت‌دار هستند صورت می‌گیرد. قبل از تقسیمِ خطی برای اینکه ماشین بتواند داده‌های با پیچیدگی بالا را دسته‌بندی کند داده‌ها را به وسیلهٔ تابعِ phi به فضای با ابعاد خیلی بالاتر می‌بریم. برای اینکه بتوانیم مساله ابعاد خیلی بالا را با استفاده از این روش‌ها حل کنیم از قضیه دوگانی لاگرانژ برای تبدیلِ مسالهٔ مینیمم‌سازی مورد نظر به فرم دوگانی آن که در آن به جای تابع پیچیدهٔ phi که ما را به فضایی با ابعاد بالا می‌برد، تابعِ ساده‌تری به نامِ تابع هسته که ضرب برداری تابع phi است ظاهر می‌شود استفاده می‌کنیم. از توابع هسته مختلفی از جمله هسته‌های نمایی، چندجمله‌ای و سیگموید می‌توان استفاده نمود.[9]
در روش ما از SVM  خطی و کرنل چند کلاسی استفاده شده  ونتایج حاصل زیر نوشته شده است .
 **نتایج** 
 شکل 8  confusion matrix 
 ![شکل 8 confusion matrix   ](http://8pic.ir/images/sk6k06s2i7c7r9bznfckq23mq6rndd14ma5vpx7a.png)
 
| تعداد نمونه | نمونه های به درست تشخیص شده  | نمونه های به درستی تشخیص نشده  | دقت    | 
|:------------|:----------------------------:|:------------------------------:|:-------|
|     20000   |           18464               | 		         1536				 | 92.23% |
کد [اینجا](https://github.com/hassanshahadeh/Number_recognition)میتوانید مطالعه نمایید .
 **بهبود نتایح آزمایشات**
همان طور که در مرحله قبلی گفته شد، توانستیم تا با روش بالا به دقت 92% برسیم، برای بهبود کار سعی شد که ویژگی ها را بیشتر کنیم 
برای این کار حجم سلول های hog را کمتر می کنیم . در مرحله قبل حجم سلول ها 8  پیکسل بوده ,  در ای مرحله تست حجم سلول ها 2 * 2 می گیریم و  امتحان میکنیم .

**نتایج**
شکل 9 confusion matrix  
![شکل 9 confusion matrix  ](http://8pic.ir/images/ganow3a38x9co3vfo0hmu5sd2xom1pyu9ch39fj.png)

| تعداد نمونه | نمونه های به درست تشخیص شده  | نمونه های به درستی تشخیص نشده  | دقت    | 
|:------------|:----------------------------:|:------------------------------:|:-------|
|     20000   |           19434               | 		         556			    	 | 97.12% |
  
  از این نتیجه میگیریم با کمتر کردن حجم سلول ها دقت بیشتر می شود ولی با کمتر کردن بیش از حد دقت کمتر میشود چون سلول ها انقدر کوچک شدن که نویز ها را می نمایش میدهد .
  
# نتیجه گیری و  کارهای آینده
کد بهبود یافته  [اینجا](https://github.com/hassanshahadeh/Number_recognition) میتوانید مطالعه نمایید .
# نتیجه گیری و  کارهای آینده
برای این فاز کار های که انجام شده خلاصه مینویسم  اولا همه عکس های یک اندازه می کنیم دوما با hog ویژگی ها رو استخراج می کنیم سوما با svm  خطی یاد میدهیم . وبرای بهبود نتایج  ویژگی ها رو بیشتر کردیم با کمتر کردنن حجم سلول ها . 
برای کار های آینده میتوانیم از svm غیر خطی استفاده کنیم 

# مراجع

[1] 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
[2] Claude Chouinard, Rejean Plamondon “Thinning and Segmenting Handwritten Characters by Line Following”, Ecole Polytechnique de Montreal, Machine Vision and Applications, 1992
[3]حسن سلطان زاده, محمد رحمتی, شناسایی ارقام دستنویس فارسی با استفاده از گرادیان و دسته بندی کننده ماشین بردار پشتیبان
 [4] Handwritten Digit Recognition by Adaptive-Subspace Self-Organizing Map (ASSOM) ,Bailing Zhang ,Minyue Fu, Hong Yan, and Marwan A. Jabri 1999
[5]Naigong Yu and Panna Jiao,Handwritten Digits Recognition Approach Research based on Distance &Kernel PCA 2012
[6] [صفحه رسمی مجموعه دادگان هدی ](http://farsiocr.ir/%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%AF%D8%A7%D8%AF%D9%87/%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A7%D8%B1%D9%82%D8%A7%D9%85-%D8%AF%D8%B3%D8%AA%D9%86%D9%88%DB%8C%D8%B3-%D9%87%D8%AF%DB%8C/)
[7]A. Mowlaei and K. Faez. Recognition of isolated handwritten Persian/Arabic characters
and numerals using support vector machines. In Proc. IEEE 13th Workshop on Neural Networks
for Signal Processing, pages 547–554, 2003.
[8] M. Ziaratban, K. Faez, and F. Faradji. Language-based feature extraction using templatematching
in Farsi/Arabic handwritten numeral recognition. In Proc. Ninth International
Conference on Document Analysis and Recognition, volume 1, pages 297–301, 2007.
[9]www.wikipedia.org 
[10] Cheng-Lin Liu, Kazuki Nakashima, Hiroshi Sako, Hiromichi Fujisawa. Handwritten
digit recognition: investigation of normalization and feature extraction techniques. Pattern
Recognition, 37:256–279, 2004.
**پیوندهای مفید**
+ [صفحه رسمی مجموعه دادگان هدی ](http://farsiocr.ir/%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%AF%D8%A7%D8%AF%D9%87/%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A7%D8%B1%D9%82%D8%A7%D9%85-%D8%AF%D8%B3%D8%AA%D9%86%D9%88%DB%8C%D8%B3-%D9%87%D8%AF%DB%8C/)
+ [مقاله در مورد مجموعه دادگان فارسی هدی](http://farsiocr.ir/Archive/dataset_PRL.pdf)
+ [Kaggle Competition](https://www.kaggle.com/c/digit-recognizer)
+ [Semeion Handwritten Digit Data Set](http://archive.ics.uci.edu/ml/datasets/Semeion+Handwritten+Digit)
+ [MNIST Handwritten Digits](http://yann.lecun.com/exdb/mnist/)