first commit
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
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
|
||||
Reference in New Issue
Block a user