求助!关于图形验证码的识别方法
类似这种验证码,通过Tesseract-OCR,无论将图片怎么调整,都不能识别。求大神告知好的图形验证码识别方法,因为需求网站的图形验证码很简单,所以希望获取验证码的方法越简单越好。
传送门1
传送门2
传送门3(推荐) Hello. 发表于 2020-7-19 14:45
传送门1
传送门2
传送门3(推荐)
老哥,推荐的那个识别不了这个数字验证码{:10_266:} 飘花飞雪 发表于 2020-7-19 15:02
老哥,推荐的那个识别不了这个数字验证码
还有俩{:10_256:} Hello. 发表于 2020-7-19 14:45
传送门1
传送门2
传送门3(推荐)
调整了阈值已经很清晰了,但是识别不出来{:10_266:} from PIL import Image
import pytesseract
import cv2
from urllib.request import urlretrieve
pytesseract.pytesseract.tesseract_cmd = r"F:\Program Files (x86)\Tesseract-OCR\tesseract.exe"
urlretrieve("http://wt.yygjj.com.cn/captcha.jpg","test.jpg")
image = Image.open("test.jpg")
image = image.convert("L")
threshold = 135
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
# image = cv2.imread("test.jpg",cv2.IMREAD_GRAYSCALE)
# #
# cv2.imwrite('newimage.png', image)
#image = cv2.imread("C:/Users/fengz/Desktop/123.jpg",cv2.IMREAD_GRAYSCALE)
#gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# cv2.imshow("aaa",image)
# cv2.waitKey(0)# 单位毫秒
# #
# cv2.destroyAllWindows()
# cv2.destroyWindow("bug")
# cv2.imwrite('newimage.png', image)
#
image = image.point(table,"1")
image.show()
text = pytesseract.image_to_string(image)
#
print(text) 飘花飞雪 发表于 2020-7-19 15:06
调整了阈值已经很清晰了,但是识别不出来
连打印都打印不出来? Hello. 发表于 2020-7-19 14:45
传送门1
传送门2
传送门3(推荐)
老哥,我粘贴了代码,你能帮忙运行试试吗? Hello. 发表于 2020-7-19 15:07
连打印都打印不出来?
打印不出来,CMD里面直接运行也识别不出来 不行哈哈,你看下第二篇{:10_266:} Hello. 发表于 2020-7-19 15:13
不行哈哈,你看下第二篇
我试试{:10_254:} Hello. 发表于 2020-7-19 15:13
不行哈哈,你看下第二篇
和第三篇差不多,方法我都试了{:10_266:} 本帖最后由 Hello. 于 2020-7-19 15:22 编辑
好像没看到你二值化
img = binarizing(imgry,130) #二值化
再看看这个 Hello. 发表于 2020-7-19 15:19
好像没看到你二值化
.point不也是二值化处理吗?你这是哪个模块的函数 飘花飞雪 发表于 2020-7-19 22:56
.point不也是二值化处理吗?你这是哪个模块的函数
好吧,可能没注意到,我无能为力了{:10_319:} Hello. 发表于 2020-7-19 15:19
好像没看到你二值化
这一篇我也看了,测试网站的图形码不做二值化也能读出来{:10_250:} 飘花飞雪 发表于 2020-7-19 22:59
这一篇我也看了,测试网站的图形码不做二值化也能读出来
哈哈,二值化会更清晰
我有个处理图片的代码,你要不要看一看(虽然可能没啥用) 好的,我参考一下 # -*- coding:utf-8 -*-
import cv2
import numpy as np
from tkinter import filedialog, Tk
from os import getcwd
from re import findall
def open_path():
# 图片路径
root = Tk()
root.withdraw()
file_path = (filedialog.askopenfilename(title='选择图片文件', filetypes=[('All Files', '*')]))
return file_path
def dodgeNaive(image, mask):
# determine the shape of the input image
width, height = image.shape[:2]
# prepare output argument with same size as image
blend = np.zeros((width, height), np.uint8)
for col in range(width):
for row in range(height):
# do for every pixel
if mask == 255:
# avoid division by zero
blend = 255
else:
# shift image pixel value by 8 bits
# divide by the inverse of the mask
tmp = (image << 8) / (255 - mask)
# print('tmp={}'.format(tmp.shape))
# make sure resulting value stays within bounds
if tmp.any() > 255:
tmp = 255
blend = tmp
return blend
def dodgeV2(image, mask):
return cv2.divide(image, 255 - mask, scale=256)
def burnV2(image, mask):
return 255 - cv2.divide(255 - image, 255 - mask, scale=256)
def rgb_to_sketch(src_image_name):
print('转换中......')
img_rgb = cv2.imread(src_image_name)
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
# 读取图片时直接转换操作
# img_gray = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE)
img_gray_inv = 255 - img_gray
img_blur = cv2.GaussianBlur(img_gray_inv, ksize=(21, 21),
sigmaX=0, sigmaY=0)
img_blend = dodgeV2(img_gray, img_blur)
# cv2.imshow('original', img_rgb)
# cv2.imshow('gray', img_gray)
# cv2.imshow('gray_inv', img_gray_inv)
# cv2.imshow('gray_blur', img_blur)
cv2.imwrite(dst_image_name, img_blend)
save_path = getcwd() + "\\" + dst_image_name# 保存路径
print('转换完成!!!\n')
print('保存路径:' + save_path)
cv2.imshow(save_path, img_blend)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
print('请选择图片,路径不要含中文:')
src_image_name = open_path()# 文件路径
print(src_image_name+'\n')
image_name = ''.join(findall(r'[^\\/:*?"<>|\r\n]+, src_image_name))# 获取文件名
dst_image_name = 'Sketch_' + image_name
rgb_to_sketch(src_image_name) Hello. 发表于 2020-7-19 23:00
哈哈,二值化会更清晰
我有个处理图片的代码,你要不要看一看(虽然可能没啥用)
谢谢了,我参考一下
页:
[1]