jebin2's picture
made thin border
e05ccab
#!/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()