PDA

View Full Version : آموزش کامل یک OCR ساده و جمع و جور



hojjatcroos
دوشنبه 26 بهمن 1388, 20:20 عصر
به نام خداوند بخشنده مهربان

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

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

mrbm_2007
سه شنبه 27 بهمن 1388, 00:17 صبح
فایل اجرایی برنامه ضمیمه شده ویروسی می باشد!!!

hojjatcroos
سه شنبه 27 بهمن 1388, 09:17 صبح
فکر نمیکنم فایل ویروسی باشه به هیچ وجه؟
اگه دوستان نظر یا سوالی داشتن خوشحال میشم بشنوم

alinikaein
سه شنبه 27 بهمن 1388, 11:07 صبح
حالا نوبت به این رسیده کا فاصله های میان حرفی مشخص بشه که از دو تابع استفاده کردم.

مي‌شه اين را توضيح بديد؟

hojjatcroos
سه شنبه 27 بهمن 1388, 11:33 صبح
ببخشید شاید بد توضیح دادم Mouse Events فرض کنید فاصله های را در نظر نگیریم MouseEvents متن ما بی معنی میشود

mrbm_2007
سه شنبه 27 بهمن 1388, 12:34 عصر
فکر نمیکنم فایل ویروسی باشه به هیچ وجه؟
ولی Nod32 و Avg میگن ویروسیه!!!!!!

Mahmood_M
سه شنبه 27 بهمن 1388, 14:01 عصر
فکر نمیکنم فایل ویروسی باشه به هیچ وجه؟
اگه دوستان نظر یا سوالی داشتن خوشحال میشم بشنوم
آره ، فایل ویروسی هستش ( البته به تشخیص Node 32 ) ، نوع ویروس : Win32/Induc Virus
دوستانی که دانلود می کنن ، ابتدا فایل Exe رو حذف کنن و دوباره برنامه رو کامپایل کنن ...
از جناب hojjatcroos هم تشکر می کنم بابت آموزشی که قرار دادن ...

موفق باشید ...

Mask
سه شنبه 27 بهمن 1388, 16:13 عصر
آره ، فایل ویروسی هستش ( البته به تشخیص Node 32 ) ، نوع ویروس : Win32/Induc Virus
درسته ویروسیه.
این فایل رو ویروسی نشون میده چون دلفی شما آلوده به این ویروس شده و فایلی رو که شما کام می کنید ویروس شناسایی میشه.
به بخش امنیت نرم افزار مراجعه کنید . در مورد حذف این ویروس دوستان راهنمایی کردند.

alinikaein
سه شنبه 27 بهمن 1388, 18:23 عصر
ببخشید شاید بد توضیح دادم Mouse Events فرض کنید فاصله های را در نظر نگیریم MouseEvents متن ما بی معنی میشود

درست، ولي خوب چطوري فاصله‌ي بين كلمات را تشخيص داديد؟

hojjatcroos
سه شنبه 27 بهمن 1388, 18:37 عصر
سوال خوبی پرسیدید ممنون.
ما برای جدا کردن کاراکتر ها ابتدا مختصات چپ و سپس راست یک کاراکتر را به دست می آوریم ولی برای بدست آوردن فاصله کارکتر تا کارکتر بعدی ابتدا مختصات راست و سپس مختصات چپ را به دست می آوریم.
فاصله های میان حرفی 2 یا 3 و فاصله های میان کلمه ای 5 یا 6 یا 7 پیکسل می باشد.برای به دست آوردن فاصله از توابع LeftSpace و RightSpace استفاده کردم.
البته به نظر بنده روش Point Extarction برای نوشتن یک OCR بسیار بهتر از این روش است که البته بنده به دلیل اولین تجربه از این روش صرف نظر کردم

gbg
یک شنبه 17 آبان 1394, 19:37 عصر
مثالش که بدردبخور نبود