1
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Приветствуем вас,Гость, на форуме IFUD.WS. Обязательно рекомендуется к прочтению правила форума http://ifud.ws/threads/obnovleno-pravila-foruma.7759

[Delphi] Распознавание каптчи

Тема в разделе "Исходные коды", создана пользователем Alex-ey, 14 авг 2012.

  1. TopicStarter Overlay
    Alex-ey

    Alex-ey

    Регистрация:
    26 май 2012
    Сообщения:
    513
    Симпатии:
    323
    Пример программного распознавания цифр с картинки, проще говоря, каптчи.
    Сразу скажу, что распознавать каптчу мы будем с помощью эталонного изображения!

    Функция сравнивания изображений:


    Код:
     function compare(imag1, imag2: TBitmap):boolean;
        var i, q, rez, trh, p1, p2:integer;
        begin
        rez:=0;
        trh:=1000000; //чувствительность
        result:=false;
        for i:=1 to Imag1.width do
          for q:=1 to Imag1.height do begin
            p1:=Imag1.Canvas.pixels[i,q];
            p2:=Imag2.Canvas.pixels[i,q];
            rez:=rez+sqr(GetRValue(p1)-GetRValue(p2));
            rez:=rez+sqr(GetGValue(p1)-GetGValue(p2));
            rez:=rez+sqr(GetBValue(p1)-GetBValue(p2));
          end;
        result:=rez<trh;
        end;


    В этой функции мы получаем цвет пикселя с помощью GetRValue, GetGValue, GetBValue и получившиеся значения складываем.
    В самом конце проверяем, если различия в цвете и точках не большие, то картинки одинаковые!

    Код получения каптчи с Google:


    Код:
    var link, page, str:string; FF:TFileStream;
     
        page:=idHTTP1.Get('http://www.asya-besplatno.ru/icq-registraciya/'); //загружаем код страницы
          str:=Pars('src="http://www.google.com', page, '">'); //парсим значение
          link:='http://www.google.com'+str; //формируем ссылку
     
        page:=idHTTP1.Get(link);
          str:=Pars('challenge : ''', page, ''',');
          capa:=str; //копируем параметр challenge в глобальную переменную.
          link:='http://www.google.com/recaptcha/api/image?c='+str;
     
        FF:=TFileStream.Create('cap.jpg',FMCreate); //создаём изображение
        idHTTP1.Get(link, FF); //загружаем его
        FF.Free; //очищаем переменную
        Image1.Picture.LoadFromFile('cap.jpg');//Загружаем каптчу
        DeleteFile('cap.jpg'); //удаляем каптчу
    Хочу сказать, что данный способ очень эффективен т.к. в случае если на картинке будет некий шум (точка или что ещё), программа не забракует изображение!
    Если бы мы сравнивали каждый пиксель, то при малейшем шуме программа забраковала бы изображение.


    Программа написана на Delphi 2010
    (c)Vans
     
    • Like Like x 2
    Метки:

Поделиться этой страницей

Загрузка...