如何从复杂的验证码中提取数字

时间:2019-10-25 05:48:17

标签: python tesseract captcha python-tesseract

我正在尝试为以下图片解析验证码

https://ibb.co/35X723J

我尝试过使用tessaract

data = br.open(captchaurl).read()
b = bytearray(data)
save = open(filename, 'wb')
save.write(data)
save.close()
ctext= pytesseract.image_to_string(Image.open(filename))

2 个答案:

答案 0 :(得分:1)

选项1:

我认为使用Pytesseract应该可以解决此问题。我尝试了您的代码,当我输入精确裁剪的验证码图像作为pytesseract的输入时,它给出了以下结果:

输入图像:

This is the cropped picture from the URL that you specified

输出:

  @override
  void initState() {
    super.initState();
    Connectivity().onConnectivityChanged.listen((ConnectivityResult result){
      if(result == ConnectivityResult.none){

          // use Future.delayed() if you want context in initState
          Future.delayed(Duration.zero,(){
            print(" Internet connection is lost");        
          });

      }
    });
  }

我建议您不要将完整的页面网址作为pytesseract的输入。而是将确切的图片网址指定为“ https://i.ibb.co/RGn9fF5/Jpeg-Image-CS2.jpg”,这样只会显示图片。

关于输出中多余的'oS'字符,您可以执行字符串操作以截除输出中数字以外的字符。

print(ctext)
 '436359 oS'

选项2:

您还可以使用Google的OCR完成此操作,从而为您提供准确的结果而不会出现错误。尽管我已经向您展示了它的Web界面,但google拥有不错的python库,您可以通过它使用python本身来完成此操作。看起来像这样:

enter image description here

答案 1 :(得分:0)

这是一种解决方法。您需要清除一点图像,但不会得到理想的结果。请尝试以下操作:

try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract
import cv2

file = 'sample.jpg'

img = cv2.imread(file, cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, None, fx=10, fy=10, interpolation=cv2.INTER_LINEAR)
img = cv2.medianBlur(img, 9)
th, img = cv2.threshold(img, 185, 255, cv2.THRESH_BINARY)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (4,8))
img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imwrite("sample2.jpg", img)


file = 'sample2.jpg'
text = pytesseract.image_to_string(file)
print(''.join(x for x in text if x.isdigit()))