Add global device definition for all models
Browse files
app.py
CHANGED
|
@@ -48,6 +48,7 @@ class Config:
|
|
| 48 |
SEGMENTATION_REGION_IOU = 0.3
|
| 49 |
SEGMENTATION_LINE_OVERLAP_THRESHOLD = 0.5
|
| 50 |
SEGMENTATION_REGION_OVERLAP_THRESHOLD = 0.5
|
|
|
|
| 51 |
ALLOWED_SOURCES = ("https://astia.narc.fi, /tmp/gradio")
|
| 52 |
|
| 53 |
# Model paths
|
|
@@ -121,7 +122,8 @@ class HTRPipeline:
|
|
| 121 |
segmentation_line_iou: float = 0.3,
|
| 122 |
segmentation_region_iou: float = 0.3,
|
| 123 |
segmentation_line_overlap_threshold: float = 0.5,
|
| 124 |
-
segmentation_region_overlap_threshold: float = 0.5
|
|
|
|
| 125 |
):
|
| 126 |
"""
|
| 127 |
Initialize HTR pipeline with segmentation and recognition models.
|
|
@@ -147,9 +149,15 @@ class HTRPipeline:
|
|
| 147 |
segmentation_line_iou,
|
| 148 |
segmentation_region_iou,
|
| 149 |
segmentation_line_overlap_threshold,
|
| 150 |
-
segmentation_region_overlap_threshold
|
|
|
|
| 151 |
)
|
| 152 |
-
self.recognizer = self._init_recognizer(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
self.plotter = PlotHTR()
|
| 154 |
|
| 155 |
if self.segmenter is None or self.recognizer is None:
|
|
@@ -164,7 +172,8 @@ class HTRPipeline:
|
|
| 164 |
segmentation_line_iou: float,
|
| 165 |
segmentation_region_iou: float,
|
| 166 |
segmentation_line_overlap_threshold: float,
|
| 167 |
-
segmentation_region_overlap_threshold: float
|
|
|
|
| 168 |
) -> Optional[SegmentImage]:
|
| 169 |
"""
|
| 170 |
Initialize document segmentation model.
|
|
@@ -179,6 +188,7 @@ class HTRPipeline:
|
|
| 179 |
segmentation_region_iou: IoU threshold for merging overlapping region polygons
|
| 180 |
segmentation_line_overlap_threshold: Area overlap ratio threshold for merging lines
|
| 181 |
segmentation_region_overlap_threshold: Area overlap ratio threshold for merging regions
|
|
|
|
| 182 |
Returns:
|
| 183 |
Initialized SegmentImage instance or None if initialization fails
|
| 184 |
"""
|
|
@@ -192,7 +202,8 @@ class HTRPipeline:
|
|
| 192 |
line_iou=segmentation_line_iou,
|
| 193 |
region_iou=segmentation_region_iou,
|
| 194 |
line_overlap_threshold=segmentation_line_overlap_threshold,
|
| 195 |
-
region_overlap_threshold=segmentation_region_overlap_threshold
|
|
|
|
| 196 |
)
|
| 197 |
logger.info("✓ Segmentation model initialized")
|
| 198 |
return segmenter
|
|
@@ -200,7 +211,10 @@ class HTRPipeline:
|
|
| 200 |
logger.error(f"Failed to initialize segmentation model: {e}")
|
| 201 |
return None
|
| 202 |
|
| 203 |
-
def _init_recognizer(self,
|
|
|
|
|
|
|
|
|
|
| 204 |
"""
|
| 205 |
Initialize text recognition model.
|
| 206 |
|
|
@@ -214,7 +228,7 @@ class HTRPipeline:
|
|
| 214 |
try:
|
| 215 |
recognizer = TextRecognition(
|
| 216 |
model_path=model_path,
|
| 217 |
-
device=
|
| 218 |
batch_size=batch_size
|
| 219 |
)
|
| 220 |
logger.info("✓ Text recognition model initialized")
|
|
@@ -369,7 +383,8 @@ try:
|
|
| 369 |
segmentation_line_iou = Config.SEGMENTATION_LINE_IOU,
|
| 370 |
segmentation_region_iou = Config.SEGMENTATION_REGION_IOU,
|
| 371 |
segmentation_line_overlap_threshold = Config.SEGMENTATION_LINE_OVERLAP_THRESHOLD,
|
| 372 |
-
segmentation_region_overlap_threshold = Config.SEGMENTATION_REGION_OVERLAP_THRESHOLD
|
|
|
|
| 373 |
)
|
| 374 |
logger.info("✓ HTR Pipeline initialized successfully")
|
| 375 |
except Exception as e:
|
|
|
|
| 48 |
SEGMENTATION_REGION_IOU = 0.3
|
| 49 |
SEGMENTATION_LINE_OVERLAP_THRESHOLD = 0.5
|
| 50 |
SEGMENTATION_REGION_OVERLAP_THRESHOLD = 0.5
|
| 51 |
+
DEVICE = 'cuda:0' if torch.cuda.is_available() else 'cpu'
|
| 52 |
ALLOWED_SOURCES = ("https://astia.narc.fi, /tmp/gradio")
|
| 53 |
|
| 54 |
# Model paths
|
|
|
|
| 122 |
segmentation_line_iou: float = 0.3,
|
| 123 |
segmentation_region_iou: float = 0.3,
|
| 124 |
segmentation_line_overlap_threshold: float = 0.5,
|
| 125 |
+
segmentation_region_overlap_threshold: float = 0.5,
|
| 126 |
+
device: str = 'cuda:0'
|
| 127 |
):
|
| 128 |
"""
|
| 129 |
Initialize HTR pipeline with segmentation and recognition models.
|
|
|
|
| 149 |
segmentation_line_iou,
|
| 150 |
segmentation_region_iou,
|
| 151 |
segmentation_line_overlap_threshold,
|
| 152 |
+
segmentation_region_overlap_threshold,
|
| 153 |
+
device
|
| 154 |
)
|
| 155 |
+
self.recognizer = self._init_recognizer(
|
| 156 |
+
recognition_model_path,
|
| 157 |
+
recognition_batch_size,
|
| 158 |
+
device
|
| 159 |
+
)
|
| 160 |
+
|
| 161 |
self.plotter = PlotHTR()
|
| 162 |
|
| 163 |
if self.segmenter is None or self.recognizer is None:
|
|
|
|
| 172 |
segmentation_line_iou: float,
|
| 173 |
segmentation_region_iou: float,
|
| 174 |
segmentation_line_overlap_threshold: float,
|
| 175 |
+
segmentation_region_overlap_threshold: float,
|
| 176 |
+
device: str
|
| 177 |
) -> Optional[SegmentImage]:
|
| 178 |
"""
|
| 179 |
Initialize document segmentation model.
|
|
|
|
| 188 |
segmentation_region_iou: IoU threshold for merging overlapping region polygons
|
| 189 |
segmentation_line_overlap_threshold: Area overlap ratio threshold for merging lines
|
| 190 |
segmentation_region_overlap_threshold: Area overlap ratio threshold for merging regions
|
| 191 |
+
device: Device where the model is run (cpu, cuda:0)
|
| 192 |
Returns:
|
| 193 |
Initialized SegmentImage instance or None if initialization fails
|
| 194 |
"""
|
|
|
|
| 202 |
line_iou=segmentation_line_iou,
|
| 203 |
region_iou=segmentation_region_iou,
|
| 204 |
line_overlap_threshold=segmentation_line_overlap_threshold,
|
| 205 |
+
region_overlap_threshold=segmentation_region_overlap_threshold,
|
| 206 |
+
device=device
|
| 207 |
)
|
| 208 |
logger.info("✓ Segmentation model initialized")
|
| 209 |
return segmenter
|
|
|
|
| 211 |
logger.error(f"Failed to initialize segmentation model: {e}")
|
| 212 |
return None
|
| 213 |
|
| 214 |
+
def _init_recognizer(self,
|
| 215 |
+
model_path: str,
|
| 216 |
+
batch_size: int,
|
| 217 |
+
device: str) -> Optional[TextRecognition]:
|
| 218 |
"""
|
| 219 |
Initialize text recognition model.
|
| 220 |
|
|
|
|
| 228 |
try:
|
| 229 |
recognizer = TextRecognition(
|
| 230 |
model_path=model_path,
|
| 231 |
+
device=device,
|
| 232 |
batch_size=batch_size
|
| 233 |
)
|
| 234 |
logger.info("✓ Text recognition model initialized")
|
|
|
|
| 383 |
segmentation_line_iou = Config.SEGMENTATION_LINE_IOU,
|
| 384 |
segmentation_region_iou = Config.SEGMENTATION_REGION_IOU,
|
| 385 |
segmentation_line_overlap_threshold = Config.SEGMENTATION_LINE_OVERLAP_THRESHOLD,
|
| 386 |
+
segmentation_region_overlap_threshold = Config.SEGMENTATION_REGION_OVERLAP_THRESHOLD,
|
| 387 |
+
device = Config.DEVICE
|
| 388 |
)
|
| 389 |
logger.info("✓ HTR Pipeline initialized successfully")
|
| 390 |
except Exception as e:
|