From dd4f8b2425f7ad789e34acb758c7a7a1ca12a155 Mon Sep 17 00:00:00 2001 From: robinrolle Date: Fri, 11 Apr 2025 23:39:21 +0200 Subject: [PATCH] add OCR profile. Zip -> Word -> txt --- poc_ocr.py | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/poc_ocr.py b/poc_ocr.py index c34e205..c9471f3 100644 --- a/poc_ocr.py +++ b/poc_ocr.py @@ -1,16 +1,18 @@ +import zipfile import requests import base64 from PIL import Image import pytesseract import io +import re from pathlib import Path -# Définir les informations de l'API (à personnaliser) +# === Configuration API === api_url = "https://hackathon-api.mlo.sehlat.io/game/start" api_key = "OwogAztgWRdPfT2wWe7Xevdw98tdJelatlk82K6bozw" team_name = "Welch" -# Requête POST pour obtenir les données du jeu +# === Requête API === headers = { "x-api-key": api_key, "Content-Type": "application/json" @@ -19,23 +21,33 @@ payload = { "player_name": team_name } -# Simulation de la requête (à activer quand tu veux l’exécuter pour de vrai) response = requests.post(api_url, headers=headers, json=payload) response_data = response.json() -print(response_data["client_data"]["passport"]) - -# === Extraction du champ "passport" depuis ta réponse API === +# === Traitement du passeport === passport_b64 = response_data["client_data"]["passport"] - -# === Décodage de l’image (Base64 → image binaire) === image_bytes = base64.b64decode(passport_b64) image = Image.open(io.BytesIO(image_bytes)) - -# === OCR avec pytesseract === -# (Tu peux changer 'eng' par 'fra', 'deu', etc. selon la langue du passeport) extracted_text = pytesseract.image_to_string(image, lang='eng') -# === Affichage du résultat === -print("Texte extrait depuis le passeport :\n") -print(extracted_text) \ No newline at end of file +print("=== Texte extrait depuis le passeport ===\n") +print(extracted_text) + +# === Traitement du profil === +profile_b64 = response_data["client_data"]["profile"] +profile_bytes = base64.b64decode(profile_b64) +zip_file = zipfile.ZipFile(io.BytesIO(profile_bytes)) + +# Vérifie la présence du fichier principal du Word +document_path = "word/document.xml" +if document_path in zip_file.namelist(): + with zip_file.open(document_path) as doc_file: + xml_content = doc_file.read().decode("utf-8", errors="ignore") + + # Extraction naïve du texte (on peut améliorer avec XML parser si besoin) + text_only = re.sub(r"<[^>]+>", "", xml_content) + + print("\n=== Texte extrait depuis le profil (document Word) ===\n") + print(text_only.strip()) +else: + print("Le fichier 'word/document.xml' est introuvable dans l'archive du profil.") \ No newline at end of file