gifts2017

Еще одна технология распознавания капчи без онлайн сервисов.

Опубликовал OldthiefXXX OldthiefXXX (OldthiefXXX) в раздел Программирование - Практика программирования

Технология распознавания капчи.
Надоели мне онлайн сервисы распознование капчи, решил что нибудь сделать с этим. Выхода два либо писать анализатор или же  использовать существующие наработки других команд.
 Долго искал наткнулся. https://code.google.com/p/tesseract-ocr/ за что им огромное Спасибо.
Качаем tesseract-ocr-setup-3.02.02.exe Устанавливаем
Далее все тонкости описывать не буду только самое важное


 //Получение элемента дом картинки
	КартинкаКапчи = ДокХМЛ.getElementById("captcha"); 
//Копирование картинки в буфер обмена
	body = ДокХМЛ.body; imgs = КартинкаКапчи;
	controlRange = body.createControlRange(); controlRange.add(imgs); controlRange.execCommand("Copy", False, Неопределено);
 ///Получение картинки из буфера обмена через компоненту КомпонентБО = Новый("AddIn.clipboard");
	строкаКартинки = КомпонентБО.ПолучитьКартинкуИзБуфераОбмена();
 //Преобразование в двоичные данные
	ДанныеКартинки = Base64Значение(строкаКартинки);
 //Установка картинки на форму просто показать капчу
	ЭлементыФормы.КапчаКартинкаНаФорме.Картинка = Новый Картинка(ДанныеКартинки); 
//Сохранение капчи на диск в файл
	ЭлементыФормы.КапчаКартинкаНаФорме.Картинка.Записать(КаталогВременныхФайлов()+"cap.tiff");
 //САМОЕ ИНТЕРЕСНОЕ!
	ТекстКапчи=РаспознатьТекст(КаталогВременныхФайлов()+"cap.tiff"); 

Дальше сама функция
 Функция РаспознатьТекст(КартинкаТиф)
	Удачно=Ложь;
 Попытка
	ТекстКоманды =""+ПутьКhstart+" /NOCONSOLE /WAIT "+""""+ПутьКtesseract+" "+КартинкаТиф+" "+КаталогВременныхФайлов()+"cap"+"""";
	ЗапуститьПриложение(ТекстКоманды); WshShell = Новый COMОбъект("WScript.Shell");
	WshShell.Run(ТекстКоманды, 5, 1);
	Удачно=истина;
исключение
	Удачно=Ложь;
 Конецпопытки; 
Если Удачно тогда
	ТекстКапчи=ПолучитьТекстКапчи(КаталогВременныхФайлов()+"cap.txt");
 Возврат ТекстКапчи;
 конецесли;
 Возврат Удачно;
 КонецФункции

Да и заранее подготовленные exe и bat перед открытием формы
 Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	КаталогВременныхФайлов =КаталогВременныхФайлов();
 Попытка
	МакетДЛЛ = ПолучитьМакет("clipboard_dll"); ИмяВременногофайла=КаталогВременныхФайлов+"clipboard.dll";
	МакетДЛЛ.Записать(ИмяВременногофайла); 
исключение
 Конецпопытки;
 Попытка
	Макетhstart_exe = ПолучитьМакет("hstart_exe");
 ИмяВременногофайлаМакетhstart_exe=КаталогВременныхФайлов+"hstart.exe";
	ПутьКhstart=ИмяВременногофайлаМакетhstart_exe;
	Макетhstart_exe.Записать(ИмяВременногофайлаМакетhstart_exe);
 исключение
	Макетhstart_exe=""; 
Конецпопытки;
 Попытка
	Макетcapbat = ПолучитьМакет("cap_bat");
 ИмяВременногофайлаМакетcapbat=КаталогВременныхФайлов+"cap.bat"; //Его содержание одна команда без ковычек "tesseract cap.tiff cap"
	ПутьКcapbat=ИмяВременногофайлаМакетcapbat;
	Макетcapbat.Записать(ИмяВременногофайлаМакетcapbat);
 исключение
	Макетcapbat="";
 Конецпопытки;
 Попытка
	Макетtesseract_exe = ПолучитьМакет("tesseract_exe");
 ИмяВременногофайлаМакетtesseract_exe=КаталогВременныхФайлов+"tesseract.exe";
	ПутьКtesseract=ИмяВременногофайлаМакетtesseract_exe;
	Макетtesseract_exe.Записать(ИмяВременногофайлаМакетtesseract_exe);
 исключение
	Макетhstart_exe="";
 Конецпопытки; 
Попытка
	ЗагрузитьВнешнююКомпоненту(ИмяВременногофайла);
 Попытка
	КомпонентБО = Новый("AddIn.clipboard");
 Исключение
	Сообщить("Не удалось создать объект компоненты");
 КонецПопытки;
 Исключение
	Сообщить("Компонента clipboard не найдена!");
 КонецПопытки;
 КонецПроцедуры

Огромное спасибо создателям компоненты копирование из буфера обмена. http://infostart.ru/public/19872/

См. также

Подписаться Добавить вознаграждение

Комментарии

