Копался в своих файлах и обнаружил старый проект, созданный на волне популярности статей про разгадывание капчи на хабре. А конкретно вот
Для теста был выбран один популярный закрытый бложик друзей и его тогдашняя капча (сейчас там стандартная гуглокапча). Первым делом нужно было очистить капчу от мусора и перевести в черно-белый вид
Все, что не черный цвет, заменяем белым цветом. Потом проверяем по очереди каждый черный пиксель по горизонтали. Если у него справа и слева белый цвет, то удаляем его. Повторяем то же самое только по вертикали. Получаем:
Я не стал использовать алгоритм с разделением по гистограмме из хабростатьи т.к. буквы капчи плавают по высоте и случайным поворачиваются. Как настоящий лентяй я взял пакет OpenCV и поручил ему определять контуры букв:
Насохранял вырезанных букв (примерно по сотне каждой буквы), раскидал их по папкам.
Все, убийца капчи готов. Сравниваем векторным способом из хабрастатьи буквы с капчи с нашими сохраненными, получаем текстовую строчку. Пишем брутфорсер и развлекаемся как можем.
От лайка не откажусь ))
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!
статьей. Чем мне понравился алгоритм, так это тем, что не надо никаких нейросетей, которые не гарантируют 100% результат. А с этим алгоритмом распознавание получалось 100%.Для теста был выбран один популярный закрытый бложик друзей и его тогдашняя капча (сейчас там стандартная гуглокапча). Первым делом нужно было очистить капчу от мусора и перевести в черно-белый вид
Все, что не черный цвет, заменяем белым цветом. Потом проверяем по очереди каждый черный пиксель по горизонтали. Если у него справа и слева белый цвет, то удаляем его. Повторяем то же самое только по вертикали. Получаем:
Я не стал использовать алгоритм с разделением по гистограмме из хабростатьи т.к. буквы капчи плавают по высоте и случайным поворачиваются. Как настоящий лентяй я взял пакет OpenCV и поручил ему определять контуры букв:
Код:
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray,(5,5),0)
contours,hierarchy = cv2.findContours(gray,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
letters = []
for cnt in contours:
if cv2.contourArea(cnt)>50:
[x,y,w,h] = cv2.boundingRect(cnt)
if h>15:
letters.append((x,y,x+w,y+h))
Все, убийца капчи готов. Сравниваем векторным способом из хабрастатьи буквы с капчи с нашими сохраненными, получаем текстовую строчку. Пишем брутфорсер и развлекаемся как можем.
От лайка не откажусь ))