我正在尝试为以下图片解析验证码
我尝试过使用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))
答案 0 :(得分:1)
选项1:
我认为使用Pytesseract应该可以解决此问题。我尝试了您的代码,当我输入精确裁剪的验证码图像作为pytesseract的输入时,它给出了以下结果:
输入图像:
输出:
@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本身来完成此操作。看起来像这样:
答案 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()))