Python Mechanize İle Resim Kaydetme
-
biraz daha kurcalayıp yapacağımı yaptım. Artık yazıyı okutabiliyorum ancak ki şöyle bir problem var yazının altına çizilmiş olan o çizgiyi de kodla kaldırınca bazı harflerin ve rakamların alt tarafı silik kalıyor dolayısıyla farklı algılıyor program. Bunun çözümü nasıl olur sizce ?-
-
Hocam tesseract'la falan dene istersen. Modülü kullanmadım hic bilemiyorum o yüzden.
-
KrypT bunu yazdı
Hocam tesseract'la falan dene istersen. Modülü kullanmadım hic bilemiyorum o yüzden.
tesseract ı kullandım zaten o alta öyle bi fonksiyon yazmlaıyım ki harfi bozmadna silicek çizgiyi.
-
Hocam bende python a yeni başladım , mümkünse kodlarınızı görmek isterim tabi sizin için sorun olmazsa
-
Claw bunu yazdıKrypT bunu yazdı
Hocam tesseract'la falan dene istersen. Modülü kullanmadım hic bilemiyorum o yüzden.
tesseract ı kullandım zaten o alta öyle bi fonksiyon yazmlaıyım ki harfi bozmadna silicek çizgiyi.
Captchayı görmeden kimsenin kesin bir şey diyebileceğini sanmıyorum.
Örnek bir görüntü at, ona göre neler yapılabilir bakalım.
-
torpedo_XL bunu yazdıClaw bunu yazdıKrypT bunu yazdı
Hocam tesseract'la falan dene istersen. Modülü kullanmadım hic bilemiyorum o yüzden.
tesseract ı kullandım zaten o alta öyle bi fonksiyon yazmlaıyım ki harfi bozmadna silicek çizgiyi.
Captchayı görmeden kimsenin kesin bir şey diyebileceğini sanmıyorum.
Örnek bir görüntü at, ona göre neler yapılabilir bakalım.
http://i.hizliresim.com/qERX2q.png orjinal captcha bu. benim çevirdiğim ise tesseract için arka plan siyah, yazılar beyaz bide o çizgiyide 19. px galiba siliyorum yani beyaz yapıyorum.
@coder2 vallaha bende sağdan soldan ne bulursam onları kullanıyorum kafama yazıyorum mantığını paylaşırım kodları burada da tamamlanınca her şey :)
-
Linuxta vardı o işi yapan bi kütükhane. İstemeden işini kolaylaştırabilir.
-
Claw bunu yazdıtorpedo_XL bunu yazdıClaw bunu yazdıKrypT bunu yazdı
Hocam tesseract'la falan dene istersen. Modülü kullanmadım hic bilemiyorum o yüzden.
tesseract ı kullandım zaten o alta öyle bi fonksiyon yazmlaıyım ki harfi bozmadna silicek çizgiyi.
Captchayı görmeden kimsenin kesin bir şey diyebileceğini sanmıyorum.
Örnek bir görüntü at, ona göre neler yapılabilir bakalım.
http://i.hizliresim.com/qERX2q.png orjinal captcha bu. benim çevirdiğim ise tesseract için arka plan siyah, yazılar beyaz bide o çizgiyide 19. px galiba siliyorum yani beyaz yapıyorum.
@coder2 vallaha bende sağdan soldan ne bulursam onları kullanıyorum kafama yazıyorum mantığını paylaşırım kodları burada da tamamlanınca her şey :)
Hocam captcha çok zor bir şey değil ama alttaki çizgi yüzünden örnekteki karakterlerde 2 ve c sıkıntı çıakrtıyor. Alttaki çizgiyi sildiğimizde 2 yi ? algılıyor, alttaki çizgi durduğunda ise c yi algılamakta zorluk çekiyor.
Bunun 2 farklı çözümü var. İlk çözüm, tesseracta tek tek öğretmemiz lazım bu durumlarda hangisi seçileceğini.
İkinci çözüm ise, ben karmaşık işlere giremem botum hızlı olsun arada 3-5 captcha çözememesi de normal diyecen. Onun için de bu captchalar için genel bir kod yazıp izlemen lazım. Baktın 10 tanede 5-6 çözülüyor düzgün o zaman sal gitsin. Eğer botun hızlı çalışıyorsa zaten aradaki bu hatalar görmezden gelinebiliyor.
Şöyle 2 dakikada kendi kullandığım genel capcha çözme mantığını seninki için değiştirdim.
from PIL import Image from PIL import ImageEnhance from PIL import ImageOps import sys,os from pytesser import * im1 = Image.open('test.png') width, height = im1.size im2 = im1.resize((int(width*2), int(height*2)), Image.BICUBIC) im3 = im2.convert('RGB') im4 = ImageEnhance.Color(im3) im5 = im4.enhance(0.0) im6 = ImageEnhance.Contrast(im5) im7 = im6.enhance(100) im8 = im7.crop((45, 15, 155, 38)) im9 = ImageOps.invert(im8) print image_to_string(im9) im9.save('debug.png'), os.system('debug.png')
Sondaki 38 i 39 yaparsan çizgi kalır 38 de çizgi gider.
Şimdi yazarken aklıma geldi. Şöyle de yapabilirsin. Eğer karakterler aşağı yukarı aynı konumlarda çıkıyorsa hep, tek tek karakterleri croplayıp daha sonra siyah zemin üzerine offsetli yerleştirebilirsin.
-
torpedo_XL bunu yazdıClaw bunu yazdıtorpedo_XL bunu yazdıClaw bunu yazdıKrypT bunu yazdı
Hocam tesseract'la falan dene istersen. Modülü kullanmadım hic bilemiyorum o yüzden.
tesseract ı kullandım zaten o alta öyle bi fonksiyon yazmlaıyım ki harfi bozmadna silicek çizgiyi.
Captchayı görmeden kimsenin kesin bir şey diyebileceğini sanmıyorum.
Örnek bir görüntü at, ona göre neler yapılabilir bakalım.
http://i.hizliresim.com/qERX2q.png orjinal captcha bu. benim çevirdiğim ise tesseract için arka plan siyah, yazılar beyaz bide o çizgiyide 19. px galiba siliyorum yani beyaz yapıyorum.
@coder2 vallaha bende sağdan soldan ne bulursam onları kullanıyorum kafama yazıyorum mantığını paylaşırım kodları burada da tamamlanınca her şey :)
Hocam captcha çok zor bir şey değil ama alttaki çizgi yüzünden örnekteki karakterlerde 2 ve c sıkıntı çıakrtıyor. Alttaki çizgiyi sildiğimizde 2 yi ? algılıyor, alttaki çizgi durduğunda ise c yi algılamakta zorluk çekiyor.
Bunun 2 farklı çözümü var. İlk çözüm, tesseracta tek tek öğretmemiz lazım bu durumlarda hangisi seçileceğini.
İkinci çözüm ise, ben karmaşık işlere giremem botum hızlı olsun arada 3-5 captcha çözememesi de normal diyecen. Onun için de bu captchalar için genel bir kod yazıp izlemen lazım. Baktın 10 tanede 5-6 çözülüyor düzgün o zaman sal gitsin. Eğer botun hızlı çalışıyorsa zaten aradaki bu hatalar görmezden gelinebiliyor.
Şöyle 2 dakikada kendi kullandığım genel capcha çözme mantığını seninki için değiştirdim.
from PIL import Image from PIL import ImageEnhance from PIL import ImageOps import sys,os from pytesser import * im1 = Image.open('test.png') width, height = im1.size im2 = im1.resize((int(width*2), int(height*2)), Image.BICUBIC) im3 = im2.convert('RGB') im4 = ImageEnhance.Color(im3) im5 = im4.enhance(0.0) im6 = ImageEnhance.Contrast(im5) im7 = im6.enhance(100) im8 = im7.crop((45, 15, 155, 38)) im9 = ImageOps.invert(im8) print image_to_string(im9) im9.save('debug.png'), os.system('debug.png')
Sondaki 38 i 39 yaparsan çizgi kalır 38 de çizgi gider.
Şimdi yazarken aklıma geldi. Şöyle de yapabilirsin. Eğer karakterler aşağı yukarı aynı konumlarda çıkıyorsa hep, tek tek karakterleri croplayıp daha sonra siyah zemin üzerine offsetli yerleştirebilirsin.
hocam skype varsa bi özelden pm alabilir miyim :) Şu kodu deniyim bu arada bide.
-
20 deneme yaptım 20 sini yanlış buldu :(