Spaces:
Build error
Build error
File size: 3,632 Bytes
bd1f76d ec6ad2f bd1f76d ec6ad2f 79125e3 ec6ad2f f0dcf93 bb49e0d ec6ad2f 943db10 ec6ad2f cd9bbc0 943db10 ec6ad2f f0dcf93 cd9bbc0 bb49e0d f0dcf93 bb49e0d f0c23ec 2353a2a a97d0a0 79125e3 f0c23ec bd1f76d f0c23ec bd1f76d 2353a2a bd1f76d e05ccab bd1f76d 2353a2a 8b56694 e05ccab 660e421 943db10 660e421 ec6ad2f 943db10 ec6ad2f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# from .text_detector import TextDetector
from .config import Config
from .image_processor import ImageProcessor
from .panel_extractor import PanelData
from .panel_extractor import PanelExtractor
from .panel_segmentation import main as basic_panel_segmentation
from typing import List, Tuple
from pathlib import Path
import numpy as np
from .border_panel_extractor import BorderPanelExtractor
import shutil
from . import utils
import traceback
class ComicPanelExtractor:
"""Main class that orchestrates the comic panel extraction process."""
def __init__(self, config: Config, reset: bool = True):
self.config = config
self.reset = reset
if reset:
if Path(self.config.output_folder).exists():
shutil.rmtree(self.config.output_folder)
Path(self.config.output_folder).mkdir(exist_ok=True)
self.image_processor = ImageProcessor(self.config)
self.panel_extractor = PanelExtractor(self.config)
def extract_panels_from_comic(self) -> Tuple[List[np.ndarray], List[PanelData]]:
"""Complete pipeline to extract panels from a comic image."""
print(f"Starting panel extraction for: {self.config.input_path}")
try:
# Get original image dimensions
from PIL import Image
with Image.open(self.config.input_path) as original_image:
original_width, original_height = original_image.size
from .llm_panel_extractor import extract_panel_via_llm
all_path, detected_boxes, all_processed_boxes = extract_panel_via_llm(self.config.input_path, self.config, self.reset)
print("LLM Done.")
if utils.box_covered_ratio(all_processed_boxes, (original_width, original_height)) < 0.95:
print("LLM failed.")
return None, None, all_path
except Exception as e:
print(f'{str(e)} {traceback.format_exc()}')
processed_image_path = self.image_processor.group_colors(self.config.input_path)
processed_image_path = BorderPanelExtractor(self.config).main(processed_image_path)
self.config.black_overlay_input_path = processed_image_path
_, _, processed_image_path = self.image_processor.preprocess_image(processed_image_path)
processed_image_path = self.image_processor.thin_image_borders(processed_image_path)
processed_image_path = self.image_processor.remove_diagonal_lines_and_set_white(processed_image_path)
processed_image_path = self.image_processor.remove_dangling_lines(processed_image_path)
processed_image_path = self.image_processor.remove_diagonal_only_cells(processed_image_path)
processed_image_path = self.image_processor.thick_black(processed_image_path)
processed_image_path = self.image_processor.remove_small_regions(processed_image_path)
processed_image_path = self.image_processor.remove_small_regions(processed_image_path)
# processed_image_path = self.image_processor.connect_horizontal_vertical_gaps(processed_image_path)
processed_image_path = self.image_processor.detect_small_objects_and_set_white(processed_image_path)
processed_image_path = self.image_processor.thin_image_borders(processed_image_path)
panel_images, panel_data, all_panel_path = self.panel_extractor.extract_panels(
processed_image_path
)
return panel_images, panel_data, all_panel_path
def cleanup(self):
"""Clean up temporary files if needed."""
# Add cleanup logic here if needed
pass |