Download scripts/camera/utils/text.py from KangLiao/Puffin: direct link, hf CLI and curl.
- Browser
- Download file 1.33 kB
-
https://huggingface.co/spaces/KangLiao/Puffin/resolve/main/scripts/camera/utils/text.py
- Command line
-
hf download hf://spaces/KangLiao/Puffin/scripts/camera/utils/text.py
-
curl -L -o text.py https://huggingface.co/spaces/KangLiao/Puffin/resolve/main/scripts/camera/utils/text.py
1.33 kB
| import re | |
| from typing import Tuple | |
| def parse_camera_params( | |
| text: str, | |
| mode: str = "base" | |
| ) -> Tuple[float, float, float]: | |
| """ | |
| Extract roll, pitch, fov from text using one of two patterns: | |
| - 'base' mode: ... are: roll, pitch, fov. | |
| - 'cot' mode: <answer>roll, pitch, fov</answer> | |
| Args: | |
| text: The full text to search. | |
| mode: One of {"base", "cot"}. | |
| Returns: | |
| roll, pitch, fov as floats. | |
| Raises: | |
| ValueError if the chosen pattern is not found, or mode is invalid. | |
| """ | |
| # compile both regexes | |
| pat_base = re.compile( | |
| r"are:\s*([+-]?\d+(?:\.\d+)?)\s*,\s*" | |
| r"([+-]?\d+(?:\.\d+)?)\s*,\s*" | |
| r"([+-]?\d+(?:\.\d+)?)[\.\s]*$" | |
| ) | |
| pat_cot = re.compile( | |
| r"<answer>\s*([+-]?\d+(?:\.\d+)?)\s*,\s*" | |
| r"([+-]?\d+(?:\.\d+)?)\s*,\s*" | |
| r"([+-]?\d+(?:\.\d+)?)\s*</answer>" | |
| ) | |
| m = None | |
| if mode == "base": | |
| m = pat_base.search(text) | |
| elif mode == "cot": | |
| m = pat_cot.search(text) | |
| else: | |
| raise ValueError(f"Invalid mode: {mode!r}. Choose 'base', 'cot', or 'auto'.") | |
| if not m: | |
| raise ValueError(f"No camera parameters found using mode '{mode}'.") | |
| roll_s, pitch_s, fov_s = m.group(1), m.group(2), m.group(3) | |
| return float(roll_s), float(pitch_s), float(fov_s) |