hojjatcroos
دوشنبه 26 بهمن 1388, 20:20 عصر
به نام خداوند بخشنده مهربان
کار رو برای شروع نوشتن یک OCR شروع کردم به مشکلاتی برخورد کردم طبق معمول یکی از مشکلات نبود منابع کافی پاسکال بود تصمیم گرفتم تا آموزش ساخت یک OCR هر چند ساده رو شروع کنم تا مشکلات اولیه تا حدودی برطرف بشه(با سواد کم خودم).
برای این کار طبق معمول از بالای صفحه شروع به اسکن(افقی) می کنیم تا اولین نقطه غیر سفید.سپس اسکن رو ادامه می دهیم تا اولین نقطه سفید(شرط ما سفید بودن همه سطر است).حال ما مختصات یک خط رو داریم.شروع به اسکن عمودی می کنیم از کجا؟از ارتفاع اول خط تا ارتفاع آخر خط.به اولین نقطه غیر سفید که رسیدیم اول کاراکتر هستش و وقتی ما به اولین نقطه ایی رسیدیم که به اندازه (ارتفاع پایین خط-ارتفاع بالایی) خط سفید است به انتهای حرف رسیدیم.حالا موقع شناسایی این حرف است.روش شناسایی ما چیست؟
شناسایی برای فونت های مختلف فرق می کند.ما ابتدا الگویی شامل مثلا 86 کاراکتر و نشانه رو از کاربر دریافت می کنیم.حال آن ها را روی فایل باینری می ریزیم چگونه؟الگوی گرفته را کاراکتر به کاراکتر جدا کرده و برای هر کاراکتر اگر پیکسل [x,y] غیر سفید بود مقدار یک در ماتریس و در غیر این صورت مقدار 0 را ثبت می کنیم و فایل را ذخیره می کنیم.
قبل از این که شروع به اسکن تصویر کنیم الگو را از کاربر دریافت می کنیم.مثلا اگر متن با فونت Arial نوشته شده باشد الگویی متفاوت با فونت Tahoma دارد.
حالا کارکتر جدا شده را طبق همان الگو در ماتریس می گذاریم و با ماتریس های ذخیره شده مقایسه می کنیم اگر با یکی از آن ماتریس ها برابر بود مقدار برگشتی نام آن ماتریس می باشد.
این کار را آن قدر ادامه می دهیم تا مقادیر برگشتی از دو تابعی که بالا و پایین صفحه و همچنین راست و چپ را مشخص می کنند صفر شود.
حالا نوبت به این رسیده کا فاصله های میان حرفی مشخص بشه که از دو تابع استفاده کردم.
یک راه فرار هم برای خودمون می گذاریم و اون پرسیدن واژه های ناشناس از کاربر هستش
برنامه یی را که در زیر ضمیه کرده ام همراه با الگوی فونت Arial سایز 10 و عکس ها ی نمونه الگو می باشد.
باز هم تاکیید می کنم این فقط یک شروع برای کار OCR می باشد این OCR به زبان انگلیسی تهیه شده برای زبان فارسی می توانید صفحه را از راست به چپ اسکن کنید و به نظر بنده نیازی به جدا سازی حروف فارسی نیست و داشتن الگوهای واژه ای می تواند کمک کننده ما باشد.
کار رو برای شروع نوشتن یک OCR شروع کردم به مشکلاتی برخورد کردم طبق معمول یکی از مشکلات نبود منابع کافی پاسکال بود تصمیم گرفتم تا آموزش ساخت یک OCR هر چند ساده رو شروع کنم تا مشکلات اولیه تا حدودی برطرف بشه(با سواد کم خودم).
برای این کار طبق معمول از بالای صفحه شروع به اسکن(افقی) می کنیم تا اولین نقطه غیر سفید.سپس اسکن رو ادامه می دهیم تا اولین نقطه سفید(شرط ما سفید بودن همه سطر است).حال ما مختصات یک خط رو داریم.شروع به اسکن عمودی می کنیم از کجا؟از ارتفاع اول خط تا ارتفاع آخر خط.به اولین نقطه غیر سفید که رسیدیم اول کاراکتر هستش و وقتی ما به اولین نقطه ایی رسیدیم که به اندازه (ارتفاع پایین خط-ارتفاع بالایی) خط سفید است به انتهای حرف رسیدیم.حالا موقع شناسایی این حرف است.روش شناسایی ما چیست؟
شناسایی برای فونت های مختلف فرق می کند.ما ابتدا الگویی شامل مثلا 86 کاراکتر و نشانه رو از کاربر دریافت می کنیم.حال آن ها را روی فایل باینری می ریزیم چگونه؟الگوی گرفته را کاراکتر به کاراکتر جدا کرده و برای هر کاراکتر اگر پیکسل [x,y] غیر سفید بود مقدار یک در ماتریس و در غیر این صورت مقدار 0 را ثبت می کنیم و فایل را ذخیره می کنیم.
قبل از این که شروع به اسکن تصویر کنیم الگو را از کاربر دریافت می کنیم.مثلا اگر متن با فونت Arial نوشته شده باشد الگویی متفاوت با فونت Tahoma دارد.
حالا کارکتر جدا شده را طبق همان الگو در ماتریس می گذاریم و با ماتریس های ذخیره شده مقایسه می کنیم اگر با یکی از آن ماتریس ها برابر بود مقدار برگشتی نام آن ماتریس می باشد.
این کار را آن قدر ادامه می دهیم تا مقادیر برگشتی از دو تابعی که بالا و پایین صفحه و همچنین راست و چپ را مشخص می کنند صفر شود.
حالا نوبت به این رسیده کا فاصله های میان حرفی مشخص بشه که از دو تابع استفاده کردم.
یک راه فرار هم برای خودمون می گذاریم و اون پرسیدن واژه های ناشناس از کاربر هستش
برنامه یی را که در زیر ضمیه کرده ام همراه با الگوی فونت Arial سایز 10 و عکس ها ی نمونه الگو می باشد.
باز هم تاکیید می کنم این فقط یک شروع برای کار OCR می باشد این OCR به زبان انگلیسی تهیه شده برای زبان فارسی می توانید صفحه را از راست به چپ اسکن کنید و به نظر بنده نیازی به جدا سازی حروف فارسی نیست و داشتن الگوهای واژه ای می تواند کمک کننده ما باشد.