| """ε ¨ιΎθ·―ε ₯ε£οΌι’ε€η β ζη₯ β ηθ§£ β ε³η""" | |
| 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]) | |