代码拉取完成,页面将自动刷新
# 生成验证码并识别
from captcha.image import ImageCaptcha, random_color
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import cv2, string, random, os
# 生成验证码
def generate():
letters = string.ascii_letters + string.digits
chars = ''.join(random.sample(letters, k=4))
image = ImageCaptcha()
# 生成验证码
captcha_ = image.create_captcha_image(chars=chars,
color=random_color(0, 256),
background=random_color(0, 256))
# 转成灰度图后再转成numpy格式
img = np.array(captcha_.convert('L'))
# 计算平均阈值
threshold = img.sum() // img.size
# print(threshold)
# 将其转成二值化
_, img = cv2.threshold(img, threshold, 255, cv2.THRESH_BINARY)
# 将其转成白底黑字
if img[0, 0] == 0: # 判断左上角的颜色,如果是黑色就转换
# 找出目前黑色的索引
black_index = np.where(img == 0)
# 找出目前白色的索引
white_index = np.where(img != 0)
img[black_index] = 255
img[white_index] = 0
# 将全部小于255的值全部设置为0
img[np.where(img < 255)] = 0
# showImg(img, title=chars)
return (img, chars)
# 投影切割图片的坐标
def projection_coordinate():
img, chars = generate()
# print(img.shape)
# print(img[:, 7])
# 计算每一列为0的个数
cols_sum = []
for index in range(img.shape[1]):
# print(img[:, index])
col = img[:, index]
cols_sum.append(len(np.where(col == 0)[0]))
cols_sum = np.array(cols_sum)
# print(cols_sum)
# print(chars)
# 记录索引,初始为0
index = 0
# 记录要裁剪的区域坐标
crop_lis = []
for ind, num in enumerate(cols_sum):
# 如果num为0,那么说明当前列没有黑点,index=ind
if num == 0:
index = ind
else:
# print(cols_sum[ind + 1:ind + 4])
if ind - index > 5 and all(cols_sum[ind + 1:ind + 4] == 0):
crop_lis.append((index - 2, ind + 2))
index = ind
# print(cols_sum)
# print(crop_lis)
# if len(crop_lis) != 4:
# crop_lis = []
return (img, crop_lis, chars)
# 切割图片
def crop_img():
img, coordinate, chars = projection_coordinate()
if not coordinate:
return
# 保存切割的4份图片
results = []
for coord, c in zip(coordinate, chars):
# 切割
c_img = img[0:, coord[0]:coord[1]]
# 重新调整图片大小,(20,60)
c_img = cv2.resize(c_img, (20, 60))
# showImg(c_img, c)
results.append(c_img)
return (results, chars)
if __name__ == "__main__":
results, chars = crop_img()
print(len(results), chars)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。