1. ivanov660 ivanov660 (ivanov660) 07.07.14 10:05
И каково качество распознавания изображения?
2. OldthiefXXX OldthiefXXX (OldthiefXXX) 07.07.14 17:41
3. Олег Крапивный (powerpc) 09.07.14 09:46
Всё почти понятно. Только подскажите пожалуйста как ДокХМЛ создать? На примере какого-нибудь сайта. Тессеракт кстати jpeg с каптчей отказался распознавать, сказал: пустая картинка
4. OldthiefXXX OldthiefXXX (OldthiefXXX) 09.07.14 10:00
(3) powerpc,
ДокХМЛ = ЭлементыФормы.ПолеHTML.Документ;
5. OldthiefXXX OldthiefXXX (OldthiefXXX) 09.07.14 10:01
(3) powerpc,
Также JPEG нет tiff надо!!!
6. Serg (Sykoku) 09.07.14 10:20
Сразу огорчу: распознавание на ... одном каком-то языке. А если их несколько? (Есть такие капчи: кириллица + латиница). Поддерживаемые форматы - TIFF, PNG + PDF с координатами текста. И куча ограничений: изображение не цветное, не сжатое и т.д.

7. Олег Крапивный (powerpc) 09.07.14 11:02
(6) Sykoku, ясно что публикация не панацея. Есть капчи и с математикой, и с логикой, и с рисунками, и с ограничением времени показа. Интересен сам инструмент в рамках 1С и метод реализации. В любом случае познавательно. Автору плюс несомненно!
8. Макс Зеленский (mzelensky) 09.07.14 11:16
Круто. Где ж ты раньше был :)
9. Олег Крапивный (powerpc) 09.07.14 11:21
(5) OldthiefXXX, мозгов не хватает страницу с капчей найти подходящую.... блин. с элементом "id=captcha". Может есть ссылки для проверки кода ?
10. OldthiefXXX OldthiefXXX (OldthiefXXX) 09.07.14 21:33
(9) powerpc, Для примера с капчей возьми любую страницу, открой в хроме затем на капче правой кнопкой мыши нажми и в открывшейся менюшке "Просмотр кода элемента " и посмотри его ID. В 90% случае это будет некий элемент DOM. найти его можно по разному не только методом getElementById есть и другие методы для помощи немного почитать http://javascript.ru/tutorial/dom/search .
11. OldthiefXXX OldthiefXXX (OldthiefXXX) 09.07.14 21:43
(6) Sykoku, Согласен с тобой полностью, каждая капча разбирается отдельно, схемы защиты капч огромное величество, но хочу порадовать раз твой глаз видит капчу а мозг распознает , значит и софт написать можно. Человек создавая капчу или генератор капчи все равно закладывал логику, даже у генератора случайных чисел есть логика. А соответственно можно эту логику понять ну и карты в руки.
12. Александр Топольский (AlexanderKai) 10.07.14 10:22
(11) OldthiefXXX,
бывает такое, что мозг не может распознать.
shoy; It-developer; +2 Ответить 1
13. OldthiefXXX OldthiefXXX (OldthiefXXX) 10.07.14 15:44
(12) AlexanderKai, тогда обновляешь элемент DOM
14. Владимир Конырев (Vladimir_Konyrev) 14.07.14 11:05
Совместное использование возможностей внешних компонент и 1С - это очень интересная тема.
15. Олег Крапивный (powerpc) 16.07.14 10:46
(10) OldthiefXXX, а вот например здесь https://rzd.ru/selfcare/register/ru. На капче жму ПКМ -> "Проинспектировать элемент". Там img src="/selfcare/captchaImage2". Нет ID. По вашей ссылке http://javascript.ru/tutorial/dom/search решил, что подойдет только способ:
КартинкаКапчи = ДокХМЛ.getElementsByTagName("src");
Но метод возвращает пустой COM-объект. А как ещё можно на странице https://rzd.ru/selfcare/register/ru выцепить капчу ?
16. Александр (saga) 17.07.14 18:14
Проверил на паре 10 картинок с цифрами, если простой шрифт, однообразный фон, то 100%.
Если повернуто немного или с помехами то все 0%.
А такие каптчи которая она распознает нужно сейчас поискать.

PS С камими каптчами проходил тест?
17. shoy Андрей ais (shoy) 22.08.14 13:00
Да уж! Где ты был то пораньше, годков на 10? ;)
Вероятно, на данный момент, ещё есть такие капчи, иначе не было бы этой публикации.
Но мне попадаются совсем другие ...
Хотя заинтересовал подход. +
19. avitobot.ru Авито Бот (lp85d) 27.06.15 10:24
Программа Авито avitobot.ru

Сервис автоматического постинга на авито avitobot.ru
Авитобот — программа для размещения объявлений на авито
20. for_sale for_sale (for_sale) 23.11.16 15:44
Не работает!

Пробовал на ВКонтактовских - не распознаёт даже близко, даже количество символов правильно не определяет. Я уж не говорю о том, что с теми командами, которые привёл автор, оно не работает вообще, выдаёт ошибку.
Автор забыл указать, что тессеракт, как оказалось, нужно тренировать. Т.е. каким-то там очень хитрым способом, который умещается на нескольких страницах, скармливать ему чуть ли не посимвольные картинки пачками. Тогда, вроде бы как, начинает работать.

В общем, потерянное впустую время, кг/ам и низачот.
21. for_sale for_sale (for_sale) 23.11.16 15:50
Да, и ещё, небольшое лирическое отступление.

Если кто-то попадает в эту тему, то рано или поздно сталкивается с платными сервисами разгадок капчи. Так вот, отзыв rucaptcha.com. НЕ работайте с рукапчей (rucaptcha)! Это мошенники. В рекламе на главной странице заявлена цена от 18 руб. за 1000 капч (что более чем отличная цена по рынку!), но по факту оказывается, что цена не падает ниже 40-45 рублей. А техподдержка вообще колхозники какие-то - грубят и по существу ничего не отвечают.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа