OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

@mrmarman,

Bu konuyla bende daha önce ilgilenmiştim. Oldukça yararlı ve yol gösterici bir makale olmuş. Paylaşım için teşekkür ederim.

iyi çalışmalar.
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
LeuKaeMia
Üye
Mesajlar: 4
Kayıt: 28 Ara 2006 05:28

gec kalmışım

Mesaj gönderen LeuKaeMia »

ama süper makale..herkese teşekkürler
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen mrmarman »

Uzun zamandır OCR hakkında mail ve özel mesaj alıyorum. Sürekli hazır kod isteniyor. Arkadaşlar bu başlıktaki kodlar çalışıyor. Sadece proje haline getirmeniz yeterli.

Neyse bugün bir mesaja daha verdikten sonra örnek proje koymaya karar verdim.

http://rapidshare.com/files/114450238/OCR_ABC.zip

Herşeyden önce unutmamanız gereken şey, bu proje sadece yaklaşım / sistem hakkında beyinlerde ışık yakmak içindir. Yani ABC'si diyoruz ya o manada.

Çalışmalarınızda başarılar dilerim.
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen conari »

Makaleyi de okudum programını inceledim.Ellerinize sağlık.Allah zihin açıklığı versin.
Sitede ki örnek resmini aldım. "EGUJG" yazan küçük harflerle bunlar tabi.
"J" yi "i" olarak çevirdi. diğerleri doğru. Acayip bir CPU Kullanımı var ayrıca.

Hoca, Konu ile alakasız da. sitenin formatı değişti bir de RSS e el atsan.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
alvin
Üye
Mesajlar: 18
Kayıt: 03 Oca 2009 04:49

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen alvin »

evet bende denedim ve aynı şekilde sadece j harfini i olarak gördü.hocam bu yanlışlık acaba j harfinin biraz yatık olmasından mı kaynaklanıyor...yani belki font styl ını fsitalic mi yapıp j yi karşılaştırmak lazım???bilemedim ki??
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen mrmarman »

tabii ki italik sorgu yapmazsanız italik harf tanıma uymaz.

Font.Style := [];

satırını bold, italik, bold+italik olarak da sorgulatmanız lazım.. Dediğim gibi etüd projedir hamuru şekillendirecek ve sırlayıp fırına koyacak kişi sizsiniz. :wink:
Resim
Resim ....Resim
alvin
Üye
Mesajlar: 18
Kayıt: 03 Oca 2009 04:49

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen alvin »

peki onu italic yaptık diyelim(sonuçta 4 tane farklı yazış biçimi var).yalnız aklıma takılan bir soru daha var...biz bu resimde hangi font ailesinin kullanıldığını nasıl anlicaz...mesela corriernew var new tmies roman var bunun gibi yüzlercesi var.....bunun ne olduğunu nasıl anlayıpta programada ona göre bildiricez..yani mazur görün anlayamadım ondan soruyorum??
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen mrmarman »

Mazur görülecek durum yok sorunuzda haklısınız. Çünkü aynı captcha kod içerisinde her harfi farklı font olduğu durumlar da söz konusu, ve hatta windows'un standart fontları dışındaki özel tasarlanmış olanları dahi olabilir.

Bu işlemi yapmadan önce yazı fontlarına gözü aşina olan bir arkadaşınızdan yardım alabilirsiniz. Böylece bir kaç saniyede doğru font(lar)ı tespit edebilirsiniz.

Kendiniz deneme yanılma ile bulmak isterseniz bir tane Word dökümanı açınız, captcha koddaki karakterlerden gözünüze kestirdiğiniz karakteristik bir tanesini öncelikli referans almak üzere aynı ifadeyi yazınız. Gözünüzle karşılaştırınız, benzerlik görürseniz seçili font budur dersiniz.

Altını yeniden çizmeliyim, size verdiğim kod örneği sadece karşılaştırma tekniklerinden birisini örneklemek içindi. Fontların karakteristiklerini inceleyelerek ortak özelliklerini bularak çizgilerin açı ve yönünü anilz ile de bulmak mümkün. Bu konu yapay sinir ağlarına giriyor ve daha yetkin bir grafik / matematik bilgisi gerektiriyor.
Resim
Resim ....Resim
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen G.Arkas »

Döküman tam anlamıyla harika. ancak şöyle bir durum var

Ben aşağıda ki captcha daki

Resim

arka planı

Resim

şu şekilde temizliyorum ama bunları nasıl aynı hizaya getirebilirim fikri olan varmıdır acaba?
Resim
Kullanıcı avatarı
vampir261
Üye
Mesajlar: 298
Kayıt: 23 Kas 2004 03:22
Konum: Denizli

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen vampir261 »

Çok başarılı bir makale ve proje olmuş elinize sağlık, tam da buna benzer bir koda ihtiyaç duyduğum anda gökte ararken forumda buldum :D Ne kadar mutlu olduğumu kelimelerle anlatamam. Çok teşekkür ederim.
Anlatırsanız unuturum,
Gösterirseniz hatırlarım,
Yaptırırsanız anlarım.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen mkysoft »

G.Arkas yazdı:Döküman tam anlamıyla harika. ancak şöyle bir durum var

Ben aşağıda ki captcha daki

Resim

arka planı

Resim

şu şekilde temizliyorum ama bunları nasıl aynı hizaya getirebilirim fikri olan varmıdır acaba?
Harfleri aynı hizaya getirmek yerine ayırın bence. gözle görüldüğü kadarıyla aralarında boşluk var. yatayda hareket ettirdiğinizi varsaydığınız sanal bir çizgi ile resmi tarayın, çizgi boş alandaysa oradan bölün. parçalara ayrıdıktan sonra birleştirebilirsiniz de tabi.
erkankurtaga
Üye
Mesajlar: 62
Kayıt: 04 Oca 2009 06:36

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen erkankurtaga »

