سلام دوستان چند روز پیش من به به طور اتفاقی به این پست از سایت باگکراود برخوردم که اتفاقاً هوشمند عزیز هم اینجا دربارهاش نوشته؛ برای همین تصمیم گرفتم برای اولین بار من هم این کار رو انجام بدم و به قول دوستان کپچا رو بایپس کنم و یا دور بزنم برای همین بعد از تلاشهای زیاد و جستجو بلأخره تونستم این کارو انجام بدم که گفتم این آموزش رو اینجا قرار بدم تا شاید بدرد برخی از دوستان بخوره. برای این کار ما به کتابخونهٔ tesseract و ماجولهای pytesser و PIL نیاز داریم، کتابخونهی tesseract رو میتونید با از ریپازیتوری به صورت زیر نصب کنید:sudo apt-get install tesseract-ocr
و ماجول pil رو میتونید با استفاده pip نصب کنید:
pip install pil
بعد از این ماجول pytesser رو از
این لینک دانلود کنید و در مکان دلخواه (پیشنهاد من opt/ و یا usr/local/) کپی و اکسترکت کنید. بعد از اینکه تمام این کارها رو انجام دادید به دایرکتوریای که در آن ماجول pytesser رو اکسترکت کردید برید. برای مثال(در این آموزش از virtualenv استفاده نشده):
cd /opt
sudo mkdir pytesser_v0.0.1
sudo tar -xf pytesser_v0.0.1.zip
opt/pytester_v0.0.1/
برای اینکه بتونیم کارکترهای موجود در کپچا رو بهتر شناسایی کنیم باید فرمت تصویر tif باشه برای همین با استفاده اسکریپت زیر پنجتا کپچا دانلود میکنیم و فرمت اون رو با استفاده از دستور convert از پکیج imagemagick دونهدونه به tif تبدیل میکنیم و بعد تمام فایلهای jpg رو حذف میکنیم:
for i in 1 2 3 4 5
do
wget http://goo.gl/jJSVPs -O captcha captcha"$i".jpg
convert cpatcha"$i".jpg -auto-level -compress none captcha"$i".tiff
rm captcha"$i".jpg
done
خوب حالا اگر در داخل دایرکتوریای که ماجول pytesser وجود داره هستید لازم به انجام کاری نیست در غیر این صورت تمام فایلهای tif رو به دایرکتوریای که در آن ماجول pytesser قرار داره منتقل کنید:
sudo cp captcha{1,2,3,4,5}.tif /opt/pytesser_v0.0.1
تا اینجا تقریباً ۸۰٪ کار رو انجام دادیم و فقط نوشتن یک اسکریپت پایتون (*.۲) که تمام این فایلهای tif رو شناسایی کنه باقی میمونه (این اسکریپت حتماً باید در داخل دایرکتوریای که ماجول pytesser قرار داره اجرا بشه در غیر این صورت باید از آدرسدهیِ مطلق برای ماجول استفاده بشه) :
from PIL import Image
from pytesser import Image, image_to_string, image_file_to_string
for i in (1, 2, 3, 4, 5):
captcha_file = 'captcha%d.tif' % i
captcha_as_image = Image.open(captcha_file)
text = image_file_to_string(captcha_file, graceful_errors=True)
print text
و در آخر اگر اشتباهی در متن وجود داشت و یا سوالی داشتید همینجا مطرح کنید.