Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """ | |
| Command-line interface for comic panel extraction. | |
| """ | |
| import argparse | |
| import sys | |
| import json | |
| from typing import Optional, List | |
| from .main import ComicPanelExtractor | |
| from .config import Config | |
| class ComicPanelCLI: | |
| """Command-line interface for comic panel extraction.""" | |
| def __init__(self): | |
| self.parser = self._create_parser() | |
| def _create_parser(self) -> argparse.ArgumentParser: | |
| """Create argument parser.""" | |
| parser = argparse.ArgumentParser( | |
| prog="comic-extract", | |
| description="Extract panels from comic book images using OCR and image processing", | |
| formatter_class=argparse.RawDescriptionHelpFormatter, | |
| epilog=""" | |
| Examples: | |
| comic-extract comic.jpg | |
| comic-extract comic.jpg --config config.json | |
| """ | |
| ) | |
| # Required arguments | |
| parser.add_argument( | |
| "input_path", | |
| help="Path to the comic image file" | |
| ) | |
| # Configuration file | |
| parser.add_argument( | |
| "--config", | |
| help="Path to JSON configuration file" | |
| ) | |
| return parser | |
| def run(self, args: Optional[List[str]] = None) -> int: | |
| """Main CLI entry point.""" | |
| try: | |
| parsed_args = self.parser.parse_args(args) | |
| # Load configuration | |
| config = self._load_config(parsed_args) | |
| ComicPanelExtractor(config).extract_panels_from_comic() | |
| except Exception as e: | |
| print(f"❌ Error: {e}", file=sys.stderr) | |
| return 1 | |
| def _load_config(self, args: argparse.Namespace) -> Config: | |
| """Load configuration from file or create from arguments.""" | |
| config = Config() | |
| # Load from config file if provided | |
| if args.config: | |
| try: | |
| with open(args.config, 'r', encoding='utf-8') as f: | |
| config_data = json.load(f) | |
| for key, value in config_data.items(): | |
| if hasattr(config, key): | |
| setattr(config, key, value) | |
| except Exception as e: | |
| print(f"⚠️ Warning: Could not load config file: {e}", file=sys.stderr) | |
| # Override with command line arguments | |
| config.input_path = args.input_path | |
| return config | |
| def main(): | |
| """Main entry point for CLI.""" | |
| cli = ComicPanelCLI() | |
| sys.exit(cli.run()) | |
| if __name__ == "__main__": | |
| main() |