Чтение капчи с использованием тессеракта дает неправильные показания - PullRequest
0 голосов
/ 29 декабря 2018
from urllib import urlopen,urlretrieve
from PIL import Image,ImageOps
from bs4 import BeautifulSoup
import requests
import subprocess
def cleanImage(imagePath):
    image=Image.open(imagePath)
    image=image.point(lambda x:0 if x<143 else 255)
    borederImage=ImageOps.expand(image,border=20,fill="white")
    borederImage.save(imagePath)
html=urlopen("http://www.pythonscraping.com/humans-only")
soup=BeautifulSoup(html,'html.parser')
imageLocation=soup.find('img',{'title':'Image CAPTCHA'})['src']
formBuildID=soup.find('input',{'name':'form_build_id'})['value']
captchaSID=soup.find('input',{'name':'captcha_sid'})['value']
captchaToken=soup.find('input',{'name':'captcha_token'})['value']
captchaURL="http://pythonscraping.com"+imageLocation
urlretrieve(captchaURL,"captcha.jpg")
cleanImage("captcha.jpg")
p=subprocess.Popen(['tesseract','captcha.jpg',"captcha"],stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p.wait()
f=open('captcha.txt','r')
captchaResponce=f.read().replace(" ","").replace("\n","")
print "captcha responce attempt "+ captchaResponce+"\n\n"
try:
    print captchaResponce
    print len(captchaResponce)
    print type(captchaResponce)
except:
    print "No way"

Здравствуйте

Это мой код для сайта тестирования, который загружает образ CAPTCHA (каждый раз, когда вы открываете сайт, вы получаете новую CAPTCHA), а затем читаете его, используя tesseract в python.

Я пытался загрузить изображение напрямую и прочитать его напрямую, используя tesseract, оно не получило правильное показание CAPTCHA, поэтому я добавил функцию cleanImage, чтобы помочь, но также он не прочитал его правильно.

После поиска в Интернете моя проблема заключается в том, что tesseract не "обучен" правильно обрабатывать изображения.

Любая помощь очень ценится.** этот код взят из веб-книги, также целью этого примера является чтение капчи и отправка формы.Это никоим образом не является атакующим или оскорбительным инструментом для перегрузки или нанесения вреда сайту.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

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

enter image description here

Если вы используете этот типкапча например я сделал:

  1. Удалить "белый шум"
  2. Удалить серые линии
  3. Удалить серые точки
  4. Заполнить пробелы
  5. Изменить на изображение в оттенках серого
  6. СЕЙЧАС сделать OCR с тессерактом

Вы можете проверить код, как это делается, и более подробно здесь: https://github.com/cracker0dks/CaptchaSolver

0 голосов
/ 06 января 2019

Tesseract обучен делать более обычное распознавание текста, и CAPTCHA очень сложен для него, поскольку он не выровнен, может иметь вращение, совпадать и различаться по размеру и шрифту.Вы должны попытаться вызвать tesseract в другом режиме сегментации страницы (опция --psm).Вот список всех возможных значений:

Page segmentation modes:
0    Orientation and script detection (OSD) only.
1    Automatic page segmentation with OSD.
2    Automatic page segmentation, but no OSD, or OCR.
3    Fully automatic page segmentation, but no OSD. (Default)
4    Assume a single column of text of variable sizes.
5    Assume a single uniform block of vertically aligned text.
6    Assume a single uniform block of text.
7    Treat the image as a single text line.
8    Treat the image as a single word.
9    Treat the image as a single word in a circle.
10   Treat the image as a single character.
11   Sparse text. Find as much text as possible in no particular order.
12   Sparse text with OSD.
13   Raw line. Treat the image as a single text line,
     bypassing hacks that are Tesseract-specific.

Попробуйте режимы с OSD (например, 1, 7, 11, 12, 13).Это улучшит вашу скорость распознавания.Но для реального улучшения вам нужно написать программу, которая находит отдельные буквы (сегментирует изображение) и отправляет их по tesseract по одной (используя --psm 10).opencv - отличная библиотека для работы с изображениями. Этот пост может стать хорошим началом.

Что касается опасений относительно законности CAPTCHA признания: это этическая проблема и выходит за рамки SO.Pythonscraping - классический сайт тестирования, и я не вижу никаких проблем, чтобы помочь решить этот вопрос.Эта проблема аналогична тому, как обучение самообороне может быть использовано для нападения на людей.

В любом случае, CAPTCHA - это очень слабая проблема подтверждения человеком, и в настоящее время ни один сайт не должен его использовать, в то время как reCAPTCHAнамного сильнее, дружелюбнее и свободнее.

...