chore(scratch): archives des scripts exploratoires de choix d'OCR
Conservés comme trace de recherche — non documentés, non factorisés,
ne pas dépendre de ce dossier depuis le code de production.
- test_glm_ocr.py : benchmark GLM-OCR 0.9B (écarté pour
faiblesse sur dp_libelle, praticien et
colonne Recodage).
- test_got_ocr.py : tests GOT-OCR2.0 (échec sur tableaux
denses à en-têtes verticaux).
- test_paddle.py : tentative PaddleOCR (incompatible avec
paddlepaddle installé).
- test_surya.py : tentative Surya (incompatible
transformers 5.6).
- test_qwen_vl.py : Qwen2.5-VL-7B (excellent mais 220s/page,
écarté faute de VRAM et vitesse).
- test_qwen_vl_3b.py : Qwen2.5-VL-3B (retenu, 3s/page, qualité
> GLM-OCR sur les champs critiques).
- test_prompt_ab.py : A/B test prompts Accord/Désaccord.
- test_prompt_crop*.py : prompts + crop ciblé checkboxes (échec
→ module pipeline/checkboxes.py).
- test_prompt_recueil_*.py : prompts page recueil (consignes verbeuses
dégradent la sortie, cf. discussion).
- README.md : index du dossier.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
47
scratch/test_prompt_crop.py
Normal file
47
scratch/test_prompt_crop.py
Normal file
@@ -0,0 +1,47 @@
|
||||
"""Test : cropper la zone checkbox et demander à GLM-OCR."""
|
||||
from pathlib import Path
|
||||
from PIL import Image
|
||||
from pipeline.ocr_glm import GLMOCR
|
||||
from pipeline.ingest import pdf_to_images
|
||||
|
||||
# Zone checkbox sur la fiche recueil : bas à droite, ~60-85% largeur, 82-88% hauteur
|
||||
ZONE = (0.55, 0.82, 0.92, 0.90)
|
||||
|
||||
CASES = [
|
||||
("2018 CARC/OGC 7.pdf", 1, "accord"),
|
||||
("2018 CARC/OGC 55.pdf", 1, "désaccord"),
|
||||
("2018 CARC/OGC 27.pdf", 1, "désaccord"),
|
||||
("2018 CARC/OGC 86.pdf", 1, "désaccord"), # ajout pour confirmer
|
||||
]
|
||||
|
||||
PROMPTS = {
|
||||
"P1_naturel": """Sur cette image, deux cases à cocher : "Accord" et "Désaccord". Quelle case contient une croix ou est remplie ? Réponds par UN SEUL mot : accord OU désaccord.""",
|
||||
"P2_json": """Retourne UNIQUEMENT ce JSON :\n{"case_cochee": "accord" ou "désaccord"}\nRegarde les deux cases à cocher sur l'image et identifie celle qui est cochée (X, V ou noire).""",
|
||||
}
|
||||
|
||||
|
||||
def crop_rel(img: Image.Image, z):
|
||||
w, h = img.size
|
||||
return img.crop((int(z[0]*w), int(z[1]*h), int(z[2]*w), int(z[3]*h)))
|
||||
|
||||
|
||||
def main():
|
||||
ocr = GLMOCR()
|
||||
print(f"VRAM = {ocr.vram_gb:.2f} Go\n")
|
||||
|
||||
Path("/tmp/ogc_crops").mkdir(exist_ok=True)
|
||||
for pdf, page, expected in CASES:
|
||||
images = pdf_to_images(pdf)
|
||||
img = Image.open(images[page - 1])
|
||||
crop = crop_rel(img, ZONE)
|
||||
crop_path = f"/tmp/ogc_crops/{Path(pdf).stem.replace(' ', '_')}_cb.png"
|
||||
crop.save(crop_path)
|
||||
print(f"=== {Path(pdf).stem} (attendu: {expected}) crop={crop.size} ===")
|
||||
for name, prompt in PROMPTS.items():
|
||||
res = ocr.run(crop_path, prompt, max_new_tokens=64)
|
||||
print(f" [{name}] → {res['text'].strip()[:120]}")
|
||||
print()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user