دوست عزيز دقيقاً همين کارو ميگن OCR
، يعنی تبديل کردن پيکسل های يک تصوير به فونت البته OCR خيلی کارايی داره و اين يک نمونه کوچيکشه فقط.
و اما جواب آقا وحيد واسه اين کار توی سيستم OCR از روش Fuzzy Logicاستفاده ميشه ، اين روش اين امکان رو به برنامه ميده که بتونه هر فونتی رو حتی فونت های غير استاندارد رو هم شناسايی کنه :wink:
در ضمن دوست عزيز اطلاعات مربوط به فونت تا زمانی قابل شناسايی هستن که به صورت ASCII ثبت شده باشن ولی وقتی که تبديل به تصوير بشه ديگه هيچ اطلاعاتی قابل دسترسی نيست به جز پيکسل های تصوير :wink:
من يه مقاله نوشتم درباره OCRو اگه وقت بشه به زودی ميزارم تو سايت , توی مقاله مراحل کار OCR رو کامل توضيح دادم فکر ميکنم جواب سؤال هات رو بتونی ازش بگيری
موفق باشيد
منتظر مقالت هستم آقا پوريا. مبحث خيلي خوبي رو هم انتخاب كردي.
آقاي PouriaAmid شما مثل اينكه يا بحث رو درست متوجه نشدين يا نمي دونين OCR چيه
1 OCR يا پردازش تصوير صرفا تبديل تصوير به متن نيست بلكه مي تونه شامل تشخيص چهره يا تشخيص تصوير اثر انگشت و... باشد
2 منطق فازي يكي از روش هاي پياده سازي و ميشه بسته به نياز از هر يك از ديگر روش هاي هوش مصنوعي استفاده كرد مثلا در تشخيص اثر انگشت تصوير را آنقدر حول نقاط مختلف گردش ميدهيم (البته با الگوريتم هاي خاص كه پيچيدگي رو كم مي كنه وتعدادي از جواب هاي غير ممكن رو پيش ا پيش حذف ميكنه) تا به جواب برسيم . اگر الگوريتم مورد نظر را برپايه پايگاه معرفت و يادگيرنده طراحي (كه اگه بشه چي ميشه) كار رو به نهايت خودش رسونديم
3 بعد هم قراره ما روي يك جايي از صفحه كليك كنيم واگر در اون قسمت متني وجود داشت آن كلمه را به ما برگرداند .من نمي دونم اين چه ربطي به OCR داره . اگر هم منظور تون پردازش تصويري است كه شما روي مونيتور مي بينيد , بايد بگم كه اين ها از ديد سيستم عامل يك سري اشيا هستند نه يك عكس پس شما مي تونيد خيلي راحت تر اشيا موجد درميز كار سيستم عامل رو پردازش كنيد شما فقط زماني با OCR سر وكار داريد كه با يك فايل تصويري (چه بر روي حافظه ثانويه وچه زماني كه در حافظه بار شده) سر و كار داشته باشيد
4 يه تستي هم ميشه كرد كه بهتر روش كار babylon روتشخيص بديم . ي فونت بايد بسازيم كه تمام كاراكتر هاش به شكل مربع باشند و با اون بنويسيد و با babylon روي نوشت تون كليك كنيد
بعد اگه جواب داد يعني هميشه از OCR استفاده نمي كنه از فونت هاي مخصوص علاىم استفاده نكنيد چون كدهاي هون ها فرق مي كنه
5 به نرم افزار نارسيس هم (نسخه 3.05) ي نگاهي بكنيد روش كار اون هم جالبه
بحث داره جالب مي شه
هر دو دارين درست مي گين
البته من قبلا هم گفتم babylon فقط در موارد خيلي كمي مثلا وقتي روي عكس كليك مي كننين از text Recognition استفاده مي كنه كه خطا هم در اين روش زياده حد اقل يكي از حروف رو اشتباه تشخيص مي ده
نقل قول: فونت بايد بسازيم كه تمام كاراكتر هاش به شكل مربع باشند
روش جالبيه :)
Fuzzy Logic و neural network و الگوريتم ژنتيك و ... هيچ كدوم به پاي روش هاي آماري نمي رسند اين تكنيك ها هر كدوم حسن هايي دارن و لي اگر فقط دقت نياز داريد روش هاي آماري هميشه بهترين جواب رو ميدن ولي كندن (البته فقط براي اين كار دو باره يكي نياد بگه مثلا كار هايي كه با فازي مي شه كرد رو همش رو با روش هاي آماري نمي شه انجام داد ها )
من پيش نهاد مي كنم (براي n امين بار ) بيايد يه چنين كاري بكنيم يه نفري نمي شه كار خوبي از آب در آورد وگرنه من تا حالا 10 تا شو نوشته بودم
اول از همه بگم بچه هاي اينجا هرچي رو كه علمشو داشتن تو سايت گذاشتن تا همه بچه هاي ايروني از دانش اونها هم بتونن استفاده كنند.
خوب تو كه علم هك رو داري ميتوني مثل همينا بيايي و اقدام به آموزش چيزايي كه ميدوني بكني.
علم و دانش تو وقتي بدرد ميخوره كه بيايي و به ديگران آموزشش رو بدي.
بچه هاي اينجا علم يه چيزي رو دارند كه شايد خيلي ها نداشته باشن و اون اينه
همه چيز رو همگان ميدونن .
راستي اين حقيقت داره ؟
http://www.zone-h.org/en/defacements/mirror/id=2421657/
ي چيز رو يادم رفت بگم ما براي پياده سازي منطق فازي نياز به يك سخت افزاري داريم كه بر اساس همين منطق و تفكر ساخته شده باشه (البته ژاپني ها ادعا مي كنن كه رايانه اي بر اساس اين منطق ساختن) و ما در اي كامپيوتر هاي دودويي اصلا دسترسي به منطق فازي نداريم و فقط مي تونيم اون رو شبيه سازي كنيم
کد:
البته ژاپني ها ادعا مي كنن كه رايانه اي بر اساس اين منطق ساختن
ادعا نمي كنن چون خيلي وقته ساختن پياده سازيش هم خيلي مشكل نيست در واقع يه تركيبي از آنالوگ و ديجيتال با چند تا ترانزيستور مي شه ساختش (اين چند هر عددي مي تونه باشه
)
نقل قول: من Defacer هستم...
اگه راست مي گي چند تا باگ خودت از يه سيستم عامل پيدا كن
فرض كنيم خيلي آدم هكري باشي هميشه هم چند تا Exploit كه 0day هم باشند داري اين يعني استفاده كردن از دانش ديگران تو ماهي گرفتن بلد نيستي فقط چند تا ماهي از اين و اون گرفتي حالا مي توني اسم خودت رو ماهي گير بزاري :arrow: :?:
حالا يه فرض ديگه فرض كنيم دانش تو از من بيشتر ميتوني سايت منو Deface كني خيلي هم دوست داري اين كار رو بكني من هم هيچ كاري نمكي تونم بكنم خوب حالا فرض كن من هم زورم از تو بيشتر مي تونم صورتتو Deface كنم خيلي هم دوست دارم اين كار رو بكنم پس از فردا راه بيفتم تو خيابون دستم به هر كي رسيد بگيرم داغونش كنم نه؟
با سلام
آقای نفر بیستم جهان
من فرض را براین می گذارم که شما راست میگی حتماً راست میگی.لطف کن این کمپاننتهای گرون قیمت را برای بر و بچ ایران هک کن و بذار همه از علم سرشار شما استفاده کنند.
با اجازه اساتید محترم
همونطور که دوستان هم اشاره کردن Babylon برای تشخیص متن از دو راه Ocr و API استفاده می کنه. البته اگه دوستان خوبم دقت کنن Babylon با اینکه فقط توانایی OCR متن های انگلیسی رو داره اما با کلیک بر روی متن فارسی یک آبجکت اون متن بدون هیچ اشتباهی داخل برنامه لود می شه! پس به طور حتم برای آبجکتهای ویندوز از توابع API استفاده شده که اگه شما هم بخواین می تونید از این توابع برای تشخیص متن استفاده کنید
من یه سری از این توابع رو که مربوط به فایل GDI32.dll می شه رو گذاشتم و اگه عمری باقی باشه سعی دارم یه مقاله یا حداقل یه برنامه کوچک هم بنویسم تا دوستان بیشتر با این موضوع آشنا بشن.
کد:
function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;
external 'gdi32.dll' name 'SelectObject' index 463;
function TranslateCharsetInfo(var lpSrc: DWORD; var lpCs: TCharsetInfo; dwFlags: DWORD): BOOL; stdcall;
external 'gdi32.dll' name 'TranslateCharsetInfo' index 527;
function GetTextMetrics(DC: HDC; var TM: TTextMetricA): BOOL; stdcall;
external 'gdi32.dll' name 'GetTextMetricsA' index 383;
function GetTextFace(DC: HDC; Count: Integer; Buffer: PAnsiChar): Integer; stdcall;
external 'gdi32.dll' name 'GetTextFaceA' index 380;
function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;
external 'gdi32.dll' name 'GetDeviceCaps' index 302;
function GetStockObject(Index: Integer): HGDIOBJ; stdcall;
external 'gdi32.dll' name 'GetStockObject' index 360;
function GetTextExtentPoint32(DC: HDC; Str: PAnsiChar; Count: Integer; var Size: TSize): BOOL; stdcall;
external 'gdi32.dll' name 'GetTextExtentPoint32A' index 375;
function GetCharacterPlacement(DC: HDC; p2: PAnsiChar; p3, p4: BOOL; var p5: TGCPResults; p6: DWORD): DWORD;
stdcall; external 'gdi32.dll' name 'GetCharacterPlacementA' index 289;
function GetFontData(DC: HDC; p2, p3: DWORD; p4: Pointer; p5: DWORD): DWORD; stdcall;
external 'gdi32.dll' name 'GetFontData' index 316;
function GetTextCharset(hdc: HDC): Integer; stdcall; external 'gdi32.dll' name 'GetTextCharset' index 368;
البته توابعی که Babylon از اونها استفاده می کنه خیلی تو در تو و پیچیده است و در حدود 30 تابع از توابع GDI32 رو استفاده می کنه ولی بیس کار همون تشخیص آبجکتها و متن اونهاست
کد:
function TranslateCharsetInfo(var lpSrc: DWORD; var lpCs: TCharsetInfo; dwFlags: DWORD): BOOL; stdcall;
external 'gdi32.dll' name 'TranslateCharsetInfo' index 527;
و بقیه توابع بیشتر برای ظرافت کار و جلوگیری از اشتباهات برنامه هست که برای اطلاعات بیشتر می تونید یه نیم نگاهی به سورس برنامه بندازید.
اما در مورد OCR برنامه : گرچه Babylon توانایی تشخیص متن رو حتی در فایل های گرافیکی هم داره اما باید بدونید که OCR اون در مقایسه با برنامه های OCR حرفه ایی حرف زیادی برای گفتن نداره . برای نمونه در حالی که Babylon در OCR و تشخیص متنی که در Paint ویندوز تایپ کرده اید با مشکل مواجه می شه اما برنامه های حرفه ایی مثل OMNI page حتی قادر به تبدیل متن دست نویس هم هستند و قدرت و توانایی اونها اصلا قابل مقایسه با Babylon نیست.
در هر صورت OCR تکنیکی برای تشخیص و تبدیل گرافیک به متن هست که هنوز جا برای پیشرفت زیاد داره و تقریبا هر برنامه ای تکنیکی خاص برای انجام این کار داره که مثل سورس ویندوز محرمانه و منحصر به فرد هست ولی روش کار تقریبا در همه اونها یکسان هست.
یعنی اول عکس رو به یه عکس Mono color یا سیاه و سفید تبدیل می کنن و بعد در یه رنج خاصی از اندازه فونت ( اندازه حروف ) به دنبال خطوطی با اندازه ها و زاویه های خاص می گردن و سپس اونها رو با حروف و اطلاعات بانک اطلاعاتی که برنامه داره مقایسه می کنن، چنانچه در این مرحله یک کاراکتر با دقت بالا شناسایی بشه که هیچ وگرنه کار شناخت اون کاراکتر به دامنه ای از حروف که شباهت بیشتری با اون دارن محدود می شه و سپس با کنار هم گذاشتن حروف شناسایی شده ایی که تشکیل یک کلمه رو می دن با استفاده از فرهنگ لغات رای به کلمه معنا دار داده خواهد شد.
یعنی اگه در یک کلمه 5 حرفی 3 حرف از اون به طور قطعی و 2 حرف دیگه به طور نسبی شناسایی شدن، برنامه با استفاده از فرهنگ لغات حروف مربوط به کلمه معنا دار رو جایگزین 2 حرف باقی مونده می کنه که البته کار به همین آسونی ها نیست ولی خوب نشدنی هم نیست.
یا حق