Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2011, 10:05   #1
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию Распознавание капчи

Доброго времени суток.
Я знаю, что тема уже изъезжена целиком и полностью, но вот я решил попробовать распознать капчу и у меня возникло несколько вопросов.
Насколько сильно нужно убирать шум? Например, какое из данных изображений будет легче всего разделить на цифры и потом распознать:
Оригинал
Более-менее лояльное уничтожение шума
Более сильное
Грубое уничтожение шума
Заранее благодарен.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 12.02.2011, 11:57   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Думаю, что второй вариант.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.02.2011, 15:40   #3
Ecosasha
Форумчанин
 
Регистрация: 22.05.2009
Сообщений: 248
По умолчанию

to russian-stalker
А распознавание как делаете: 1. по шаблону 2. нейоронные сети 3. векторное (скелетизация)?

Если по шаблону, то в целом, составляем процент совпавщих точек и так методом проб и ошибок выявляем какое изображение лучше.
Но все- таки думаю, можно еще как-то обработать данное изображение получше. Например, пройтись и удалить единичные, несвязаные точки.
Ecosasha вне форума Ответить с цитированием
Старый 12.02.2011, 15:46   #4
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
Сообщение от Ecosasha Посмотреть сообщение
to russian-stalker
А распознавание как делаете: 1. по шаблону 2. нейоронные сети 3. векторное (скелетизация)?

Если по шаблону, то в целом, составляем процент совпавщих точек и так методом проб и ошибок выявляем какое изображение лучше.
Но все- таки думаю, можно еще как-то обработать данное изображение получше. Например, пройтись и удалить единичные, несвязаные точки.
Пока планирую по шаблону.
Спасибо, а есть какие-нибудь статьи по этой теме?
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 12.02.2011, 18:24   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Как-нибудь так

Код:
type
  TRGB = record
    B, G, R: Byte;
  end;
  pRGB = ^TRGB;

function ColorToRGB(Color: TColor): TRGB;
begin
  with Result do
  begin
    R := Lo(Color);
    G := Lo(Color shr 8);
    B := Lo((Color shr 8) shr 8);
  end;
end;

procedure Threshold(Bitmap: TBitmap; Value: Byte; Color1, Color2: TColor);
var x, y: Word;
    C1, C2: TRGB;
    Dest: pRGB;
begin
  Bitmap.PixelFormat := pf24Bit;
  C1 := ColorToRGB(Color1);
  C2 := ColorToRGB(Color2);
  for y := 0 to Bitmap.Height - 1 do
  begin
    Dest := Bitmap.ScanLine[y];
    for x := 0 to Bitmap.Width - 1 do
    begin
      if (Dest^.r + Dest^.g + Dest^.b) / 3 > Value then Dest^ := C1 else Dest^ := C2;
      Inc(Dest);
    end;
  end;
end;

procedure Smooth(Bitmap: TBitmap);
var x, y: Integer;
    p0, p1, p2: pByteArray;
begin
  Bitmap.PixelFormat := pf24bit;
  for y := 1 to Bitmap.Height - 2 do
  begin
    p0 := Bitmap.ScanLine[y-1];
    p1 := Bitmap.scanline[y];
    p2 := Bitmap.ScanLine[y+1];
    for x := 0 to Bitmap.Width - 1 do
    begin
      p1[x*3]   := (p0[x*3]   + p2[x*3]   + p1[(x-1)*3]   + p1[(x+1)*3]  ) shr 2;
      p1[x*3+1] := (p0[x*3+1] + p2[x*3+1] + p1[(x-1)*3+1] + p1[(x+1)*3+1]) shr 2;
      p1[x*3+2] := (p0[x*3+2] + p2[x*3+2] + p1[(x-1)*3+2] + p1[(x+1)*3+2]) shr 2;
    end;
  end;
end;

Smooth(Bitmap);
Smooth(Bitmap);
Threshold(Bitmap, 150, clWhite, clBlack);
Изображения
Тип файла: png Буфер обмена-1.png (15.5 Кб, 184 просмотров)
пыщь
JTG вне форума Ответить с цитированием
Старый 12.02.2011, 18:48   #6
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

JTG
Спасибо. Первая функция почти совпала:
Код:
	function monochrome(&$img, $step)
	{
		$w = imagesx($img); 
		$h = imagesy($img); 
		for($x = 0; $x < $w; $x++) 
		{ 
			for($y = 0; $y < $h; $y++) 
			{ 	
				$rgb = imagecolorat($img, $x, $y); 
				$r = ($rgb >> 16) & 0xFF; 
				$g = ($rgb >> 8) & 0xFF; 
				$b = $rgb & 0xFF;  
				
				$c = 0;
				
				if (($r+$g+$b)/3>$step)
					$c = 255;
				$rgb = imagecolorallocate ($img, $c, $c, $c);
				imagesetpixel($img, $x, $y, $rgb);
			}
		}
	}
А вот за вторую - действительно спасибо

upd:
Поигрался с функциями, но максимум чего мне удалось добиться, так это:
вот.
Ну ладно, это можно будет ещё поэкспериментировать с константами, но вот теперь интересует: существует ли какой-нибудь алгоритм, по которому можно разбить изображение на буквы?
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 12.02.2011 в 19:30.
russian-stalker вне форума Ответить с цитированием
Старый 12.02.2011, 19:36   #7
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

не так давно в Хакере была статья с исходниками. если нужно поищу у себя и статью и исходники
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 12.02.2011, 20:09   #8
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
Сообщение от Sparky Посмотреть сообщение
не так давно в Хакере была статья с исходниками. если нужно поищу у себя и статью и исходники
Буду благодарен.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 12.02.2011, 21:36   #9
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Лучше всего будет делать векторно - скелетизацией. Повышаете контрастность - убираете бахрому (один-два пикселя рядом) и получаете нормальное изображение. Потом выделяете символы любым алгоритмом кластеризации. Если заранее известно количество символов на изображении - можно попробовать Метод k-внутригрупповых средних. Если неизвестно, построковое выделение. Ну или на крайний случай - ненаправленный волновой алгоритм (медленнее всего).
MaTBeu вне форума Ответить с цитированием
Старый 13.02.2011, 08:34   #10
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

вот ссылка на весь этот журнал http://www.xakep.ru/magazine/xa/135/xa_135.pdf
исходники которые были на диске прикрепила
Вложения
Тип файла: rar Исходные тексты.rar (604.1 Кб, 111 просмотров)
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распознавание капчи. Alex Cones Общие вопросы Delphi 20 11.01.2011 14:41
Обход капчи ZverSS88 Работа с сетью в Delphi 6 05.11.2010 13:38
КОПИРОВАНИЕ КАПЧИ!!!! daitedeneg Софт 0 30.11.2009 04:30
Распознавание капчи phpBB Оптимист2009 Свободное общение 11 03.07.2009 09:33
Обход капчи kobe24 Общие вопросы по программированию, компьютерный форум 13 09.03.2009 20:28