В этой статье я опишу пример программного распознавания цифр с картинки, проще говоря, каптчи.
Сразу скажу, что распознавать каптчу мы будем с помощью эталонного изображения!
Функция сравнивания изображений:
В этой функции мы получаем цвет пикселя с помощью GetRValue, GetGValue, GetBValue и получившиеся значения складываем.
В самом конце проверяем, если различия в цвете и точках не большие, то картинки одинаковые!
Пользоватся этой функцией так:
Функция возвратит TRUE если изображения одинаковые.
В качестве бонуса:
Программа которая получает ICQ номер;
Способ получения каптчи от Google
Работает через этот сайт
Код получения каптчи с Google:
Хочу сказать, что данный способ очень эффективен т.к. в случае если на картинке будет некий шум (точка или что ещё), программа не забракует изображение!
Если бы мы сравнивали каждый пиксель, то при малейшем шуме программа забраковала бы изображение.
Исходник и программу к статье можно скачать по этой ссылке.
Программа написана на Delphi 2010
Сразу скажу, что распознавать каптчу мы будем с помощью эталонного изображения!
Функция сравнивания изображений:
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 и получившиеся значения складываем.
В самом конце проверяем, если различия в цвете и точках не большие, то картинки одинаковые!
Пользоватся этой функцией так:
compare(эталонное изображение, с чем сравнивать)
Функция возвратит TRUE если изображения одинаковые.
В качестве бонуса:
Программа которая получает ICQ номер;
Способ получения каптчи от Google
Работает через этот сайт
Код получения каптчи с 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
Не распознает пассы :(
ОтветитьУдалитьВ Английском алфавите 26 букв.
УдалитьВ пароле есть строчные и заглавные, по этому в общем мне пришлось бы собрать 52 картинки + цифры. Я этого делать не стал.
И не забывайте что это пример программы.
VanS напиши плиз полностью программу что бы и пароль расспознавала!!! БУДЕМ ВСЕ БЛАГОДАРНЫ!
ОтветитьУдалитьДаже не знаю как сказать...
УдалитьВ общем программа как ДОПОЛНЕНИЕ или ПРИМЕР к статье!
Что-то близко нет распознавания капчи, не сходиться с темой :)
ОтветитьУдалитьТекст на картинке можно считать каптчей.
УдалитьПарсинг данных, получение капчи. Распознавание каптчи, это другая статья =)
ОтветитьУдалитьВанс, ты разве не поклонник Delphi 7? А тут бац, и 2010
ОтветитьУдалитьВроде там гифки или png картинки.
УдалитьА с этого сайта капчу можно расшифровать? http://advance-rp.ru/login.html
ОтветитьУдалить