Initialize repository
This commit is contained in:
61
generators/base.py
Normal file
61
generators/base.py
Normal file
@@ -0,0 +1,61 @@
|
||||
"""
|
||||
验证码生成器基类
|
||||
|
||||
所有验证码生成器继承此基类,实现 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)
|
||||
Reference in New Issue
Block a user