C# → Класс распознавания для antigate.com

Янв 25, 2011


По аналогии с Delphi решил написать класс для распознавания текста с картинок (captcha) на языке C#. Работает модуль через сервис antigate.com. Для загрузки картинки на сервис используется ранее написанный класс MultiPartForm.

Пример использования (простой)

Antigate antigate = new Antigate();
antigate.SetKey("6f2f440e5edaf8a8b970f79b1edd312c");
antigate.SetFile(@"C:\captcha.jpg");
Console.WriteLine(antigate.Recognize());


Пример использования (сложный)

    static void Main(string[] args)
    {
        Antigate antigate = new Antigate("6f2f440e5edaf8a8b970f79b1edd312c");
        antigate.SetFile(@"C:\captcha.jpg");
        antigate.SetMinLen(4);
        antigate.SetMaxLen(10);
        antigate.SetRegsens(1);
        antigate.CaptchaError += new EventHandler<Antigate.AnswerEventArgs>(antigate_CaptchaError);
        antigate.CaptchaReceived += new EventHandler<Antigate.AnswerEventArgs>(antigate_CaptchaReceived);
        antigate.Recognize();
        antigate.Abuse();
        Console.ReadLine();
    }

    static void antigate_CaptchaReceived(object sender, Antigate.AnswerEventArgs e)
    {
        Console.WriteLine("Код каптчи: {0}", e.Answer);
    }

    static void antigate_CaptchaError(object sender, Antigate.AnswerEventArgs e)
    {
        switch (e.Answer)
        {
            case Answer.ERROR_CAPTCHA_TIMEOUTED:
                Console.WriteLine("Каптча не разгадана!");
                break;
            case Answer.ERROR_NO_SLOT_AVAILABLE:
                Console.WriteLine("Сервис перегружен!");
                break;
            case Answer.CAPTCHA_NOT_READY:
                Console.WriteLine("Каптча еще не готова");
                break;
            default:
                Console.WriteLine("Ошибка: {0}", e.Answer);
                break;
        }
    }

Конструктор Antigate

Создает экземпляр класса Antigate.

new Antigate()

Обычный конструктор без параметров.

new Antigate(string Key)

Конструктор с параметром, в качестве Key указывается ключ сервиса antigate.com

Метод SetKey

Задает ключ к antigate.com, если в конструкторе он не был указан.

void SetKey(string Value)

В параметре Value передается ключ сервиса.

Метод SetPhrase

Указывает, что на картинке более одного слова.

void SetPhrase(int Value)

Параметр Value может принимать следующие значения:
0 - (default) одно слово,
1 - более одного слова

Метод SetRegsens

Указывает, что текст зависит от регистра букв.

void SetRegsens(int Value)

Параметр Value может принимать следующие значения:
0 - (default) не чувствителен к регистру,
1 - чувствителен к регистру

Метод SetNumeric

Указывает, что текст состоит только из цифр или букв.

void SetNumeric(int Value)

Параметр Value может принимать следующие значения:
0 - (default) возможны буквы и цифры,
1 - только цифры,
2 - только буквы

Метод SetCalc

Указывает, что цифры на картинке должны быть сложены арифметически.

void SetCalc(int Value)

Параметр Value может принимать следующие значения:
0 - (default) не складывать,
1 - складывать арифметически

Метод SetMinLen

Устанавливает минимальное число символов на картинке.

void SetMinLen(int Value)

Параметр Value может принимать следующие значения:
0 - (default) нет минимальной длины,
0..20 - минимальная длина текста

Метод SetMaxLen

Устанавливает максимальное число символов на картинке.

void SetMaxLen(int Value)

Параметр Value может принимать следующие значения:
0 - (default) нет максимальной длины,
0..20 - максимальная длина текста

Метод SetRussian

Указывает, что на картинки русские буквы.

void SetRussian(int Value)

Параметр Value может принимать следующие значения:
0 - (default) на любом языке,
1 - на русском языке,
2 - на русском и английском языке

Метод SetRetryCount

Устанавливает количество повторений между проверкой статуса разгадывания.

void SetRetryCount(int Value)

Параметр Value может принимать все значения от 1 и больше, по умолчанию 10.

Метод SetRetryTimeout

Устанавливает задержку между повторениями проверки статуса разгадывания.

void SetRetryTimeout(int Value)

