Files
classement-image-cyberharce…/tweet_classifier/ocr.py
T
2026-06-28 20:21:40 +02:00

51 lines
1.8 KiB
Python

import logging
from pathlib import Path
from typing import List, Optional
import easyocr
logger = logging.getLogger(__name__)
class TweetOCRExtractor:
"""
Classe responsable de l'extraction de texte à partir de captures d'écran en utilisant EasyOCR.
"""
def __init__(self, languages: Optional[List[str]] = None):
"""
Initialise le lecteur EasyOCR.
:param languages: Liste des langues à charger (par défaut ['fr', 'en']).
"""
if languages is None:
languages = ['fr', 'en']
self.languages = languages
self._reader = None
@property
def reader(self) -> easyocr.Reader:
"""
Initialisation tardive (lazy loading) d'EasyOCR pour économiser de la mémoire si non utilisé.
"""
if self._reader is None:
logger.info("Initialisation de l'OCR EasyOCR (ceci peut prendre quelques secondes)...")
self._reader = easyocr.Reader(self.languages)
return self._reader
def extract_text(self, image_path: Path) -> str:
"""
Extrait le texte d'une image.
:param image_path: Chemin vers le fichier image.
:return: Texte brut extrait.
"""
if not image_path.exists():
raise FileNotFoundError(f"Le fichier image n'existe pas : {image_path}")
try:
# easyocr accepte un chemin de fichier sous forme de string
results = self.reader.readtext(str(image_path))
# On joint les blocs de texte détectés
text_blocks = [text for (_, text, _) in results]
extracted_text = " ".join(text_blocks).strip()
return extracted_text
except Exception as e:
logger.error(f"Erreur lors de l'extraction OCR sur {image_path.name} : {e}")
raise RuntimeError(f"Échec de l'OCR : {e}") from e