Files
CaptchBreaker/generators/base.py
2026-03-10 18:47:29 +08:00

62 lines
1.6 KiB
Python

"""
验证码生成器基类
所有验证码生成器继承此基类,实现 generate() 方法。
基类提供通用的 generate_dataset() 批量生成能力。
"""
import os
import random
from pathlib import Path
from PIL import Image
from tqdm import tqdm
from config import RANDOM_SEED
class BaseCaptchaGenerator:
"""验证码生成器基类。"""
def __init__(self, seed: int = RANDOM_SEED):
"""
初始化生成器。
Args:
seed: 随机种子,保证数据生成可复现。
"""
self.seed = seed
self.rng = random.Random(seed)
def generate(self, text: str | None = None) -> tuple[Image.Image, str]:
"""
生成一张验证码图片。
Args:
text: 指定标签文本。为 None 时随机生成。
Returns:
(图片, 标签文本)
"""
raise NotImplementedError
def generate_dataset(self, num_samples: int, output_dir: str) -> None:
"""
批量生成验证码数据集。
文件名格式: {label}_{index:06d}.png
Args:
num_samples: 生成数量。
output_dir: 输出目录路径。
"""
output_path = Path(output_dir)
output_path.mkdir(parents=True, exist_ok=True)
# 重置随机种子,保证每次批量生成结果一致
self.rng = random.Random(self.seed)
for i in tqdm(range(num_samples), desc=f"Generating → {output_path.name}"):
img, label = self.generate()
filename = f"{label}_{i:06d}.png"
img.save(output_path / filename)