Параметр Value может принимать все значения от 0 и больше, задается в миллисекундах, по умолчанию 5000.

Метод SetFile

Указывает путь или поток к файлу картинки с каптчей.

void SetFile(string Value)

В параметре Value передается путь до файла каптчи.

void SetFile(Stream stream)

В параметре Value передается поток файла каптчи.

Метод Recognize

Начинает распознавание текста.

string Recognize()

Распознает текст и возвращает результат.

Метод GetBalance

Получает баланс на сервисе antigate.com

string GetBalance()

Запрашивает баланс с сервиса и возвращает результат.

Метод Abuse

Жалуется на последнюю разгаданную каптчу.

void Abuse()

Запрос на жалобу на возврат денег, за некорректно разгаданную каптчу.

Событие CaptchaReceived

Событие возникающие, когда каптча разгадана.

CaptchaReceived(object sender, AnswerEventArgs e)

e.Id - идентификатор каптчи,
e.Answer - ответ от сервиса (ошибка или текст с картинки)

Событие CaptchaError

Событие возникающие, когда сервис вернул ошибку.

CaptchaError(object sender, AnswerEventArgs e)

e.Id - идентификатор каптчи,
e.Answer - ответ от сервиса (ошибка или текст с картинки)

UPDATE:
Обновлен класс MultiPartForm.
Добавлены константы возвращаемых ошибок.
Убраны лишние события.

Скачать webtools.antigate.zip
Размер: 2.5 kB – Скачиваний: 247 – Скачан последний раз: 14.08.2012 17:33

Post to Twitter

Похожие статьи:

  1. Отправка multipart/form-data данных
  2. Критика класса LiveInternet

Комментарии (11)

  1. avatar

    Дмитрий
    Март 29th, 2011 at 22:57 #

    Я так понимаю пример написан с использованием Framework 4 не смогли бы вы сделать тоже самое на более низкой версии.

  2. avatar

    GlooK
    Март 29th, 2011 at 23:52 #

    Переписал для Framework 3 http://upwap.ru/1397285
    Попробуй, проверить нет возможности.

  3. avatar

    q
    Апрель 2nd, 2011 at 14:53 #

    у вас _stream не закрывается после работы класса

  4. avatar

    GlooK
    Апрель 2nd, 2011 at 15:04 #

    Действительно забыл убить переменную. Спасибо, поправлю.

  5. avatar

    q
    Апрель 3rd, 2011 at 12:45 #

    это снова я:)
    такой момент- для скачки картинки я использую код

    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(«http/blabla/code.png»);
    using (HttpWebResponse reportBadResponse = (HttpWebResponse)req.GetResponse())
    using (Stream stream = reportBadResponse.GetResponseStream())
    {
    antigate.SetFile(stream);
    code = antigate.Recognize();
    }

    так вот вылетает исключение This stream does not support seek operations
    как насчет включить поддержку таких потоков? или убрать непонятно зачем вставленный код FileStream.Seek(0, SeekOrigin.Begin);
    а то не вижу смысла сперва сохранять на диск а затем уже сохраненную картинку передавать в класс

  6. avatar

    Ghostonline
    Апрель 8th, 2011 at 15:18 #

    2 q
    Просто поменяй в исходниках везде FileStream на Stream и можно будет любой поток подставлять
    Подумаешь, люди еще учатся писать наиболее абстрактный код..

  7. avatar

    Сергей
    Май 23rd, 2011 at 11:43 #

    Здравствуйте, а как получить каптчу google возвращает 503 ошибку, и вызывается исключение?

  8. avatar

    GlooK
    Май 23rd, 2011 at 14:20 #

    Укажите ссылку с каптчей. Скорей всего там нужно использовать куки.

  9. avatar

    Сергей
    Май 24th, 2011 at 10:42 #

    Может контактные данные вышлите мне на почту?

  10. avatar

    Сергей
    Май 24th, 2011 at 10:42 #

    Ваши

  11. avatar

    Кац
    Январь 26th, 2012 at 01:10 #

    А будет этот код работать с http://anti-captcha.net если заменить «antigate.com» на «anti-captcha.net», а все «.php» на «.aspx»?
    Просто антигейт в последнее время лажает, ищу альтернативы и простой способ перехода на другой сервис.

Ваш комментарий

Rambler's Top100 Яндекс.Метрика