Align task API and add FunCaptcha support
This commit is contained in:
48
config.py
48
config.py
@@ -19,6 +19,7 @@ DATA_DIR = PROJECT_ROOT / "data"
|
||||
SYNTHETIC_DIR = DATA_DIR / "synthetic"
|
||||
REAL_DIR = DATA_DIR / "real"
|
||||
CLASSIFIER_DIR = DATA_DIR / "classifier"
|
||||
SERVER_TASKS_DIR = DATA_DIR / "server_tasks"
|
||||
|
||||
# 合成数据子目录
|
||||
SYNTHETIC_NORMAL_DIR = SYNTHETIC_DIR / "normal"
|
||||
@@ -33,6 +34,8 @@ REAL_MATH_DIR = REAL_DIR / "math"
|
||||
REAL_3D_TEXT_DIR = REAL_DIR / "3d_text"
|
||||
REAL_3D_ROTATE_DIR = REAL_DIR / "3d_rotate"
|
||||
REAL_3D_SLIDER_DIR = REAL_DIR / "3d_slider"
|
||||
REAL_FUN_CAPTCHA_DIR = REAL_DIR / "funcaptcha"
|
||||
REAL_FUN_CAPTCHA_ROLLBALL_DIR = REAL_FUN_CAPTCHA_DIR / "4_3d_rollball_animals"
|
||||
|
||||
# Solver 数据目录
|
||||
SOLVER_DATA_DIR = DATA_DIR / "solver"
|
||||
@@ -51,8 +54,10 @@ for _dir in [
|
||||
SYNTHETIC_3D_TEXT_DIR, SYNTHETIC_3D_ROTATE_DIR, SYNTHETIC_3D_SLIDER_DIR,
|
||||
REAL_NORMAL_DIR, REAL_MATH_DIR,
|
||||
REAL_3D_TEXT_DIR, REAL_3D_ROTATE_DIR, REAL_3D_SLIDER_DIR,
|
||||
REAL_FUN_CAPTCHA_DIR, REAL_FUN_CAPTCHA_ROLLBALL_DIR,
|
||||
CLASSIFIER_DIR, CHECKPOINTS_DIR, ONNX_DIR,
|
||||
SLIDE_DATA_DIR, ROTATE_SOLVER_DATA_DIR,
|
||||
SERVER_TASKS_DIR,
|
||||
]:
|
||||
_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
@@ -82,6 +87,7 @@ IMAGE_SIZE = {
|
||||
"3d_text": (60, 160), # 3D 立体文字识别
|
||||
"3d_rotate": (80, 80), # 3D 旋转角度回归 (正方形)
|
||||
"3d_slider": (80, 240), # 3D 滑块偏移回归
|
||||
"funcaptcha_rollball_animals": (48, 48), # FunCaptcha 专项 Siamese 输入
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
@@ -99,7 +105,7 @@ GENERATE_CONFIG = {
|
||||
},
|
||||
"math": {
|
||||
"operand_range": (1, 30), # 操作数范围
|
||||
"operators": ["+", "-", "×"], # 支持的运算符 (除法只生成能整除的)
|
||||
"operators": ["+", "-", "×", "÷"], # 支持的运算符 (除法只生成能整除的)
|
||||
"image_size": (160, 40), # 生成图片尺寸 (W, H)
|
||||
"bg_color_range": (230, 255),
|
||||
"rotation_range": (-10, 10),
|
||||
@@ -184,6 +190,14 @@ TRAIN_CONFIG = {
|
||||
"loss": "SmoothL1",
|
||||
"val_split": 0.1,
|
||||
},
|
||||
"funcaptcha_rollball_animals": {
|
||||
"epochs": 30,
|
||||
"batch_size": 64,
|
||||
"lr": 1e-3,
|
||||
"scheduler": "cosine",
|
||||
"loss": "BCEWithLogits",
|
||||
"val_split": 0.1,
|
||||
},
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
@@ -226,6 +240,23 @@ INFERENCE_CONFIG = {
|
||||
"normalize_std": 0.5,
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# FunCaptcha 专项任务配置
|
||||
# ============================================================
|
||||
FUN_CAPTCHA_TASKS = {
|
||||
"4_3d_rollball_animals": {
|
||||
"artifact_name": "funcaptcha_rollball_animals",
|
||||
"checkpoint_name": "funcaptcha_rollball_animals",
|
||||
"data_dir": REAL_FUN_CAPTCHA_ROLLBALL_DIR,
|
||||
"input_size": IMAGE_SIZE["funcaptcha_rollball_animals"], # (H, W)
|
||||
"tile_size": (200, 200), # (W, H)
|
||||
"reference_box": (0, 200, 200, 400), # (x1, y1, x2, y2)
|
||||
"num_candidates": 4,
|
||||
"answer_index_base": 0,
|
||||
"channels": 3,
|
||||
},
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# 随机种子 (保证数据生成可复现)
|
||||
# ============================================================
|
||||
@@ -246,6 +277,18 @@ def get_device():
|
||||
SERVER_CONFIG = {
|
||||
"host": "0.0.0.0",
|
||||
"port": 8080,
|
||||
"task_ttl_seconds": 600,
|
||||
"task_workers": 2,
|
||||
"tasks_dir": str(SERVER_TASKS_DIR),
|
||||
"callback_timeout_seconds": 10,
|
||||
"callback_max_retries": 2,
|
||||
"callback_retry_delay_seconds": 1.0,
|
||||
"callback_retry_backoff": 2.0,
|
||||
"callback_signing_secret": os.getenv("CALLBACK_SIGNING_SECRET")
|
||||
or os.getenv("CAPTCHA_CALLBACK_SIGNING_SECRET"),
|
||||
"balance": 999999.0,
|
||||
"task_cost": 0.0,
|
||||
"client_key": os.getenv("CLIENT_KEY") or os.getenv("CAPTCHA_CLIENT_KEY"),
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
@@ -281,6 +324,7 @@ SOLVER_TRAIN_CONFIG = {
|
||||
}
|
||||
|
||||
SOLVER_REGRESSION_RANGE = {
|
||||
"slide": (0, 1), # 归一化百分比
|
||||
# 在 solver 输入宽度空间内预测缺口中心 x 坐标,再通过 sigmoid 归一化到 [0, 1]
|
||||
"slide": (0, SOLVER_CONFIG["slide"]["cnn_input_size"][1]),
|
||||
"rotate": (0, 360), # 角度
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user