Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Распознавание капчи

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
OrmaJever Модератор
Отправлено: 24 Октября, 2013 - 21:36:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Я всегда думал что для распознавания капчи нужны сложные алгоритмы, а капчи типа яндекса (с кучей помех и деформацией символов) вообще не распознаются, но встречаю всё больше статей что это достаточно легко Растерялся , и вот я решил попробовать))

Взял простую капчу (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;

Возможно эта тема и другим будет интересна. Если я придумаю как распознать обязательно отпишусь тут Улыбка


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
caballero
Отправлено: 24 Октября, 2013 - 22:43:38
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




разделять надо в тонком месте
чтобы не разрезать символ нужно взять среднюю ширину по уже отделенных
можно распознавать по одному методом итераций, но для капчи непросто разработать класификатор

вообще OCR- весьма непростая штука - просто забудь.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
deblogger
Отправлено: 01 Ноября, 2013 - 09:58:35
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)

[+]


Есть ровно два рабочих режима: публичный - пускать всех и приватный - кого хочешь. Капчи-хренапчи пытаются сесть между двух стульев и регулярно проваливаются.
(Добавление)
Я имею ввиду зачем писать шняги на php, если вы можете поставить на сервер нормальную ocr прогу и подсовывать ей картинки из простейшего скрипта.
 
 Top
T1grOK
Отправлено: 01 Ноября, 2013 - 10:31:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июнь 2013  


Помог: 7 раз(а)




Если под win, то можно заюзать тот же FineRader. Все остальные OCR, распознают то криво, то косо.


-----
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
 
 Top
selow
Отправлено: 28 Июля, 2014 - 18:43:41
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июль 2014  


Помог: 0 раз(а)




Разделение в самом тонком месте не поможет, у Яндекса это предусмотрено и встречаются куски, где есть несколько пересечений и есть толстые пересечения (толще чем буква)

Так что остаётся одной: сервисы антикапчи


Отредактировано модератором: Мелкий, 28 Июля, 2014 - 19:59:55
по подозрению на рекламу конкретная ссылка удалена.
 
 Top
Ts.Saltan
Отправлено: 29 Июля, 2014 - 16:19:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




Когда-то убивался такой же хренью.

Разделял так:
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. }

(Добавление)
Упс, не заметил, что темка старая =)

(Отредактировано автором: 29 Июля, 2014 - 16:20:44)

 
 Top
jumper423
Отправлено: 20 Сентября, 2017 - 20:13:30
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Дек. 2014  


Помог: 0 раз(а)




Всё же для этих целей пока лучше подходят сервисы. Написал для таких своё обвязку на PHP
https://github[dot]com/jumper423/dec[dot][dot][dot]ocs/README-ru[dot]md
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Графика в PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB