Spaces:
Running
Running
| title: Comic Panel Extractor | |
| emoji: π | |
| colorFrom: indigo | |
| colorTo: purple | |
| sdk: docker | |
| pinned: false | |
| https://jebin2-comic-panel-extractor.hf.space/ | |
| # π Comic Panel Extractor | |
| Automatically extract panels from comic pages using YOLO segmentation and image processing. | |
| > **Note:** Currently using pretrained model from [mosesb/best-comic-panel-detection](https://huggingface.co/mosesb/best-comic-panel-detection) until custom training is complete. The model downloads automatically on first run. | |
| ## Installation | |
| ```bash | |
| git clone https://github.com/jebin2/comic-panel-extractor.git | |
| cd comic-panel-extractor | |
| pip install -e . | |
| ``` | |
| ## Usage | |
| ### Extract Panels | |
| **Web Interface:** | |
| ```bash | |
| serve-comic-panel-extractor | |
| # Visit http://localhost:7860 | |
| ``` | |
| **CLI:** | |
| ```bash | |
| comic-panel-extractor path/to/comic.jpg | |
| ``` | |
| **Python:** | |
| ```python | |
| from comic_panel_extractor.main import ComicPanelExtractor | |
| from comic_panel_extractor.config import Config, load_config | |
| config = load_config() | |
| config.input_path = "comic.jpg" | |
| extractor = ComicPanelExtractor(config) | |
| panels, data, paths = extractor.extract_panels_from_comic() | |
| ``` | |
| ### Annotate Data | |
| Visit `http://localhost:7860/annotate` | |
| **Shortcuts:** | |
| - Click/drag for boxes | |
| - `S` = Save | |
| - `D` = Auto-detect | |
| - `Delete` = Remove | |
| ### Train Model | |
| **1. Setup Dataset:** | |
| ```bash | |
| # Add to .env | |
| SOURCE_PATH=/path/to/images | |
| # Create dataset (80/10/10 split) | |
| python -m comic_panel_extractor.create_dataset | |
| ``` | |
| **2. Configure Training (.env):** | |
| ```env | |
| EPOCH=200 | |
| YOLO_BASE_MODEL_NAME=yolo11s-seg | |
| YOLO_MODEL_NAME=comic_panel | |
| ``` | |
| **3. Train:** | |
| ```bash | |
| python -m comic_panel_extractor.train | |
| ``` | |
| ### Run Inference | |
| ```bash | |
| python -m comic_panel_extractor.inference | |
| ``` | |
| ```python | |
| from comic_panel_extractor.yolo_manager import YOLOManager | |
| with YOLOManager() as yolo: | |
| yolo.load_model('weights.pt') | |
| yolo.annotate_images(['image.jpg'], 'output') | |
| ``` | |
| ## Configuration | |
| ```python | |
| config = load_config() | |
| config.min_width_ratio = 0.15 # Min panel width (% of image) | |
| config.min_height_ratio = 0.15 # Min panel height (% of image) | |
| config.min_area_ratio = 0.05 # Min panel area (% of image) | |
| ``` | |
| ## Docker | |
| ```bash | |
| docker build -t comic-panel-extractor . | |
| docker run -p 7860:7860 comic-panel-extractor | |
| ``` | |
| ## API Endpoints | |
| **Extract:** | |
| - `POST /api/extract/convert` - Upload & extract panels | |
| **Annotate:** | |
| - `GET /api/annotate/images` - List images | |
| - `GET /api/annotate/annotations/{image}` - Get annotations | |
| - `GET /api/annotate/detect_annotations/{image}` - Auto-detect | |
| - `POST /api/annotate/annotations` - Save annotations | |
| ## Author | |
| Jebin Einstein E - jebineinstein@gmail.com |