first commit
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
import argparse
|
||||
import sys
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from .organizer import ImageThemeOrganizer
|
||||
from .web_generator import WebReportGenerator
|
||||
|
||||
def setup_logging(verbose: bool):
|
||||
"""
|
||||
Configure la journalisation.
|
||||
"""
|
||||
level = logging.DEBUG if verbose else logging.INFO
|
||||
logging.basicConfig(
|
||||
level=level,
|
||||
format="%(asctime)s [%(levelname)s] %(name)s : %(message)s",
|
||||
handlers=[
|
||||
logging.StreamHandler(sys.stdout)
|
||||
]
|
||||
)
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Classement automatique de captures d'écran de tweets par thèmes à l'aide d'EasyOCR et d'Hugging Face."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-i", "--input-dir",
|
||||
type=str,
|
||||
default=None,
|
||||
help="Chemin vers le dossier contenant les captures d'écran à classer."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-o", "--output-dir",
|
||||
type=str,
|
||||
default=None,
|
||||
help="Dossier de destination (par défaut, utilise ./ok/)."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--db",
|
||||
type=str,
|
||||
default=str(Path(__file__).parent.parent / "captures/ok/tweets.csv"),
|
||||
help="Chemin vers le fichier base de données CSV (défaut: 'captures/ok/tweets.csv')."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--generate-report",
|
||||
action="store_true",
|
||||
help="Génère un rapport HTML à partir de la base de données CSV."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-m", "--model",
|
||||
type=str,
|
||||
default="MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7",
|
||||
help="Modèle Hugging Face Zero-Shot à utiliser."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-l", "--languages",
|
||||
type=str,
|
||||
default="fr,en",
|
||||
help="Langues pour EasyOCR, séparées par des virgules (défaut: 'fr,en')."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-t", "--threshold",
|
||||
type=float,
|
||||
default=0.35,
|
||||
help="Seuil de confiance de classification (0.0 à 1.0, défaut: 0.35)."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--copy",
|
||||
action="store_true",
|
||||
help="Copie les images au lieu de les déplacer."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--dry-run",
|
||||
action="store_true",
|
||||
help="Exécute une simulation sans modifier ni déplacer les fichiers."
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-v", "--verbose",
|
||||
action="store_true",
|
||||
help="Active le mode verbeux pour afficher les logs de débogage."
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
setup_logging(args.verbose)
|
||||
|
||||
if args.generate_report:
|
||||
generator = WebReportGenerator(Path(args.db))
|
||||
generator.generate()
|
||||
return
|
||||
|
||||
# Normal processing path
|
||||
if not args.input_dir:
|
||||
print("Erreur : --input-dir est requis pour le traitement.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
input_path = Path(args.input_dir)
|
||||
if not input_path.exists():
|
||||
print(f"Erreur : Le dossier d'entrée '{args.input_dir}' n'existe pas.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
languages_list = [lang.strip() for lang in args.languages.split(",") if lang.strip()]
|
||||
|
||||
output_path = Path(args.output_dir) if args.output_dir else None
|
||||
|
||||
# Instanciation de l'organisateur
|
||||
organizer = ImageThemeOrganizer(
|
||||
input_dir=input_path,
|
||||
output_dir=output_path,
|
||||
ocr_languages=languages_list,
|
||||
model_name=args.model,
|
||||
confidence_threshold=args.threshold,
|
||||
copy_only=args.copy,
|
||||
dry_run=args.dry_run,
|
||||
db_path=Path(args.db)
|
||||
)
|
||||
|
||||
try:
|
||||
organizer.run()
|
||||
except Exception as e:
|
||||
print(f"Une erreur critique est survenue : {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user