"""全链路入口:预处理 → 感知 → 理解 → 决策""" from PIL import Image from .preprocess.pipeline import run as preprocess_run from .perception.pipeline import run as perception_run from .understanding.pipeline import run as understanding_run from .decision.pipeline import decide, DecisionResult def moderate(img: Image.Image, fmt: str, debug_prefix: str = None) -> DecisionResult: pre = preprocess_run(img, fmt) results = [] for sub_img in pre.images: perc = perception_run(sub_img, pre.scene_result, debug_prefix) texts = [b.text for b in perc.ocr.blocks] und = understanding_run(texts) result = decide( scene=pre.scene_result.scene, nsfw=perc.nsfw, qr=perc.qr, ocr=perc.ocr, rule_hits=und.rule_hits, ) results.append(result) # 多切片取最高风险 priority = {"REJECT": 0, "REVIEW": 1, "PASS": 2} return min(results, key=lambda r: priority[r.action])