شکستن کپچا

تغییرات پروژه از تاریخ 1393/02/06 تا تاریخ 1393/03/05
یکی از معمول‌ترین شکل کپچا به صورت تصویر است. در این نوع کپچا معمولا حروف و اعدادی انگلیسی به شکلی کنار هم قرار می‌گیرند و از کاربر پرسیده می‌شود که بگوید که این حروف و اعداد چیست. معمولا مسئولین این سایت‌ها فکر می‌کنند که ربات‌ها یا برنامه‌های کامپیوتری نمی‌توانند پاسخ این سؤالات را بدهند.

مواقع زیادی هم رخ می‌دهد که این کپچاها به غیر از اعصاب خوردی چیزی برای ما ندارد.

![کپچای گلستان](http://bayanbox.ir/id/4595269189662952626?view)

در این پروژه ما می‌خواهیم که یک افزونه برای مروگر بنویسیم که یک کپچا را بکشند و به صورت خودکار آن را حل نماید.

برای مثال ساده‌تر می‌توانید از کپچای [سامانه آموزش دانشگاه شریف](http://edu.sharif.edu) استفاده کنید.

![کپچای شریف](http://bayanbox.ir/id/7003945522720661269?view)


# مقدمه


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

 بدین منظور برنامهٔ کپچا آزمون‌هایی را تولید می‌کند که:


1. انسان بتواند به راحتی و در طول چند ثانیه به آن پاسخ دهد و دراین زمینه به مشکل برنخورد.
2. کامپیوترهای فعلی ، نباید قادر باشند به چنین سوالاتی پاسخ دهند.

هر کاربری که آنرا درست حل کند، انسان فرض می‌شود

کپچا گاهی «معکوس تست تورینگ» نامیده می‌شود. چون تست تورینگ توسط انسان برگزار می‌شود و هدفش تشخیص ماشین است اما کپچا توسط ماشین برگزار می‌شود و هدفش تشخیص انسان است.


#روش پیشنهادی

1. حذف درهم و برهمی پس زمینه ، به عنوان مثال با فیلتر کردن  رنگها  و تشخیص دادن  خطوط نازک
در ابتدا باید نموداری  از رنگها در تصویر را مشخص کنیم ،این کار با گرفتن تمام پیکسل ها وگروه بندی انها انجام میشود 
مثلا پس زمینه  سفید ،خطوط نویز خاکستری ،متن قرمز خواهد شد

2. تقسیم بندی ، یعنی تقسیم تصویر به قطعات حاوی یک حرف
با پردازش افقی در طول تصویر زوج مرتبی از موقعیتی که هر حرف شروع و تمام شده میتوان به دست اورد
 
3. تشخیص دادن حرف هر بخش
 در حال حاضر مجموعه ای از حروف اماده برای تشخیص داریم ،با به  کارگیری از الگوریتم های شبکه عصبی میتوان حروف را مشخص کرد
در این مرحله  نیاز به اطلاعات جامع و کاملی دارد که در هنگام اموزش  باید تکمیل شده باشد 



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



اما با اثبات این موضوع که تشخیص کاراکتر ها اسیب پذیر هستند ،برخی محققان جایگزین هایی مانند تشخیص تصویر را پیشنهاد داده اند
این محققان تشخیص تصویر را چالش برانگیزتر میدانند زیرا محدود به کاراکتر و رقم در الفبای انگلیسی نیست



#کد پروژه 

+ [کد](https://github.com/mahlarht/capcha)
# کارهای مرتبط


به مدت چند سال ازمون تورینگ نیمه یا همان captcha در اکثرسایت ها با قابلیت اطمینان بالا موجود بود ولی در چندین سال اخیر این ازمون تورینگ شکست پذیر شد  <br/>
در نتیجه در پی این معضل برنامه نویسان به استفاده از audio  روی اوردند 
که در این روش نه به اسانی captcha ولی بازهم قابلیت شکستن دارد 
 شروع این برنامه با خواندن فایل های صوتی شروع میشود .اولین قدم برای شکستن این نوع کپتچا استفاده از چندین تکنولوژی machine learning برای اجرای ASR میباشد <br/>
در این زمینه تکنیک های زیادی وجود دارد.3روش که در این قسمت استفاده میشود : <br/>
(mel-frequency cepstral coefficients (MFCC  <br/>
 (perceptual linear prediction (PLP    <br/>
(relative spectral transform-PLP (RAS TA-PLP    <br/>
 
MFCC : 
یکی از مشهورترین ها در این زمینه میباشد برای تبدیل فایل های صوتی به باند فرکانس میباشد
 <br/>

موفقیت در این زمینه به دو بخش تقسیم میشود : <br/>
Segmentation  , recognition  <br/>
در ابتدا باید audio  را به بخش هایی تقسیم کنیم و پس از ان باید انها را بر اساس سروصدا و یا کلمه طبقه بندی کنیم.(کلمات در این قسمت شامل حرف یا عدد است) <br/>
با استفاده از manual  که برای audio captcha اطلاعاتی درباره مکان هر کلمه که به دست می اوریم و ما قادر به برچسب زدن بخش ها با استفاده از این اطلاعات میشویم . <br/>
تقریبا 100 فایل صوتی از سایت های مختلف برای train استفاده میشود  به بخش های از سر و صدا  ،حروف A -Z، و یا ارقام از  0-9 تقسیم میشوند.



A test audio CAPTCHA with the fixed-size segments containing the  highest energy peaks highlighted       

![کپچای](http://upload7.ir/imgs/2014-04/16482109119345948176.png)




برای recognize کردن حروف و اعداد از الگوریتم های  زیر استفاده میشود : <br/>
  adaBoost <br/>
 support vector machine <br/>
K-nearest neighbor <br/>







#Cage :
Cage نوعی از کپتچا بر اساس کتابخانه جاوا میباشد که سریع ، کوچک و اسان است 
و با هدف ایجاد عکس هایی که برای انسان اسان و برای کامپیوتر غیرقابل حل یا حداقل مشکل باشد  <br/>


![تصویر باز شکاری](http://upload7.ir/imgs/2014-04/80823801800813788035.jpg)

![تصویر باز شکاری](http://upload7.ir/imgs/2014-04/07550130044089999533.jpg)



 <br/>

با استفاده از maven   میتوان سریعا ازاین کپتچا استفاده کرد
در غیراین صورت باید فایل jar   دانلود کرده و کد کپتچا ساخته میشود که به علت سادگی به اسانی نیز میشکند

#NUCaptcha


نسل بعدی کد امنیتی به طور خاصی طراحی شده است که کپتچا به طورمتحرک است و احتمال خطای کامپیوترها بیشترشده است و از طرفی امنیت تصویر بیشترشده است
 <br/>
Nucaptcha با استفاده از شاخص های اندازه گیری برای شناسایی فعالیت های مشکوک ساخته شده است
این نوع کپتچا یا خیلی اسان هستند که با استفاده از ocr قابل حل میباشند
یا به شدت سخت بوده و حتی انسان ها هم قادر به حل ان نمیباشند 
این نوع کپتچا برای استفاده و امنیت بالا طراحی شده است 
 <br/>



#Are you A Human 
سرویس جالبی است که کاربر برای تکمیل فرم باید یک بازی تعاملی را انجام دهد  <br/>
این بازی با کلیک کردن و کشیدن اشیا انجام میشود و مطمئنا از تشخیص حروق کپتچا جالب تر خواهد بود 

![تصوی](http://upload7.ir/imgs/2014-04/08062837479431040082.jpg)
 <br/>
. پروژه Mori G. که به چاپ مقاله ای در* IEEE CVPR'03* منجر شد.در این مقاله یک روش برای شکستن یکی از مشهورترین کپچا ها پرداخته اند و تاحدود 92% موفق به شکست کپچا شده اند:


[ Breaking a Visual CAPTCHA](http://www2.cs.sfu.ca/~mori/research/gimpy/)

. پروژه PWNtcha  نیز پیشرفت زیادی در این زمینه دارد :

[ it stands for “Pretend We’re Not a Turning Computer but a Human Antagonist” ](http://caca.zoy.org/wiki/PWNtcha                       
)

. [Captcha Solver as a Service](http://deathbycaptcha.com/)

.[An Anti-SMS-Spam Using CAPTCHA](http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=4609698&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D4609698)





# آزمایش‌ها 

خوشبختانه بسیاری از کپچا ضعیف هستند و با تمیز کردن ، حذف خطوط درهم و برهم و به کمک OCR های ساده حل شده اند
![captcha](http://webscraping.com/static/img/blog/captcha/original2.png)

با  گذشتن از مرحله اول 

![clean captcha](http://webscraping.com/static/img/blog/captcha/threshold2.png)

اکنون نتایج حاصل را برای استخراج متن به OCR داده میشود
در اینجا از 3 ابزار OCR برای مقایسه استفاده شده :

Tesseract :hirbz

Gocr:_i_bz

Ocrad:hi_bL

چند نمونه دیگر:

![clean captcha1](http://webscraping.com/static/img/blog/captcha/original1.png)


Tesseract :7rrq5

Gocr :7rr95

Ocrad :7rrgs


![clean captcha2](http://webscraping.com/static/img/blog/captcha/original3.png)


Tesseract :izi3b

Gocr :izi3b

Ocrad :iLi3b

در این ازمایش گرفتن نتیجه 100% ملاک نیست زیرا مردم واقعی هم گاهی اشتباه میکنند
در این ازمایش ، Tesseract فقط g با q  اشتباه کرد  و Gocr به  جای g  ,عدد 9 را چاپ کرده بود که قابل درک بود
ولی  Ocrad هیچ جواب درستی نداده است 

#اینده کپچا 
[The Future of CAPTCHA ](http://mollom.com/blog/the-future-of-captchas)
# مراجع

J Yan and A S El Ahmad. “Breaking Visual CAPTCHAs with Naïve Pattern Recognition Algorithms”, in IEEE 
Conference Proc. of the 23rd Annual Computer Security Applications Conference (ACSAC’07) 

K Chellapilla, and P Simard, "Using Machine Learning to Break Visual Human Interaction Proofs (HIPs)," Advances in Neural Information Processing Systems 17, Neural Information Processing Systems (NIPS), MIT Press, 2004.

Akshay Mittal , Ankit Kumar ,Recognising Text from Captcha 

Kumar Chellapilla Patrice Y. Simard “Using Machine Learning to Break Visual 

Mori G,Malik J (2003),"Recognizing Objects in Adversarial Clutter:Breaking a Visual CAPTCHA," proc. of the computer Vision 
and pattern Recognition (CVPR )Conference,IEEE Computer Society, vol.l,June 18-20,2003

Chandavale, A.A., Sapkal, A.M., Jalnekar, R.M.: Algorithm To Break Visual CAPTCHA. In: Second International Conference on Emerging Trends in Engineering and Technology, ICETET 2009 (2009)

Shirali-Shahreza, M. ; Sharif Univ. of Technol., Tehran ; Shirali-Shahreza, S., Question-Based CAPTCHA, Conference on Computational Intelligence and Multimedia Applications 

  Paul Baecher,  Niklas Büscher,  Marc Fischlin,  Benjamin Milde , Breaking reCAPTCHA: A Holistic Approach via Shape Recognition

Haribabu, K. ; Comput. Sci. Group, Birla Inst. of Technol. & Sci., Pilani, India ; Arora, D. ; Kothari, B. ; Hota, C.Detecting Sybils in Peer-to-Peer Overlays Using Neural Networks and CAPTCHAs

# 
#1.مقدمه

کپچا[^1] در تعریفی ساده  سامانهٔ امنیتی و روند ارزیابی است، که بااستفاده از ازمون تورینگ برای جلوگیری از برخی حمله‌های خرابکارانهٔ ربات‌های اینترنتی [^2]به‌کار می‌رود. این روند می‌تواند مشخص کند که مراجعه کننده به یک وب‌گاه و یا سایر خدمات آنلاین انسان است یا کامپیوتر.
لازم به ذکر است که کپچا را گاهی «معکوس تست تورینگ» می نامند، چون تست تورینگ توسط انسان برگزار می‌شود و هدفش تشخیص ماشین است، اما کپچا توسط ماشین برگزار می‌شود و هدفش تشخیص انسان است.
1.1.**تاریخچه کپچا**

کپچا در سال ۲۰۰۰ و در دانشگاه Carneige Mellon توسط Luis von Ahn   و همکارانش ساخته شد و برای اولین بار در سایت Yahoo مورد استفاده قرار گرفت[1].
 یکی از شکل های معمول‌ کپچا به صورت تصویر است. در این نوع کپچا معمولا حروف و اعدادی انگلیسی به شکلی کنار هم قرار می‌گیرند و کاربر باید این حروف و اعداد را تشخیص دهد. معمولا مسئولین این سایت‌ها فکر می‌کنند که ربات‌ها یا برنامه‌های کامپیوتری نمی‌توانند پاسخ این سؤالات را بدهند.
![کپچای گلستان](http://bayanbox.ir/id/4595269189662952626?view)


<div style="direction:rtl">1.2.**کاربرد کپچا**</div>


کپچا کاربردهای زیادی در جهت افزایش امنیت دارد که در ادامه به مهمترین آنها اشاره خواهیم کرد:

<div style="direction:rtl">1.2.1.**جلوگیری از نظرات اسپم در سایت و وبلاگ**</div>



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

<div style="direction:rtl">1.2.3. .**کپچا برای نظرسنجی آنلاین**</div>

در نوامبر ۱۹۹۹ یک نظر سنجی آنلاین در سایت Slashdot.org برای تعیین بهترین دانشگاه در زمینه علوم کامپیوتر و برنامه نویسی برگزار شد. با توجه به نبودن سیستمی مشابه کپچا در آن زمان با تشخیص و ثبت IP نظردهندگان از تکراری بودن افراد جلوگیری میکردند. با این وجود این سیستم قدرت کپچا را نداشته و دانشجویان دانشگاه Carneige Mellon برنامه ای برای ثبت نظر اتوماتیک ساخته و اجرا کردند، روز بعد این دانشگاه با اختلاف زیادی در رتبه اول ایستاد. بلافاصله دانشجویان دانشگاه MIT نیز برنامه مشابهی را راه اندازی کردند و این نظرسنجی در نهایت به جنگ روبات های اینترنتی تبدیل شد. در پایان رای گیری دانشگاه MIT با ۲۱۱۵۶ رای رتبه نخست را بدست آورد و Carneige Mellon با ۲۱۰۳۲ رای در رتبه دوم ایستاد، در حالیکه سایر دانشگاه ها هرکدام کمتر 
از ۱۰۰۰ رای داشتند. امروزه برگزاری نظرسنجی عمومی در اینترنت بدون استفاده از کپچا کاری بیهوده و اشتباه است.


<div style="direction:rtl">1.2.4. **جلوگیری از هک پسورد**</div>

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

<div style="direction:rtl">1.3. **هدف**</div>

بدین منظور کپچا آزمون‌هایی را تولید می‌کند که:

1. انسان بتواند در طول چند ثانیه به آن پاسخ دهد و دراین زمینه به مشکل برنخورد.
2. کامپیوترهای فعلی ، نباید توانایی پاسخ  به چنین سوالاتی را داشته باشند.

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

  

#2.چکیده 
در پروژه شکستن کپچادر ابتدا  با استفاده از کتابخانه اپن‌سی‌وی و شبکه‌های عصبی چند روش متداول در  پردازش تصویر را مختصرا توضیح داده و 
در گزارشی دو روش شبکه های عصبی [^4]و تشخیص بردار فضایی در تصویر [^5]  برای شکستن کپچا راجداگانه  با زبان برنامه نویسی پایتون   پیاده سازی کرده و با نوشتن افزونه ای برای مرورگر نتایج را از نظرزمان بندی و دقت بررسی میکنیم [2, 3, 7].


در این پروژه از  [سامانه آموزش دانشگاه شریف](http://edu.sharif.edu) استفاده می کنیم .که صرفاشامل  اعداد با رنگ های مختلف است و در اینده با گسترش پایگاه داده سعی در شکستن کپچا های مختلف را داریم .
![کپچای شریف](http://bayanbox.ir/id/7003945522720661269?view)




#3.کارهای مرتبط
در قسمت کارهای مرتبط در ابتدا پروژه هایی مشابه کپچا با کاربردهای مختلف معرفی میشود و در قسمت دوم به معرفی چند روش برای پیاده سازی میپردازیم.



<div style="direction:rtl"> 3.1.** پروژه های مرتبط با کپچا **</div>

<div style="direction:rtl">3.1.1. **ReCAPTCHA**</div>

دانشگاه کارنگی ملون که تحقیقات زیادی در زمینه کپچا دارد، می‌خواست واژه کپچا را به نام خود به ثبت برساند که این اقدام مورد پذیرش واقع نشد، به همین دلیل 
آن‌ها از واژه یِ ریکپچا برای اقدامات خود استفاده نمودند.
 یک سرویس رایگان است که بیشتر در زمینه کتاب ها و روزنامه های دیجیتال مورد استفاده قرار میگیرد. reCAPTCHA فرایند کاری خود را با ارسال تصاویری غیر قابل تشخیص توسط رایانه و برای شناسایی انسان انجام می دهد. جالب است بدانید که این کامپوننت از تصاویری که توسط 
سیستم های OCR ، غیر قابل شناسایی تشخیص داده شده است بعنوان تصاویر کپچا استفاده می نماید.

![کپچا](http://s27.postimg.org/b6iuu664j/recaptcha.gif)


<div style="direction:rtl">3.1.2. **کپچای صوتی[^3]**</div>

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

کپچاهای صوتی نیز چندان ضد ضربه نیستند. در بهار سال 2008، گزارشهایی منتشر شدند که نشان می دادند هکرها شیوه ای را برای سیستم کپچاصوتی، شما باید یک کتابخانه از اصوات را ایجاد کنید که هر کاراکتر در بانک اطلاعاتی کپچا را مجدداً بیان می کنند. توجه داشته باشید که بر حسب میزان تحریف، ممکن است اصوات متعددی برای یک کاراکتر واحد وجود داشته باشد
شروع این برنامه با خواندن فایل های صوتی شروع میشود و سپس جمع آوری 1000 کپچا از انواع مختلف و استفاده از انها برای آموزش و تست. 


اولین قدم برای شکستن این نوع کپتچا استفاده از چندین تکنولوژی machine learning برای اجرای ASR میباشد[5].
در این زمینه تکنیک های زیادی وجود دارد، 3روش که در این قسمت استفاده میشود:
1.  MFCC    [^7]
2. PLP [^8]
3. RAS TA-PLP [^9]


پس از طبقه بندی هر صدا، Spammer از نرم افزارهای مختلف تشخیص گفتار برای تفسیر CAPTCHAصوتی استفاده می کند.
موفقیت در این زمینه به دو بخش تقسیم میشود:
1. تقسیم بندی[^10]:
در ابتدا باید audio  را به بخش هایی تقسیم کنیم و پس از ان باید انها را بر اساس سروصدا و یا کلمه طبقه بندی کنیم.(کلمات در این قسمت شامل حرف یا عدد است.
2. شناخت[^11]: 
برای recognize کردن حروف و اعداد نیز از الگوریتم های adaBoost, support vector machine, K-nearest neighbor  استفاده میشود.
 



<div style="direction:rtl">3.1.3. **Are you A Human**</div>


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

![تشخیص انسان از رباط](http://s8.postimg.org/4ch96mog5/aliens.png)


<div style="direction:rtl">3.1.4 .**کپچا به زبان فارسی[^6] **</div>

کپچافا اساسا مبتنی‌ بر روش ارائه شده در کپچا می‌باشد، لیکن متناسب با محیط کاربر فارسی زبان طراحی شده و از همین روی است که آنرا کپچافا یا همان کپچای فارسی نام نهاده ایم. کپچا ‌ها شامل لغات یا عبارات لاتین میباشند در حالیکه کپچافا ‌ها از لغات و عبارات فارسی استفاده میکنند.
چرا کپچافا ؟
به دو دلیل عمده، بر این باوریم که استفاده از کپچافا برای شما سودمند است. اول، تکنولوژی بازشناسی خودکار متون برای زبان لاتین بسیار پیشرفته است به صورتی که هم اکنون ربات‌های اینترنتی ای‌ وجود دارند که بر اساس الگوریتم‌های پردازش تصویر و شناسایی الگو میتوانند بسیاری از کپچا‌ها را تشخیص دهند. نمونه‌هایی از عملکرد این ربات‌ها را می‌توان روزانه در بخش نظرات سایت‌های پر مخاطب و قدرتمندی‌ همچون یاهو نیز مشاهده کرد. این در حالیست که علاوه بر ساختار زبان و لغات فارسی که امکان ایجاد کپچافا ‌های پیچیده تری را نسبت به زبان لاتین ایجاد می‌کند، تکنولوژی بازشناسی خودکار متون نیز در بستر زبان فارسی بسیار ضعیف و نوپا می باشد. دوم، این سرویس کاملا رایگان بوده و شما میتوانید بدون اینکه هیچ هزینه ای پرداخت نمایید سایت، وبلاگ و یا پورتال خود را ایمن سازید. 
 تیم کپچافا معتقد است که با توجه به ساختار زبان فارسی، حروف برای اینکه یک لغت را تشکیل دهند باید به همدیگر چسبیده باشند و این پتانسیل منجر به تاثیر گذاری تغییر شکل حروف به روی حروف همسایه می‌شود. ویژگی‌ که اجازه می‌دهد تا با ایجاد میزان اندک کجی ها، کپچافا همچنان در مقابل OCR‌ها از امنیتی بسیار بالایی برخوردار باشد. توجه به این نکته می‌تواند ارزشمند باشد که در زبان لاتین حروف از همدیگر جدا نوشته می‌شوند و این واقعیت بستری است که در آن با استفاده از الگوریتم‌های جدا سازی اشیا در تصویر می‌توان به راحتی‌ حروف را از هم جدا کرده و سپس به وسیله الگوریتم‌هایی مانند محاسبه حداقل تغییر بر اساس شکل اشیا آنها را تشخیص داد. همانطور که اشاره شد، از آنجایی که‌در زبان فارسی حروف به یکدیگر متصل هستند، تشخیص مرز میان آنها توسط ابزارهای OCR، مخصوصا در حالتی‌ که تغییر شکل رخ داده باشد کار بسیار بسیار دشواری است.در واقع خواندن کپچافا برای کاربران ایرانی ساده و برای ابزارهای ضدامنیتی بسیار مشکل است. ، در حال حاضر این محصول می‌تواند به وب سایت‌هایی که با زبان پی اچ پی، هاست شده‌اند خدمت بدهد.




![کپچافا](http://www.fenjon.com/wp-content/uploads/2013/01/fenjon00021.jpg)


<div style="direction:rtl">3.1.5. **NUCaptcha**</div>



نسل بعدی کد امنیتی به طور خاصی طراحی شده است که کپتچا به طورمتحرک است و احتمال خطای کامپیوترها بیشترشده است و از طرفی امنیت تصویر بیشترشده است.Nucaptcha با استفاده از شاخص های اندازه گیری برای شناسایی فعالیت های مشکوک ساخته شده است، این نوع کپتچا یا خیلی اسان هستند که با استفاده از ocr قابل حل میباشند یا به شدت سخت بوده و حتی انسان ها هم قادر به حل ان نمیباشند. این نوع کپتچا برای  موارد با امنیت بالا طراحی شده است.


<div style="direction:rtl">3.2. **روش های موجود**</div>



شکستن کپچا از چندمرحله اساسی تشکیل شده است که برای هر مرحله روش های مختلفی وجود دارد 
مرحله اول:
در این مرحله عکس ابتدا باید به عنوان ورودی داده شود.در زبان پایتون بهترین کار پارس کردن صفحه وب با استفاده از urlib2 .

******************

مرحله دوم :
در این مرحله باید در عکس کپچای دریافتی  
تمام نویزها ، خطوط اضافی باید برداشته شوند
برای انجام این عملیات که به smoothing معروف است یک فیلتر به تصویر اعمال میکنیم
رایج ترین نوع فیلتر ،خطی می باشد، که در آن مقدار پیکسل خروجی را (به عنوان مثال(g(I,j)) به عنوان  مجموع وزنی  از مقدار پیکسل ورودی (به عنوان مثال تابع $$(f (i+ k، j+l)$$) تعیین می شود: 
![دوم]( http://s22.postimg.org/tcvjqe1gh/9cd8c71e942b77e7f274ca1354118e9d3bfbad50.png)


(h(k,lضرایب فیلتر را مشخص میکند و KERNEL نامیده میشود.


انواع فیلتر:
1. Homogeneous filter
2. Gaussian Filter
3. Median filter
4. Bilateral Filter

******************


مرحله سوم :
 وعکس باید به باینری تبدیل شود 
برای تکه تکه کردن عکس به حروف یا اعداد در این مرحله روش 

انواع Thresholding:

1. Threshold Binary
2. Threshold Binary, Inverted
3. Threshold to Zero
4. Threshold to Zero, Inverted
5. Global Thresholding
6. Adaptive Gaussian Thresholding
7. Adaptive Mean Thresholding


با ازمایش این 7 روش، بهترین راه برای کپچا استفاده از  TRUNC ,TOZERO و Adaptive Gaussian Thresholding میباشد.


![سوم](http://s27.postimg.org/vvje5b7qb/figure_1.png)
![سوم2](http://s15.postimg.org/nz0avamaj/figure_2.png)

مرحله چهارم:
در این مرحله از سمت چپ شروع به پردازش میکندو به اصطلاح عکس را تکه تکه[^10] میکند.
در این مرحله میتوان ازopencv   یا cvblubاستفاده کرد 
با توجه به اینکه در کپچا نویز زیادی وجود دارد ودر هنگام تکه تکه کردن عکس مشکلاتی نظیر شامل نصف شدن یک حرف یا نمایش دوحرف در کنار هم میباشد
از opencv که دارای دقت بیشتری است استفاده میکنیم.



مرحله پنجم: 

در این مرحله عکس پردازش شده و قطعه قطعه شده مرحله قبل
به بردار تبدیل شده و شبکه عصبی این بردار را  با تصاویر دوره ی اموزشی تطابق داده  
و از طریق الگوریتم های تقریب و درون یابی مشخص میشود که به کدام تصویر از مجموعه تصاویر زمان اموزش شبیه تر است  
برای recognition  روش های مختلف وجود دارد :
1. ABBYY OCR
2. Gocr
3. Ocrad
4. Tesseract OCR
 در این قسمت با توجه به جدول زیر بهترین روش استفاده از tesseract میباشد(مقاله )

 

![پنجم](http://s27.postimg.org/gnycnu9k3/Untitled.png)




مرحله train :
 در این مرحله  ابتدا عکس هایی که برای آموزش سیستم هستند ، پردازش شده و به شبکه عصبی داده میشوند
با استفاده از الگوریتم های مختلف داده ها اموزش داده می شوند.
1. svm[^12]: 
در الگوریتم SVM از (Histogram of Oriented Gradients (HOG به عنوان بردار مشخصات استفاده می شود.
2. Knn[^13]:
الگوریتمknn ما مستقیما از پیکسل ها به عنوان بردار مشخصات استفاده می شود.

در این مرحله اگر پایگاه داده کامل باشد، خطا کاهش میابد.



#4.روش پیشنهادی

در این قسمت به شرح  روش پیشنهادی بر روی عکس زیر میپردازیم:

![کپچا](http://s21.postimg.org/ey37rqpyb/captcha.gif)


 چگونگی شناسایی متن در تصاویر :
روش های زیادی  برای شناسایی وجود دارد که عبارتند از: استفاده از فیلترهای تصویری، فیلترهای تشخیص لبه ، تشخیص الگو، استخراج رنگ و غیره.

چون کپچا دارای حروف کج است پس از هیستگرام رنگ های این عکس استفاده میکنیم 
الگوریتم که از ان استفاده میکینم به الگوریتم multivalued image decomposition معروف است
اساسا  به معنای این است که ما در ابتدا یک هیستوگرام از رنگ هارا  در تصویر میسازیم و بر اساس انها گروه بندی   میکنیم .
در این مثال پس زمینه ( سفید ) ،خطوط سر و صدا ( خاکستری ) ، متن ( قرمز).است
در ابتدا بعد از بازکردن عکس ان را بهGIF  تبدیل کرده (زیرا این فرمت با 255 رنگ مراحل کار را اسانتر میکند)
در زیر هیستوگرام (histogram) رنگ های  عکس را چاپ میشود:
![کپچا](http://s11.postimg.org/97fiv6n83/histogram.png)


این تصویر نشان دهنده تعداد پیکسل هر یک از 255 رنگ در تصویر است . شما می توانید ببینید که رنگ سفید  بیشترین  تعداد پیکسل را دارد و رنگ قرمز که نشان دهنده متن تصویر است  در حدود 200 است 
میتوانیم لیستی از 10 رنگ متداول در تصویر ایجاد کنیم، که ستون اول شماره رنگ است و ستون دوم تعداد پیکسل در تصویر رنگ است.
![کپچا](http://s27.postimg.org/w7gu15dgv/value.png)


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

| ورودی                                                                                                     | خروجی                                                                                                                   | 
|:-----------------------------------------------|:-----------------------------------------------------:|
| ![کپچا](http://s27.postimg.org/dpq9m4zu7/captcha.gif)     |              ![خروجی](http://s27.postimg.org/gvavccigf/output.gif)           | 


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

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

for each binary image:
         for each pixel in the binary image:
    if the pixel is on:
      if any pixel we have seen before is next to it:
        add to the same set
      else:
        add to a new set
همچنین با برش افقی از تصویر ما می توانیم مشخص کنیم  که هر تصویر از کجا  شروع میشود و تا کجا ادامه دارد  و پس از استخراج آنها  به تصاویر جداگانه، ما مجموعه از حروف و اعداد برای شناخت  داریم .
خروجی این مثال در این مرحله :
    

[(6, 14), (15, 25), (27, 35), (37, 46), (48, 56), (57, 67)]

این خروجی نشان دهنده نقطه اغازی و پایانی هر حرف یا عدد میباشد.




این روش از چند نظر انتخاب بهتری نسبت به روش های دیگر است:
1. 	نیاز به اموزش گسترده ندارند .
2. 	نمیتوانندovertrained  شوند.
3. 	شما میتوانید اطلاعات نادرست را اضافه یا حذف کنید و نتایج ان را مشاهده کنید.
4. 	به راحتی قابل درک هستند.
5. 	نتایج به صورت درجه بندی ارائه میدهند پس میزان شباهت مشخص میشود..
6.	 وقتی توانایی تشخیص بعضی از کاراکتر ها را ندارد، به اسانی  خودتان میتوانید ان را اضافه کرده حتی اگر قبلا شبیه ان را ندیده باشد





سپس  بردار فضایی برای تشخیص تصاویر را میسازیم[10].
در این کد دو ورودی  از جنس دیکشنری پایتون  میگیرد که با شماره 0 و 1 ارتباط انها را مشخص میکند، 0 به معنی عدم ارتباط و 1 به معنی یکسان بودن انهاست.

 








#5.آزمایش‌ها 
خوشبختانه بسیاری از کپچا ضعیف هستند و با تمیز کردن ، حذف خطوط درهم و برهم و به کمک OCR های ساده حل شده اند
![captcha](http://webscraping.com/static/img/blog/captcha/original2.png)

با  گذشتن از مرحله اول 

![clean captcha](http://webscraping.com/static/img/blog/captcha/threshold2.png)

اکنون نتایج حاصل را برای استخراج متن به OCR داده میشود
در اینجا از 3 ابزار OCR برای مقایسه استفاده شده :

Tesseract :hirbz

Gocr:_i_bz

Ocrad:hi_bL

چند نمونه دیگر:

![clean captcha1](http://webscraping.com/static/img/blog/captcha/original1.png)


Tesseract :7rrq5

Gocr :7rr95

Ocrad :7rrgs


![clean captcha2](http://webscraping.com/static/img/blog/captcha/original3.png)


Tesseract :izi3b

Gocr :izi3b

Ocrad :iLi3b

در این ازمایش گرفتن نتیجه 100% ملاک نیست زیرا مردم واقعی هم گاهی اشتباه میکنند
در این ازمایش ، Tesseract فقط g با q  اشتباه کرد  و Gocr به  جای g  ,عدد 9 را چاپ کرده بود که قابل درک بود
ولی  Ocrad هیچ جواب درستی نداده است 
******************
دراین فاز پروژه بر روی عکس های مختلف ازمایشاتی انجام داده که  نتایج ان در زیر اماده است.این نتایج بر اساس جدا کردن عکس ها بر اساس هیستگرام انها میباشد.

برای عکس هایی با فرمت زیر قابلیت تشخیص 100% را دارد.
 ![کپچا](http://s29.postimg.org/pdz0oie43/test1.png)
******************
پایگاه داده اصلی شامل 56 عکس با  فرمت و رنگ مشابه عکس بوده اند که نتایج زیر حاصل شده است.
![کپچا](http://s21.postimg.org/ey37rqpyb/captcha.gif)

Correct Guesses -  20.0
Wrong Guesses - 56.0
Percentage Correct -  35.7142857142
Percentage Wrong -  64.2857142857

در این ازمایش ها بیشتر خطا ها از 0 و o ناشی میشود و البته حروف h , k , c,  p نیز به دلیل کمبود داده برای اموزش در بعضی موارد دچار خطا میشوند.که در فاز بعدی با افزایش corpus این مشکلات حل خواهند شد.
******************
 ![کپچا1](http://postimg.org/image/qz2egd145/)
قابلیت تشخیص این عکس  و عکس های مشابه با این میزان سختی را ندارد و گاهی فقط بعضی از حروف را تشخیص میدهد.
******************
عکس زیر کپچای دانشگاه شریف بوده است که به دلیل مرتب بودن و نداشتن خطوط زاید با تابع ocr ذکر شده نیز قابل حل میباشد.
 ![کپچا](http://s18.postimg.org/i0ggxp4o5/jcaptcha_1.jpg     )
       
#6.کد پروژه 

+ [کد](https://github.com/mahlarht/breaking-captcha)



#7.اینده کپچا 
[The Future of CAPTCHA ](http://mollom.com/blog/the-future-of-captchas)
#8.کارهای اینده 
مرحله اول در شکستن کپچا به طور معمول بسیار اسان بوده و به طور خودکار انجام میشود 
ولی در مرحله جداکردن حروف هنوزم انسان بهتر است زیرا اگر درهمریختگی های پس زمینه متشکل ازاشکال متشابه باحروف باشند، این اشکال وحروف توسط این درهم و برهمی متصل شده  یا گاهی به اشتباه  در هر تصویر 2 حرف تقسیم بندی می شود.
از این رو برای بهبود عملکرد  باید بر این بخش تمرکز کرد.

#8.مراجع


1. Engber, Daniel (January 17, 2014). "Who Made That Captcha?". nytimes.com. NYT. Retrieved 17 January 2014

2. Basic Vector Space Search Engine Theory. LA 2600 – January 2, 2004 - presented by Vidiot.

3. Scott A. Clayton. Breaking the Cryptographp, January 2010.   

4. Jeffrey P. Bigham and Anna C. Cavende .Department of Computer Science and Engineering DUB Group University of Washington.

5. Jennifer Tam, Jiri Simsa, David Huggins-Daines, Luis von Ahn, and Manuel Blum.  Improving Audio CAPTCHAs , Computer Science Department, Carnegie Mellon University 
5000 Forbes Avenue, Pittsburgh, PA 15213.  
6. Jennifer Tam, Sean Hyde, Jiri Simsa, Luis Von Ahn. Computer Science Department ,Carnegie Mellon 5000 Forbes Ave, Pittsburgh 15217 University.

7. Jeff Yan, Ahmad Salah El Ahmad, Breaking Visual CAPTCHAs with Naïve Pattern Recognition Algorithms, School of Computing Science, Newcastle University, UK.
8. N. Suguna and Dr. K. Thanushkod, An Improved k-Nearest Neighbor Classification Using 
Genetic Algorithm.
9. Albert Parra Pozo,SPANISH-ENGLISH TEXT RECOGNITION, TRANSLATION AND
INTERPRETATION OF MENUS AND DOCUMENTS.
10. C. Cortes and V. Vapnik. Support-vector networks.Machine
learning.


#9.پیوندهای مفید

+ [Nucaptcha](http://www.nucaptcha.com/)

+ [Vicarious](http://vimeo.com/77431982)

+ [video  ](https://developers.google.com/recaptcha/)

+ [کتابخانه اپن‌سی‌وی](http://opencv.org)
+ [اپن‌سی‌وی در پایتون](http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html)
+ [بینایی کامپیوتری در جاوا اسکریپت](http://inspirit.github.io/jsfeat/)
+ [شبکه‌های عصبی در جاوا اسکریپت](https://github.com/harthur/brain)
+ [شبکه‌های عصبی کانلوشنال در جاوا اسکریپت](https://github.com/karpathy/convnetjs)
+ [یک منبع خوب](http://stackoverflow.com/questions/9413216/simple-digit-recognition-ocr-in-opencv-python)
+ [پیاده‌سازی svm در جاوا اسکریپت](https://github.com/karpathy/svmjs)
+ [k-NN](http://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm)
+ [پایگاه داده نمونه](http://www.cs.cmu.edu/~guestrin/Class/10701/projects.html#image)
+ [آشنایی با سرویس ایرانی کپچافا](http://www.captchafa.net/)
+ [نمونه کد کپچافا](https://github.com/mhehm/captchafa)

[^1]: Completely Automated Public Turing test to tell Computers and Humans Apart
[^2]:  Internet Bot
[^3]: Audio captcha
[^4]: Neural Network
[^5]: Vector Space Image Recognition 
[^6]: captchafa
[^7]: mel-frequency cepstral coefficients
[^8]: perceptual linear prediction
[^9]: relative spectral transform-PLP
[^10]: Segmentation
[^11]: recognition
[^12]: Support Vector Machine  
[^13]: K-Nearest Neighbour