Files
Geo1230 ca8e48fb7a Initial commit
ComfyUI-DeepseekOCR plugin v1.0.0
2025-11-10 15:18:14 +08:00

46 lines
1.9 KiB
Python

"""
将 UI 选择(分辨率预设/任务模式)映射为推理所需的参数与 Prompt。
这里全部是“纯函数”,不依赖 GPU/Transformers,易于单测。
"""
from typing import Dict
# ---- 分辨率映射(DeepSeek-OCR README 的推荐预设) ----
# Gundam 为动态分辨率(大文档更准)
_PRESET_TABLE = {
"tiny": dict(base_size=512, image_size=512, crop_mode=False, test_compress=False),
"small": dict(base_size=640, image_size=640, crop_mode=False, test_compress=False),
"base": dict(base_size=1024, image_size=1024, crop_mode=False, test_compress=False),
"large": dict(base_size=1280, image_size=1280, crop_mode=False, test_compress=False),
"gundam": dict(base_size=1024, image_size=640, crop_mode=True, test_compress=True),
}
def map_resolution(preset: str) -> Dict:
"""
输入:'Gundam'/'Tiny'/'Small'/'Base'/'Large'(大小写均可)
输出:infer(...) 所需四个参数。
"""
key = (preset or "gundam").strip().lower()
return _PRESET_TABLE.get(key, _PRESET_TABLE["gundam"]).copy()
def build_prompt(task: str, ref_text: str = "") -> str:
"""
将任务模式转成官方示例的 Prompt 模板。
- Free OCR
- Convert to Markdown
- Parse Figure
- Locate by Reference (需要 ref_text)
"""
t = (task or "").strip().lower()
if t in ("free ocr", "free_ocr", "free"):
return "<image>\nFree OCR."
if t in ("convert to markdown", "markdown", "md"):
return "<image>\n<|grounding|>Convert the document to markdown."
if t in ("parse figure", "figure", "chart", "table"):
return "<image>\nParse the figure."
if t in ("locate by reference", "locate", "grounding"):
ref = ref_text or "object"
return f"<image>\nLocate <|ref|>{ref}<|/ref|> in the image."
# 默认兜底
return "<image>\nOCR this image."