Форумы портала PHP.SU » » Графика в PHP » Распознавание капчи

Страниц (1): [1]
 

1. OrmaJever - 24 Октября, 2013 - 21:36:07 - перейти к сообщению
Я всегда думал что для распознавания капчи нужны сложные алгоритмы, а капчи типа яндекса (с кучей помех и деформацией символов) вообще не распознаются, но встречаю всё больше статей что это достаточно легко Растерялся , и вот я решил попробовать))

Взял простую капчу (http://barbars.ru/captcha) без деформации и помех и начала думать. Разложил картинку на 0 и 1 и теперь не могу придумать как разделить символы (они там иногда без пробелов). Подскажите у кого есть опыт как быть дальше.
Код для получения
PHP:
скопировать код в буфер обмена
  1. file_put_contents('captcha.png', file_get_contents('http://barbars.ru/captcha'));
  2. $xx = '';
  3. $img = imagecreatefrompng('captcha.png');
  4.  
  5. for($i=5;$i<35;++$i)
  6. {
  7.         for($x=25;$x<130;++$x)
  8.         {
  9.                 $a = imagecolorsforindex($img, imagecolorat($img, $x, $i));
  10.                 $color = $a['red'] + $a['green'] + $a['blue'];
  11.                 $xx .= (int)!$color;
  12.         }
  13.         $xx .= "\r\n";
  14. }
  15. echo '<img src="captcha.png"><br><br>', $xx;

Возможно эта тема и другим будет интересна. Если я придумаю как распознать обязательно отпишусь тут Улыбка
2. caballero - 24 Октября, 2013 - 22:43:38 - перейти к сообщению
разделять надо в тонком месте
чтобы не разрезать символ нужно взять среднюю ширину по уже отделенных
можно распознавать по одному методом итераций, но для капчи непросто разработать класификатор

вообще OCR- весьма непростая штука - просто забудь.
3. deblogger - 01 Ноября, 2013 - 09:58:35 - перейти к сообщению
Есть ровно два рабочих режима: публичный - пускать всех и приватный - кого хочешь. Капчи-хренапчи пытаются сесть между двух стульев и регулярно проваливаются.
(Добавление)
Я имею ввиду зачем писать шняги на php, если вы можете поставить на сервер нормальную ocr прогу и подсовывать ей картинки из простейшего скрипта.
4. T1grOK - 01 Ноября, 2013 - 10:31:14 - перейти к сообщению
Если под win, то можно заюзать тот же FineRader. Все остальные OCR, распознают то криво, то косо.
5. selow - 28 Июля, 2014 - 18:43:41 - перейти к сообщению
Разделение в самом тонком месте не поможет, у Яндекса это предусмотрено и встречаются куски, где есть несколько пересечений и есть толстые пересечения (толще чем буква)

Так что остаётся одной: сервисы антикапчи
6. Ts.Saltan - 29 Июля, 2014 - 16:19:31 - перейти к сообщению
Когда-то убивался такой же хренью.

Разделял так:
1.Из изображения получаем массив точек вида
$dots[$x][$y] = [$red, $green, $blue]

2.Получаем цвет фона
обычно прокатывает imagecolorat($img, 0, 0)

3. Обходим массив $dots:
PHP:
скопировать код в буфер обмена
  1. foreach($dots as $x=>$ys){
  2.    foreach($ys as $y=>$colors){
  3.       // тут сравниваем цвет пикселя с цветом фона
  4.       // если пройден весь массив по $y
  5.       // и все пиксели == цвет фона, то можно обрезать капчу до $y
  6.    }
  7. }

(Добавление)
Упс, не заметил, что темка старая =)
7. jumper423 - 20 Сентября, 2017 - 20:13:30 - перейти к сообщению
Всё же для этих целей пока лучше подходят сервисы. Написал для таких своё обвязку на PHP
https://github[dot]com/jumper423/dec[dot][dot][dot]ocs/README-ru[dot]md

 

Powered by ExBB FM 1.0 RC1