Распознование email с картинки

  • Автор темы Автор темы BPOH
  • Дата начала Дата начала

BPOH

Client
Регистрация
11.04.2019
Сообщения
129
Реакции
28
Баллы
28
Подскажите пожалуйста, давно встречал на форуме у кого-то в статье, что он капмонстром распознавал текст на картинке, не могу найти эту статью
На картинках эмейл как распознать текст капмонстром? или может кто знает другой полезный в этой задаче инструмент?
 
Последнее редактирование:
  • Оценить
Реакции: melutsk
Сейчас опопробуем, спасибо!
 
Эх почти сработало, много где @ как e определяет в общем %20 распознает
anuakash87euahoo.com
 

Вложения

  • img301.png
    img301.png
    303 байт · Просмотры: 198
  • Оценить
Реакции: melutsk
Собрать картинки, распознать в ручную и обучить собственный модуль.
 
  • Оценить
Реакции: BPOH
  • Оценить
Реакции: BPOH и melutsk
Обучить модуль получше надо. Думаю будет определять на 100%.
Как его обучить?) я тут рядом уже один 15 летний модуль заставил обрабатывать текст
Ато модуль уже ноет после 100 эмейлов *HAHA*
 
Эх почти сработало, много где @ как e определяет в общем %20 распознает
anuakash87euahoo.com
Если это паблик домены, то можно проверку сделать и чтобы правило если что на глаз.
 
  • Оценить
Реакции: BPOH
Если это паблик домены, то можно проверку сделать и чтобы правило если что на глаз.
Сильно сложно, даже приблизительно в голове структуры нет как это реализовать
Помотреть обучающее видео от Rostonixa для начала.
Буду благодарен за ссылку
 
Помню парсил сайт один, такая же ситуёвина была. Гадал через капмонстра. Всё отлично гадалось
 
  • Оценить
Реакции: BPOH
На python через tesseract нашел пример но тоже не полностью распознает Zamatoffemail.ru

*HAHA* melutsk жэ и дал ссылку на модуль тесеракта, ато сравнил результат одинаковый прочитал название темы и точно...
 
Последнее редактирование:
  • Оценить
Реакции: BPOH
Решил так: стакнул 1000 изображений в одно и загрузил на гугл диск открыл картинку как документ весь текст автоматически распознан
Подключаем 15 летний модуль *HAHA* через месяц у вас 400к эмейлов, вы прекрасны

python стаколка изображений:
Развернуть Свернуть Копировать
from PIL import Image


def save_image(b):
    b1 = 0
    img = Image.new('RGB', (256, 20 * 1000))
    for i in range(1000):
        if b == 459412:
            img.save(f"out{b}.jpg")
            exit(0)
        img1 = Image.open(f'img\img{b}.jpg')
        img.paste(img1, (0, 0 + b1))
        print(f'img{b}.jpg')
        b +=1
        b1 += 20

    img.save(f"out{b}.jpg")

b = 1
for i in range(400):
    save_image(b)
    b += 1000
 
Последнее редактирование:
  • Оценить
Реакции: one
К стати опытным путем было выяснено, может будущим поколениям пригодится, не знаю с чем связано версия одна и таже и python и версия tesseract, в linux она распознает один и тотже набор текстов с дефолтной библиотекой на 30-40% больше.
 
В GSA captcha breyker - есть возможность побыренькому в разделе sdk подобрать фильтр для распознавания. Так как текст там скорее всего не сильно искажен, то можно это сделать быстро. И SDK модуль работает даже когда демо закончилось. Так что можно быстрее чем через месяц щелкнуть эту штуку.
 
  • Оценить
Реакции: BPOH
если шрифт не изменяется, то вполне можно сделать на C# - режете картинку на буквы и в массив загоняете 1 - есть цвет, 0 - нет цвета, потом сравниваете.
 
  • Оценить