Makalede emeği geçen herkese teşekkürler. Yalnız bu makalede verilen bilgiler ışığında https://medeczane.sgk.gov.tr/eczane/login.jsp adresindeki üretilen o güvenlik kodunu nasıl okuyabilirim. Yapılan örneklerle herhangi bir sonuca ulaşamadım. Herkese tekra teşekkürler.
McVeLeT
Üye
Mesajlar: 65
Kayıt: 22 May 2005 06:45
Konum: Bursa

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen McVeLeT »

Evet makalenin yenisini bekleriz, mesela başlangıç olarak CAPTCHA kodunu formda göstermek gibi :mrgreen:
Bazen sesini duyurabilmen için,
Susman gerekir...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen mrmarman »

@erkankurtaga
- Soruyu henüz gördüm. 26 Temmuz 2013 nere, 08 Aralık 2013... :o Çok gecikmiş bir cevap ama paylaşayım...

@McVeLeT bir şeyler yazmasa daha da göremezdim. Hatırlatma için sana da teşekkürler.

- HTML parametreleri için cennet MSDN'deki MSHTML referansları. Burayı karış karış okudum, herkese de tavsiye ederim. Web HTML parse edecekseniz kaynağından beslenebileceğiniz yer burasıdır. :idea:

Kullanımı :

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
Const
  URL = 'https://medeczane.sgk.gov.tr/eczane/login.jsp';
begin
  WebBrowser1.Navigate( URL );
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
  begin
    Sleep(1);
    Application.ProcessMessages;
  end;
  // Site açıldı. Şimdi Resmi alalım...
  AktifResimYukle_ARMAN(WebBrowser1, 'SayiUreten', Image1 );
end;
Procedure :

Kod: Tümünü seç

// Uses MSHTML
procedure AktifResimYukle_ARMAN( WebBrowser:TWebbrowser; strAra:String; Image:TImage );
var
  iSayac   : Integer;
  bmpResim : TBitmap;
begin
  if not Assigned( WebBrowser.Document ) then
    raise Exception.Create('HTML içerik gelmemiş...');
  if not Assigned ( (((WebBrowser.Document) as IHTMLDocument2).body as IHTMLElement2)) then
    raise Exception.Create('HTML Gelmiş ama Body içermiyor...');
  for iSayac := 0 to ((((WebBrowser.Document) as IHTMLDocument2).body as IHTMLElement2).getElementsByTagName('img') AS IHTMLElementCollection).Length-1 do
  begin
    if Pos( strAra, ((((((WebBrowser.Document) as IHTMLDocument2).body as IHTMLElement2).getElementsByTagName('img') AS IHTMLElementCollection).item(iSayac, EmptyParam) as IHTMLElement) as IHTMLImgElement).src ) > 0 then
    begin
      bmpResim := TBitmap.Create;
        bmpResim.Height := ((((((WebBrowser.Document) as IHTMLDocument2).body as IHTMLElement2).getElementsByTagName('img') AS IHTMLElementCollection).item(iSayac, EmptyParam) as IHTMLElement) as IHTMLImgElement).height ;
        bmpResim.Width  := ((((((WebBrowser.Document) as IHTMLDocument2).body as IHTMLElement2).getElementsByTagName('img') AS IHTMLElementCollection).item(iSayac, EmptyParam) as IHTMLElement) as IHTMLImgElement).width ;
        (((((((WebBrowser.Document) as IHTMLDocument2).body as IHTMLElement2).getElementsByTagName('img') AS IHTMLElementCollection).item(iSayac, EmptyParam) as IHTMLElement) as IHTMLImgElement) as IHTMLElementRender).DrawToDC(bmpResim.Canvas.Handle);
        Image.Picture.Assign( bmpResim );
      bmpResim.Free;
      Break;
    end;
  end;
end;
Resim
Resim ....Resim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: OCR'ye Giriş - CAPTCHA Kodların Çözümlenmesi üzerine

Mesaj gönderen mrmarman »

Merhaba.

- Bir de DLL ekliyorum. Bu DLL captca resmi çözümleyip String olarak döndürüyor.

- Özellikle DLL yaptım, tümüyle bu makale içerisinde anlatılan ve verilen kodlar ile oluşturuldu. :idea: Amaç, sizlerin elinizi taşın altına sokup bu işi kavramanız içindir. Kaynak kodları tümüyle bu makalede verildi. Tıpatıp aynı kodlar kullanıldı.

- İlerleyen tarihlerde bunu belki bir faaliyete dönüştürüp captcha resim çözümleme çalışması ve forum üyeleri için kaynaşma yemeğine dönüştürebiliriz. :bravo:

Kullanımı :
(1)- Önceki mesajımdaki teknik ile TImage nesnesine resmi alın.
(2)- Mesaj ekindeki DLL'yi proje dizininize kopyalayın ve projenizden aşağıdaki şekilde kod ile DLL'deki fonksiyonu çalıştırıp, sonucunuzu elde ederek kullanın.

Kod: Tümünü seç

Function OCRYap( OCRBitmap:TBitmap ): String; StdCall;
  External 'OCR_01.DLL';

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  strOCRSonuc : String;
begin
  strOCRSonuc := OCRYap( Image1.Picture.Bitmap ); 
  ShowMessage( strOCRSonuc );
end;
Dosya ekleri
OCR_01.rar
Medula Captcha Çözen DLL
(170.06 KiB) 394 kere indirildi
Resim
Resim ....Resim
Cevapla