""" 验证码生成器基类 所有验证码生成器继承此基类,实现 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)