Реакции: BPOH
В GSA captcha breyker - есть возможность побыренькому в разделе sdk подобрать фильтр для распознавания. Так как текст там скорее всего не сильно искажен, то можно это сделать быстро. И SDK модуль работает даже когда демо закончилось. Так что можно быстрее чем через месяц щелкнуть эту штуку.
Попробовал за пол часа не разобрался, с фильтрами наигрался но с трудом пару букв угадал, архив с картинками прикреплю, может кто потренироваться надумает.
если шрифт не изменяется, то вполне можно сделать на C# - режете картинку на буквы и в массив загоняете 1 - есть цвет, 0 - нет цвета, потом сравниваете.
В шарпе к сожалению не силен
 

Вложения

  • img.rar
    img.rar
    11,7 KB · Просмотры: 125
C#:
Развернуть Свернуть Копировать
public static string RecognizeEmail(Image image)
{
    var letters = new Dictionary<uint, string>
    {
        {1288792489, "" },
        {1626703122, "@"},
        {1769998881, "."},
        {1493272944, "_"},
        {3197976267, "-"},
        {3909147509, "a"},
        {376842207,  "b"},
        {1799116282, "c"},
        {2498030206, "d"},
        {2745527567, "e"},
        {3608642261, "f"},
        {3698512107, "g"},
        {285210550,  "h"},
        {2592223230, "i"},
        {3549459756, "j"},
        {2839448178, "k"},
        {2466444227, "l"},
        {1337034184, "m"},
        {1616237527, "n"},
        {2276519761, "o"},
        {1450716019, "p"},
        {1107090806, "r"},
        {3198435235, "s"},
        {3016806566, "t"},
        {4279155678, "u"},
        {2627837479, "v"},
        {3402494643, "x"},
        {1314130073, "y"},
        {3782604024, "z"},
        {2465172642, "L"},
        {1591944625, "M"},
        {2427343186, "0"},
        {1230207695, "1"},
        {3381667143, "2"},
        {3116171335, "3"},
        {1264925335, "4"},
        {2013810758, "5"},
        {4015866205, "6"},
        {448374844,  "7"},
        {3675590149, "8"},
        {2806702695, "9"},
    };

    var answer = "";
    var imgs = SplitImage(image, 9, 20);
    foreach (var img in imgs)
    {
        var crc32 = Crc32(img);
        if (letters.ContainsKey(crc32))       
            answer += letters[crc32];
        else
        {
            answer += "?";
            img.Save(crc32 + ".png", ImageFormat.Png);
        }
    }
    
    return answer;
}

public static Image[] SplitImage(Image image, int width, int height)
{
    var list = new List<Image>();
    using (Bitmap bmpImage = new Bitmap(image))
    {
        for (int x = 0; x < image.Width / width; x++)       
            for (int y = 0; y < image.Height / height; y++)           
                list.Add(bmpImage.Clone(new Rectangle(x * width, y * height, width, height), bmpImage.PixelFormat));
        return list.ToArray();
    }
}

public static uint Crc32(Image image)
{
    using (var m = new MemoryStream())
    {
        image.Save(m, ImageFormat.Bmp);
        var source = m.ToArray();
        var crc_table = new uint[256];
        uint crc;
        for (uint i = 0; i < 256; i++)
        {
            crc = i;
            for (uint j = 0; j < 8; j++) crc = (crc & 1) != 0 ? (crc >> 1) ^ 0xEDB88320 : crc >> 1;
            crc_table[i] = crc;
        }
        crc = 0xFFFFFFFF;
        foreach (byte s in source) crc = crc_table[(crc ^ s) & 0xFF] ^ (crc >> 8);
        crc ^= 0xFFFFFFFF;
        return crc;
    }
}

Вроде работает, рубит картинку на символы 9x20 пикселей, от каждой берёт Crc32-хэш и сравнивает с таблицей, не было букв "w" и "q" сам добавишь, если встретишь, еще иногда большие буквы встречаются и неправильные email'ы (с пробелами, без доменов)

image_2021-01-04_20-40-58.png
 
Последнее редактирование:
  • Оценить
Реакции: BAZAg, Norim и BPOH
Спасибо огромное!
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)