update
BIN
docs/task/cni/results/facture_confusion_matrix.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
79
docs/task/cni/results/facture_decisions.csv
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
filename,deqa_score,label,decision_f1,decision_acc,decision_prec,decision_rec
|
||||||
|
image (9)_0.jpg,3.9,High,implement,implement,implement,implement
|
||||||
|
ITE55351156_Passeport_Completed_0.jpg,3.9,High,implement,implement,implement,implement
|
||||||
|
image (3)_0.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
image (18)_1.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
image (25)_0.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
image (2)_0.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
image (6)_6.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
ITE55354891_image_Completed_0.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
image (23)_0.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
image (21)_0.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
image (15)_0.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
ITE55354550_20250728_113359_Completed_0.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
image (6)_2.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
image (7)_1.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
ITE55348016_image_Completed_0.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
image (6)_0.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
ITE55343297_20250729_172626_Completed_0.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
image (29)_0.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
image (17)_0.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
ITE55340822_passeport_pascal_2028_Completed_0.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
image (27)_0.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
image (18)_0.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
image (24)_0.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
image (12)_0.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
image (6)_1.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
ITE55348904_cni_verso_0.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
image (7)_0.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
image (6)_3.jpg,3.4,Low,implement,implement,reject,implement
|
||||||
|
image (22)_2.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
ITE55352984_CNI_Completed_1.jpg,3.3,Low,implement,implement,reject,implement
|
||||||
|
image (30)_0.jpg,3.3,High,implement,implement,reject,implement
|
||||||
|
image (12)_1.jpg,3.3,High,implement,implement,reject,implement
|
||||||
|
ITE55341271_C_I_face_Completed_0.jpg,3.3,High,implement,implement,reject,implement
|
||||||
|
ITE55343716_CNI_Completed_0.jpg,3.3,High,implement,implement,reject,implement
|
||||||
|
image (17)_1.jpg,3.2,High,implement,implement,reject,implement
|
||||||
|
ITE55341677_2023_-_CNI_Recto-Verso_Hassina_0.jpg,3.2,High,implement,implement,reject,implement
|
||||||
|
image (22)_0.jpg,3.2,High,implement,implement,reject,implement
|
||||||
|
image (26)_0.jpg,3.1,High,implement,implement,reject,implement
|
||||||
|
image (16)_0.jpg,3.1,High,implement,implement,reject,implement
|
||||||
|
image (18)_2.jpg,3.1,High,implement,implement,reject,implement
|
||||||
|
image (18)_3.jpg,3.1,Low,implement,implement,reject,implement
|
||||||
|
image (19)_1.jpg,3.1,High,implement,implement,reject,implement
|
||||||
|
ITE55343716_CNI_Completed_1.jpg,3.1,High,implement,implement,reject,implement
|
||||||
|
ITE55352984_CNI_Completed_0.jpg,3.1,Low,implement,implement,reject,implement
|
||||||
|
ITE55347926_DHONDT_CNI_0.jpg,3.1,High,implement,implement,reject,implement
|
||||||
|
image (11)_1.jpg,3.0,Low,implement,implement,reject,implement
|
||||||
|
image (1)_0.jpg,3.0,High,implement,implement,reject,implement
|
||||||
|
image (22)_3.jpg,3.0,High,implement,implement,reject,implement
|
||||||
|
ITE55336627_PASSEPORT_Abasse_GUEYE__Completed_0.jpg,3.0,Low,implement,implement,reject,implement
|
||||||
|
image (28)_0.jpg,3.0,High,implement,implement,reject,implement
|
||||||
|
image (6)_4.jpg,2.9,High,implement,implement,reject,implement
|
||||||
|
image (22)_1.jpg,2.9,High,implement,implement,reject,implement
|
||||||
|
image (4)_0.jpg,2.9,High,implement,implement,reject,implement
|
||||||
|
image (28)_1.jpg,2.9,High,implement,implement,reject,implement
|
||||||
|
image (10)_1.jpg,2.9,Low,implement,implement,reject,implement
|
||||||
|
ITE55348464_IMG-20250721-WA0000_Completed_0.jpg,2.9,High,implement,implement,reject,implement
|
||||||
|
image (11)_0.jpg,2.9,Low,implement,implement,reject,implement
|
||||||
|
image (10)_0.jpg,2.9,Low,implement,implement,reject,implement
|
||||||
|
ITE55340318_ID_kat__1__Completed_0.jpg,2.9,Low,implement,implement,reject,implement
|
||||||
|
image (5)_0.jpg,2.8,Low,implement,implement,reject,implement
|
||||||
|
ITE55347865_Snapchat-715567440_Completed_0.jpg,2.8,Low,implement,implement,reject,implement
|
||||||
|
image (6)_5.jpg,2.8,High,implement,implement,reject,implement
|
||||||
|
image (13)_0.jpg,2.8,High,implement,implement,reject,implement
|
||||||
|
ITE55346966_17537774579547958575370370624241_Completed_0.jpg,2.8,Low,implement,implement,reject,implement
|
||||||
|
ITE55347866_Snapchat-1551171803_Completed_0.jpg,2.8,Low,implement,implement,reject,implement
|
||||||
|
ITE55350967_PLI_INCONNU_-_ADH_625302_42296806_DMS_0.jpg,2.7,High,implement,implement,reject,implement
|
||||||
|
image (8)_0.jpg,2.7,High,implement,implement,reject,implement
|
||||||
|
image (31)_0.jpg,2.7,High,implement,implement,reject,implement
|
||||||
|
ITE55348878_CNI_RECTO_0.jpg,2.7,Low,implement,implement,reject,implement
|
||||||
|
image (1)_1.jpg,2.7,High,implement,implement,reject,implement
|
||||||
|
image (13)_1.jpg,2.7,High,implement,implement,reject,implement
|
||||||
|
image (14)_0.jpg,2.7,High,implement,implement,reject,implement
|
||||||
|
ITE55349793_2_em_CNI_CHASTAING__0.jpg,2.6,High,implement,implement,reject,implement
|
||||||
|
image (19)_0.jpg,2.6,High,implement,implement,reject,implement
|
||||||
|
ITE55351087_PLI_INCONNU_-_ADH_625120_42296075_DMS_0.jpg,2.4,Low,reject,reject,reject,reject
|
||||||
|
ITE55352532_PLI_INCONNU_-_ADH_625374_42297046_DMS_0.jpg,2.2,Low,reject,reject,reject,reject
|
||||||
|
ITE55351128_PLI_INCONNU_-_ADH_625123_42296103_DMS_0.jpg,2.0,Low,reject,reject,reject,reject
|
||||||
|
ITE55351128_PLI_INCONNU_-_ADH_625123_42296103_DMS_1.jpg,1.9,Low,reject,reject,reject,reject
|
||||||
|
BIN
docs/task/cni/results/facture_deqa_images.xlsx
Normal file
BIN
docs/task/cni/results/facture_metric_curves.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
docs/task/cni/results/facture_precision_recall_curve.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
docs/task/cni/results/facture_roc_like_curve.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
docs/task/cni/results/facture_score_distributions.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
docs/task/cni/results/facture_sorted_scores_with_thr.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
50
docs/task/cni/results/facture_thresholds_summary.json
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"positive_definition": "HIGH when score >= threshold",
|
||||||
|
"best_thresholds": {
|
||||||
|
"f1": {
|
||||||
|
"threshold": 2.6,
|
||||||
|
"value": 0.8872180451127819,
|
||||||
|
"confusion": {
|
||||||
|
"TP": 59,
|
||||||
|
"FP": 15,
|
||||||
|
"FN": 0,
|
||||||
|
"TN": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"accuracy": {
|
||||||
|
"threshold": 2.6,
|
||||||
|
"value": 0.8076923076923077,
|
||||||
|
"confusion": {
|
||||||
|
"TP": 59,
|
||||||
|
"FP": 15,
|
||||||
|
"FN": 0,
|
||||||
|
"TN": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"precision": {
|
||||||
|
"threshold": 3.9,
|
||||||
|
"value": 1.0,
|
||||||
|
"confusion": {
|
||||||
|
"TP": 2,
|
||||||
|
"FP": 0,
|
||||||
|
"FN": 57,
|
||||||
|
"TN": 19
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"recall": {
|
||||||
|
"threshold": 2.6,
|
||||||
|
"value": 1.0,
|
||||||
|
"confusion": {
|
||||||
|
"TP": 59,
|
||||||
|
"FP": 15,
|
||||||
|
"FN": 0,
|
||||||
|
"TN": 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"counts": {
|
||||||
|
"total": 78,
|
||||||
|
"positives": 59,
|
||||||
|
"negatives": 19
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
docs/task/facture/results/facture_confusion_matrix.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
201
docs/task/facture/results/facture_decisions.csv
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
filename,deqa_score,label,decision_f1,decision_acc,decision_prec,decision_rec
|
||||||
|
ffc129de-c82b-4c0b-8ab8-2941fd28cda9_Facture_opticien-2.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
9421b4f1-e9f7-42ea-8d9b-833361b16a20_image_1_scale_0.6.jpg,3.8,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26908261_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
803f61ed-759c-4773-90f2-d8737ef911ab_image-1.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
72cb658b-3239-4479-918d-aac53bc4a552_Facture_ophtalmo_14-01-2025-1.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26761886_1_scale_1.5.jpg,3.0,Low,reject,reject,reject,implement
|
||||||
|
Facture médecine douce-27778240_1_scale_1.5.jpg,2.7,Low,reject,reject,reject,implement
|
||||||
|
8f0e72ca-64e5-4797-87bc-9378b842433a_CF_1676107-2.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
b6140557-8c64-41b4-a6ea-bdcf88e0302e_IMG_20250210_155359_1_scale_1.0.jpg,3.3,Low,implement,implement,reject,implement
|
||||||
|
34918269-15fd-4e3d-9180-659530a82d35_OSTEO_01.25_1_scale_1.0.jpg,3.2,Low,implement,reject,reject,implement
|
||||||
|
DDE prestation Facture des lentilles de contact-26772418_2_scale_1.5.jpg,2.5,High,reject,reject,reject,implement
|
||||||
|
3500ba97-9402-46c4-a016-3a4abe35da60_Facture_osteo_1_2025_1_scale_1.5.jpg,3.5,Low,implement,implement,reject,implement
|
||||||
|
6c311fa0-a4c5-435f-81c6-7dec91d04978_FACTURE_POTARD_-_BENEDET_1_scale_1.0.jpg,4.1,Low,implement,implement,implement,implement
|
||||||
|
Facture-quittance toutes spécialités-27234926_1_scale_1.5.jpg,2.8,Low,reject,reject,reject,implement
|
||||||
|
2f042a0e-e23e-4e4a-af6d-9b013f1509bd_facture_ostheo_1_1_scale_1.5.jpg,3.1,Low,implement,reject,reject,implement
|
||||||
|
Facture médecine douce-27701675_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
Magasinier-Exemple-de-CV_1_scale_0.7.jpg,4.1,High,implement,implement,implement,implement
|
||||||
|
Promesse-dembauche-212x300.jpg,2.7,Low,reject,reject,reject,implement
|
||||||
|
141f7ccc-37ab-4da5-9788-80a27e819b8b_Feuilles_de_soins_Psychologue_x2-2.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
Facture des lentilles de contact-27671269_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
ce6ed73c-50e6-4684-9d91-26eba210ba43_Feuille_de_soins_Ostheo_2_scale_1.5.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
modele-bon-de-livraison-1.jpg,3.9,High,implement,implement,reject,implement
|
||||||
|
c64ad8f0-0d5a-4a5b-aec5-62ec44099520_Screenshot_20250211_100040_Gallery_1_scale_1.0.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
77c1b3c3-234d-4431-8675-a5c1d12053e0_osteopathe_MOREAU_Coralie_10-02-25_1_scale_1.5.jpg,2.6,Low,reject,reject,reject,implement
|
||||||
|
DDE prestation Facture des lentilles de contact-26740699_1_scale_1.5.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
ffc129de-c82b-4c0b-8ab8-2941fd28cda9_Facture_opticien_1_scale_1.5.jpg,3.9,High,implement,implement,reject,implement
|
||||||
|
mobilenew2.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
a13a6613-da2d-48b7-96ef-412ba5a88af0_Factures_Clemence__1_scale_1.5.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
043bf393-055f-451c-ba6f-f01cac5964f0_17370239165192445587441836799654_1_scale_0.6.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
4c7209da-d83b-416e-b7a2-2d3e409ad598_Schneider_Fred_250213_110050_1_scale_1.5.jpg,3.9,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25233927_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25246953_1_scale_1.5.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26112050_1_scale_1.5.jpg,3.0,Low,reject,reject,reject,implement
|
||||||
|
Facture médecine douce-27702201_1_scale_1.5.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
51c8093e-d8b7-4ac2-a57b-b0e7e8797143_20250206_111519_1_scale_1.0.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27701986_1_scale_1.5.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
80b79126-2cfa-41bd-83cd-81fa0efca7c3_facture_lentilles_Leila_ben_amor_REMADI__1_scale_1.5.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
2992af58-6afb-4d25-9071-f2ad3ac22662_OSTEO_12.23_1_scale_1.0.jpg,2.4,Low,reject,reject,reject,implement
|
||||||
|
819f6faf-d9f3-4668-9000-e414d92c7f41_ROYER_LUDIVINE_FACTURE_OPHTALMO_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
f22ss_1_scale_1.5.jpg,3.0,Low,reject,reject,reject,implement
|
||||||
|
Facture ostéopathe-25143750_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
7321fd47-74f0-44ac-b7d9-26c7bf9bdd84_image_1_scale_0.6.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26684295_1_scale_1.5.jpg,3.8,Low,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27718494_1_scale_1.5.jpg,3.1,High,implement,reject,reject,implement
|
||||||
|
Facture ostéopathe-25382451_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
80b79126-2cfa-41bd-83cd-81fa0efca7c3_facture_lentilles_Leila_ben_amor_REMADI_-1.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25295241_1_scale_1.5.jpg,3.3,High,implement,implement,reject,implement
|
||||||
|
1498c5f5-22cf-41d4-87f0-9b295ff481f4_IMG_5659-1.jpg,4.0,Low,implement,implement,reject,implement
|
||||||
|
534b115b-9997-48c3-bc09-ffb89e5bddf3_Screenshot_20250212_150902_com.google.android.apps.docs_1_scale_1.0.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26112692_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
facture-engie-page-3-349x500.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
b32c815a-62d9-40d2-b979-eb10e581f7a9_image-1.jpg,3.8,Low,implement,implement,reject,implement
|
||||||
|
ba1b499f-199f-4106-bb2c-aac62a67c235_doc00448420250313084147-1.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27778049_1_scale_1.5.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-27093974_1_scale_1.5.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
Claude_François_-_Certificat_de_scolarité_-_Lycée_français_du_Caire_-_1956_1_scale_1.0.jpg,3.8,Low,implement,implement,reject,implement
|
||||||
|
4d9dad1f-732c-4580-8899-438c1eae07a3_FACTURE_LUNETTES_1_scale_1.5.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
1724226151848OPPON_GEROGES_ORDO_LENT_2023_1_scale_1.5.jpg,2.8,Low,reject,reject,reject,implement
|
||||||
|
Facture-quittance toutes spécialités-27638903_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27784856_1_scale_1.5.jpg,3.1,High,implement,reject,reject,implement
|
||||||
|
fd8187e1-b9eb-4727-8041-9fc9e6f1affb_0556_001_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-1184306_1_scale_1.5.jpg,2.7,Low,reject,reject,reject,implement
|
||||||
|
Facture ostéopathe-1204645_1_scale_1.5.jpg,3.4,Low,implement,implement,reject,implement
|
||||||
|
6ee5b983-1954-4a68-9caf-1ea493b5dad4_IMG_6731-1.jpg,3.8,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25848670_2_scale_1.5.jpg,1.7,High,reject,reject,reject,implement
|
||||||
|
287b78bf-1861-467f-973f-21aad6be26f1_livret_de_famille_Humez_25022024-3_1_scale_1.0.jpg,3.2,Low,implement,reject,reject,implement
|
||||||
|
8b6539db-21b4-41dc-a27f-db2cd351fe5f_Doc_34-1.jpg,4.0,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25224007_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
Facture-quittance toutes spécialités-27146817_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
d63b7f97-36f9-4f4e-aa4d-64e2efb17678_Mon_scan_1_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25341458_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25073913_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
bb5879ba-ec78-475d-a21b-91ee17d66778_17390362559246788762525665199914_1_scale_0.9.jpg,3.8,Low,implement,implement,reject,implement
|
||||||
|
Facture des lentilles de contact-27673604_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
91f98d72-999c-4799-b0e5-c918a7ed52b0_17393509620094620772493095873549_1_scale_1.0.jpg,3.5,Low,implement,implement,reject,implement
|
||||||
|
2062d98b-529c-42d0-87bb-cc131ee36c1b_Factures_Osteo_1_scale_1.5.jpg,4.1,High,implement,implement,implement,implement
|
||||||
|
e07571f8-3ba4-46fc-a37e-53bd6dd965c7_IMG20250123190152_1_scale_0.6.jpg,3.8,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26398662_1_scale_1.5.jpg,2.9,Low,reject,reject,reject,implement
|
||||||
|
Facture ostéopathe-1207573_1_scale_1.5.jpg,2.7,Low,reject,reject,reject,implement
|
||||||
|
Facture des lentilles de contact-27663184_2_scale_1.5.jpg,2.5,High,reject,reject,reject,implement
|
||||||
|
Facture médecine douce-27647591_1_scale_1.5.jpg,3.2,High,implement,reject,reject,implement
|
||||||
|
5600db4f-5884-4f54-87ce-56c8b3f5f0a0_Aurelie_GALEOTTI_Ezio__1_scale_1.5.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
6ffa2fe1-11be-4516-bd81-bef1824f5f8c_Ordonnances_et_factures_2_scale_1.5.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27710953_1_scale_1.5.jpg,3.5,Low,implement,implement,reject,implement
|
||||||
|
17246582258432400585-goubier-sandrine-1835799692661e42158b3a5_1_scale_1.5.jpg,4.0,High,implement,implement,reject,implement
|
||||||
|
821b6297-8c00-4f88-89a7-a9213c38c3e8_JEAN_PIERRE_001_1_scale_1.0.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
Facture des lentilles de contact-27619324_1_scale_1.5.jpg,3.3,High,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27708288_1_scale_1.5.jpg,4.0,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26592511_1_scale_1.5.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27776257_1_scale_1.5.jpg,3.3,Low,implement,implement,reject,implement
|
||||||
|
7b830a57-2131-479c-bf31-1673e7308903_invoice_2025_1_31-1.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25182408_2_scale_1.5.jpg,1.9,High,reject,reject,reject,implement
|
||||||
|
Facture médecine douce-27784971_1_scale_1.5.jpg,3.2,Low,implement,reject,reject,implement
|
||||||
|
c7704de1-820a-44bf-aef9-f7b185f94a26_facture_ophtalmo-2.jpg,3.3,High,implement,implement,reject,implement
|
||||||
|
bf09a877-0705-4c79-b908-6e8da44e44c7_17490641879424403676372514736136_1_scale_0.6.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
189462d7-2c53-403e-b27f-156f210c29e0_Facture_osteo__1_scale_1.5.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
cf4fa87b-649f-4c6b-8a70-3ce5755256fa_Attestation_20250205104300934_1_scale_1.5.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25265881_1_scale_1.5.jpg,3.5,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26964863_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26010134_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
d319c0f9-9a87-4e75-90b2-a92836caf034_20250208_101526_1_scale_0.6.jpg,4.0,High,implement,implement,reject,implement
|
||||||
|
sncf_e-billet.jpg,3.1,Low,implement,reject,reject,implement
|
||||||
|
Facture ostéopathe-1102494_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
certificate-1_1_scale_1.0.jpg,4.0,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25082790_1_scale_1.5.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
c0625556-2cb1-42c8-9433-e31274c121a3_Livret_de_famille_hamidouna-1.jpg,3.1,Low,implement,reject,reject,implement
|
||||||
|
84ee3980-6f2b-4943-9b11-1996dce1039f_Dossier_lentilles_Stephanie_M_2_scale_1.5.jpg,3.2,Low,implement,reject,reject,implement
|
||||||
|
Facture des lentilles de contact-27570312_1_scale_1.5.jpg,3.5,Low,implement,implement,reject,implement
|
||||||
|
7402b29f-bcc9-42ed-a5a9-a8ec6468ad90_17392879320695618357009043029309_1_scale_0.6.jpg,4.0,Low,implement,implement,reject,implement
|
||||||
|
707771f6-bb3b-4e5e-8d7d-acd584a23009_IMG_20240726_142929_1_scale_1.0.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25198581_1_scale_1.5.jpg,3.1,High,implement,reject,reject,implement
|
||||||
|
Facture médecine douce-27705774_1_scale_1.5.jpg,3.9,High,implement,implement,reject,implement
|
||||||
|
02c6c398-ddf5-47e9-be88-a27742a2683c_recu-fac-2025-02-002979_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27780823_1_scale_1.5.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
803f61ed-759c-4773-90f2-d8737ef911ab_image_1_scale_0.6.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
881d86b7-5bdb-4a16-bcbc-57202e0879b1_osteo_fevrier_2025_1_scale_1.0.jpg,3.8,Low,implement,implement,reject,implement
|
||||||
|
imageaaaaaaaafddddddddddfgdaafds_1_scale_1.0.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
17243973662012024.04.16_-_Osteo_Elrik_1_scale_0.9.jpg,3.2,Low,implement,reject,reject,implement
|
||||||
|
Facture médecine douce-27760177_1_scale_1.5.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
644c17e0-cced-46f8-87e7-231c6ac0f5b5_ostheo_04.02.25_1_scale_1.5.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
8794ba0a-5d58-4d01-a1be-71f7d5c4bfe2_IMG_20250207_185936_1_scale_0.6.jpg,4.0,High,implement,implement,reject,implement
|
||||||
|
Facture des lentilles de contact-27621196_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
879cf76a-68c1-40d7-b444-0ff3341c97de_facture-zami-isabelle-20250130-1703_1-1.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
ticket-PAYFIP0000000014966980-1.jpg,3.9,High,implement,implement,reject,implement
|
||||||
|
c865b3cf-c251-465d-97e2-ada7a618dc56_Numerisation_20250207_1_scale_1.0.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25182408_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
Facture des lentilles de contact-27551187_1_scale_1.5.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27705389_1_scale_1.5.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
01f6cc06-5720-4836-a490-1521aa928049_image_1_scale_0.6.jpg,3.5,Low,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27700785_1_scale_1.5.jpg,3.2,High,implement,reject,reject,implement
|
||||||
|
bdb308da-16f5-4370-b1a4-8ffe4f063d84_2025-02-06-13-21-14-309_1_scale_0.6.jpg,4.0,Low,implement,implement,reject,implement
|
||||||
|
8f0e72ca-64e5-4797-87bc-9378b842433a_CF_1676107_2_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
03deb470-7e1b-4ef6-9c03-5e2c4f9aa83d_facture_2023-20-13_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25375641_2_scale_1.5.jpg,2.7,High,reject,reject,reject,implement
|
||||||
|
Facture médecine douce-27701380_1_scale_1.5.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
d5a8f5e5-7755-4791-910a-9c4079fa07f4_Facture_osteopathe_Madame_Gregoire_290125_1_scale_1.5.jpg,2.7,Low,reject,reject,reject,implement
|
||||||
|
Facture ostéopathe-25021617_1_scale_1.5.jpg,3.3,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-1210226_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
1724397366263FACTURES_OSTEOPATHE_1_scale_1.5.jpg,2.8,Low,reject,reject,reject,implement
|
||||||
|
b14402b2-1846-4abb-b17e-31a538802ae8_Facture_Osteopathe_10022025__1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
0785b11d-69b5-4f5f-b75d-9caf82642652_LENTILLES_1_scale_1.0.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
72347d5c-1c18-4a42-8b6c-f0a365dbaf97_FACTURE_N_14_1_scale_1.5.jpg,2.5,Low,reject,reject,reject,implement
|
||||||
|
Attestation d'emploi-1_1_scale_1.0.jpg,3.9,High,implement,implement,reject,implement
|
||||||
|
588bd118-1770-4c2a-8d86-a6a6cbed79b2_osteopathe_1_scale_1.5.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27701076_1_scale_1.5.jpg,2.9,Low,reject,reject,reject,implement
|
||||||
|
Facture ostéopathe-1183991_1_scale_1.5.jpg,2.6,Low,reject,reject,reject,implement
|
||||||
|
1724399050337CamScanner_24-10-2023_16.211_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
Extrait acte de naissance - 26773427.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26141775_1_scale_1.5.jpg,3.4,Low,implement,implement,reject,implement
|
||||||
|
c052b9e0-c0d4-473f-93a9-a5dc396a0d86_Facture_ophtalmologique_-1.jpg,3.1,High,implement,reject,reject,implement
|
||||||
|
88248db2-efbd-42c8-aacf-4e32f2b5b309_17392731219852541052997326186649_1_scale_0.6.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25292676_1_scale_1.5.jpg,3.2,High,implement,reject,reject,implement
|
||||||
|
8e86f61e-284f-4984-84ba-4de5883b0bc8_recu-nh-2025-02-015583_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture-quittance toutes spécialités-27396735_1_scale_1.5.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27753021_3_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
aze_cargmoe017762-61_001_1_scale_1.0.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
48e19752-3534-4539-8905-e09bdeb9fddd_CamScanner_11-02-2025_21.51_1_1_scale_1.0.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25847017_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
1724156469378osteopathe_renau_anais_le_31-07-2024_1_scale_1.5.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26699279_1_scale_1.5.jpg,3.4,Low,implement,implement,reject,implement
|
||||||
|
b46e8411-29d3-44b6-ae65-55f11bf360bd_FACTURE_OCULISTE_JANE-1.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
7ad6d85f-7245-4c05-8c79-512ed13fe0d5_lunettes_001-1.jpg,3.1,Low,implement,reject,reject,implement
|
||||||
|
5dab2435-c975-40bc-89d4-fadf59c19553_image_1_scale_0.6.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25198581_2_scale_1.5.jpg,2.0,Low,reject,reject,reject,implement
|
||||||
|
1724399050372FA_24-1136_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
44f39110-8f97-415d-8cc1-989f0a6df226_Ostheo_22_01_25_1_scale_1.5.jpg,2.6,Low,reject,reject,reject,implement
|
||||||
|
8fffd4ea-784b-49df-9f7e-780eed5664c8_facturation_osteo-1_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27776613_1_scale_1.5.jpg,2.5,Low,reject,reject,reject,implement
|
||||||
|
3f09fc00-ffd5-498a-adb8-b6805519ad3a_20250212_133526_1_scale_0.6.jpg,4.0,Low,implement,implement,reject,implement
|
||||||
|
9838138f-ae12-4664-831e-ae5f0b9c14fb_IMG_5959-1.jpg,3.4,Low,implement,implement,reject,implement
|
||||||
|
Facture des lentilles de contact-27719018_1_scale_1.5.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
Facture médecine douce-27703164_1_scale_1.5.jpg,3.1,Low,implement,reject,reject,implement
|
||||||
|
cc0c0b33-1a94-469b-bd88-ca534e257d33_Osteo_1_scale_1.5.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
8c3abdc3-796f-4764-9cc8-4da2481f36e8_IMG_2534_1_scale_0.6.jpg,4.0,High,implement,implement,reject,implement
|
||||||
|
Facture des lentilles de contact-27620389_1_scale_1.5.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
DDE prestation Facture des lentilles de contact-26751453_1_scale_1.5.jpg,3.8,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-1078555_1_scale_1.5.jpg,3.9,High,implement,implement,reject,implement
|
||||||
|
ce769ca9-924b-4355-bb1f-ce98c6a7049b_IMG_5741_1_scale_1.0.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
RF MO ODO 2018 2 8.jpg,3.5,Low,implement,implement,reject,implement
|
||||||
|
DDE prestation Facture des lentilles de contact-26733889_1_scale_1.5.jpg,3.5,Low,implement,implement,reject,implement
|
||||||
|
172415667786117241475973227470455758207037834_1_scale_1.0.jpg,3.9,High,implement,implement,reject,implement
|
||||||
|
0c9e3552-1f5f-4779-8c8b-1481c6b7ab2b_20250113_092847-1.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
1724425079171Facture_PSY_11042024_1_scale_1.0.jpg,3.6,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26349654_1_scale_1.5.jpg,3.3,Low,implement,implement,reject,implement
|
||||||
|
64fa4c19-efa4-48f1-acf8-8c2e8f573b8b_Facture_osteopathe__1_scale_1.5.jpg,3.4,Low,implement,implement,reject,implement
|
||||||
|
1724397125682facture_1_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
17b264a2-4881-49a4-8326-48ace17dd86f_factures_ophtalmo_3_scale_1.5.jpg,3.5,High,implement,implement,reject,implement
|
||||||
|
484d05c2-b89b-4ec0-8968-9ae6a5360f6a_DetailDesPaiements_1_scale_1.5.jpg,3.7,High,implement,implement,reject,implement
|
||||||
|
1724226587979Seances_ostheo_02_1_scale_1.5.jpg,2.6,Low,reject,reject,reject,implement
|
||||||
|
a593830c-dcbb-4553-860f-b0925a4c30ef_image-1.jpg,3.7,Low,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-1062996_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-26595219_2_scale_1.5.jpg,2.7,High,reject,reject,reject,implement
|
||||||
|
b86e78c9-db57-42d0-ab4e-5c3175228663_20250207_134758_1_scale_0.6.jpg,4.0,Low,implement,implement,reject,implement
|
||||||
|
287b78bf-1861-467f-973f-21aad6be26f1_livret_de_famille_Humez_25022024-2_1_scale_1.0.jpg,3.4,Low,implement,implement,reject,implement
|
||||||
|
de6a66cd-d729-479c-a119-8b9e442702db_Screenshot_20250227_112521_Gallery-1.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-1148278_1_scale_1.5.jpg,3.6,High,implement,implement,reject,implement
|
||||||
|
Untitleda02d1dfdad-50111dfafdfd.jpg,4.0,High,implement,implement,reject,implement
|
||||||
|
Facture ostéopathe-25279751_1_scale_1.5.jpg,3.4,High,implement,implement,reject,implement
|
||||||
|
Extrait acte de naissance - 27029579.jpg,3.2,Low,implement,reject,reject,implement
|
||||||
|
a90d5fa1-fca8-4995-b894-aff2e2449ee4_20250207_183312_1_scale_0.6.jpg,3.9,Low,implement,implement,reject,implement
|
||||||
|
BIN
docs/task/facture/results/facture_deqa_images.xlsx
Normal file
BIN
docs/task/facture/results/facture_metric_curves.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
docs/task/facture/results/facture_precision_recall_curve.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
docs/task/facture/results/facture_roc_like_curve.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
docs/task/facture/results/facture_score_distributions.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
docs/task/facture/results/facture_sorted_scores_with_thr.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
50
docs/task/facture/results/facture_thresholds_summary.json
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"positive_definition": "HIGH when score >= threshold",
|
||||||
|
"best_thresholds": {
|
||||||
|
"f1": {
|
||||||
|
"threshold": 3.1,
|
||||||
|
"value": 0.6886446886446885,
|
||||||
|
"confusion": {
|
||||||
|
"TP": 94,
|
||||||
|
"FP": 79,
|
||||||
|
"FN": 6,
|
||||||
|
"TN": 21
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"accuracy": {
|
||||||
|
"threshold": 3.3,
|
||||||
|
"value": 0.595,
|
||||||
|
"confusion": {
|
||||||
|
"TP": 87,
|
||||||
|
"FP": 68,
|
||||||
|
"FN": 13,
|
||||||
|
"TN": 32
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"precision": {
|
||||||
|
"threshold": 4.1,
|
||||||
|
"value": 0.6666666666666666,
|
||||||
|
"confusion": {
|
||||||
|
"TP": 2,
|
||||||
|
"FP": 1,
|
||||||
|
"FN": 98,
|
||||||
|
"TN": 99
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"recall": {
|
||||||
|
"threshold": 1.7,
|
||||||
|
"value": 1.0,
|
||||||
|
"confusion": {
|
||||||
|
"TP": 100,
|
||||||
|
"FP": 100,
|
||||||
|
"FN": 0,
|
||||||
|
"TN": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"counts": {
|
||||||
|
"total": 200,
|
||||||
|
"positives": 100,
|
||||||
|
"negatives": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,3 +10,4 @@ tqdm==4.65.0
|
|||||||
torch
|
torch
|
||||||
transformers
|
transformers
|
||||||
pyiqa
|
pyiqa
|
||||||
|
openpyxl==3.1.5
|
||||||
|
|||||||
@@ -1,81 +0,0 @@
|
|||||||
3.9 - image (9)_0.png
|
|
||||||
3.9 - ITE55351156_Passeport_Completed_0.png
|
|
||||||
3.8 - image (3)_0.png
|
|
||||||
3.8 - image (18)_1.png
|
|
||||||
3.8 - image (25)_0.png
|
|
||||||
3.8 - image (2)_0.png
|
|
||||||
3.7 - image (6)_6.png
|
|
||||||
3.7 - ITE55351372_RÉPUBLIQUE_FRANÇAISE_Completed_0.png
|
|
||||||
3.7 - ITE55354891_image_Completed_0.png
|
|
||||||
3.7 - image (23)_0.png
|
|
||||||
3.7 - image (21)_0.png
|
|
||||||
3.7 - image (15)_0.png
|
|
||||||
3.7 - ITE55354550_20250728_113359_Completed_0.png
|
|
||||||
3.7 - image (6)_2.png
|
|
||||||
3.7 - image (7)_1.png
|
|
||||||
3.6 - ITE55348016_image_Completed_0.png
|
|
||||||
3.6 - image (6)_0.png
|
|
||||||
3.6 - ITE55343297_20250729_172626_Completed_0.png
|
|
||||||
3.6 - image (29)_0.png
|
|
||||||
3.6 - image (17)_0.png
|
|
||||||
3.5 - ITE55340822_passeport_pascal_2028_Completed_0.png
|
|
||||||
3.5 - image (27)_0.png
|
|
||||||
3.5 - image (18)_0.png
|
|
||||||
3.5 - image (24)_0.png
|
|
||||||
3.5 - image (12)_0.png
|
|
||||||
3.5 - image (6)_1.png
|
|
||||||
3.4 - ITE55348904_cni_verso_0.png
|
|
||||||
3.4 - image (7)_0.png
|
|
||||||
3.4 - image (6)_3.png
|
|
||||||
3.4 - image (22)_2.png
|
|
||||||
3.3 - ITE55352984_CNI_Completed_1.png
|
|
||||||
3.3 - image (30)_0.png
|
|
||||||
3.3 - image (12)_1.png
|
|
||||||
3.3 - ITE55341271_C_I_face_Completed_0.png
|
|
||||||
3.3 - ITE55351372_RÉPUBLIQUE_FRANÇAISE_Completed_1.png
|
|
||||||
3.3 - ITE55343716_CNI_Completed_0.png
|
|
||||||
3.2 - image (17)_1.png
|
|
||||||
3.2 - ITE55341677_2023_-_CNI_Recto-Verso_Hassina_0.png
|
|
||||||
3.2 - image (22)_0.png
|
|
||||||
3.1 - image (26)_0.png
|
|
||||||
3.1 - image (16)_0.png
|
|
||||||
3.1 - image (18)_2.png
|
|
||||||
3.1 - image (18)_3.png
|
|
||||||
3.1 - image (19)_1.png
|
|
||||||
3.1 - ITE55343716_CNI_Completed_1.png
|
|
||||||
3.1 - ITE55352984_CNI_Completed_0.png
|
|
||||||
3.1 - ITE55347926_DHONDT_CNI_0.png
|
|
||||||
3.0 - image (11)_1.png
|
|
||||||
3.0 - image_0_0.png
|
|
||||||
3.0 - image (1)_0.png
|
|
||||||
3.0 - image (22)_3.png
|
|
||||||
3.0 - ITE55336627_PASSEPORT_Abasse_GUEYE__Completed_0.png
|
|
||||||
3.0 - image (28)_0.png
|
|
||||||
2.9 - image (6)_4.png
|
|
||||||
2.9 - image (22)_1.png
|
|
||||||
2.9 - image (4)_0.png
|
|
||||||
2.9 - image (28)_1.png
|
|
||||||
2.9 - image (10)_1.png
|
|
||||||
2.9 - ITE55348464_IMG-20250721-WA0000_Completed_0.png
|
|
||||||
2.9 - image (11)_0.png
|
|
||||||
2.9 - image (10)_0.png
|
|
||||||
2.9 - ITE55340318_ID_kat__1__Completed_0.png
|
|
||||||
2.8 - image (5)_0.png
|
|
||||||
2.8 - ITE55347865_Snapchat-715567440_Completed_0.png
|
|
||||||
2.8 - image (6)_5.png
|
|
||||||
2.8 - image (13)_0.png
|
|
||||||
2.8 - ITE55346966_17537774579547958575370370624241_Completed_0.png
|
|
||||||
2.8 - ITE55347866_Snapchat-1551171803_Completed_0.png
|
|
||||||
2.7 - ITE55350967_PLI_INCONNU_-_ADH_625302_42296806_DMS_0.png
|
|
||||||
2.7 - image (8)_0.png
|
|
||||||
2.7 - image (31)_0.png
|
|
||||||
2.7 - ITE55348878_CNI_RECTO_0.png
|
|
||||||
2.7 - image (1)_1.png
|
|
||||||
2.7 - image (13)_1.png
|
|
||||||
2.7 - image (14)_0.png
|
|
||||||
2.6 - ITE55349793_2_em_CNI_CHASTAING__0.png
|
|
||||||
2.6 - image (19)_0.png
|
|
||||||
2.4 - ITE55351087_PLI_INCONNU_-_ADH_625120_42296075_DMS_0.png
|
|
||||||
2.2 - ITE55352532_PLI_INCONNU_-_ADH_625374_42297046_DMS_0.png
|
|
||||||
2.0 - ITE55351128_PLI_INCONNU_-_ADH_625123_42296103_DMS_0.png
|
|
||||||
1.9 - ITE55351128_PLI_INCONNU_-_ADH_625123_42296103_DMS_1.png
|
|
||||||
3398
results/facture.txt
327
scripts/threshold_analysis.py
Normal file
@@ -0,0 +1,327 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Threshold analysis for DeQA scores vs. human labels (High/Low).
|
||||||
|
|
||||||
|
Inputs (defaults for facture task):
|
||||||
|
- results/facture.txt # lines like: "4.2 - filename.jpg"
|
||||||
|
- data/facture/labels.csv # columns: filename,label with label in {High,Low}
|
||||||
|
|
||||||
|
Outputs:
|
||||||
|
- results/facture_thresholds_summary.json # best thresholds for accuracy/precision/recall/F1
|
||||||
|
- results/facture_metric_curves.png # metrics vs threshold
|
||||||
|
- results/facture_score_distributions.png # score histograms by label
|
||||||
|
- results/facture_decisions.csv # per-image decisions at each operating point
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Dict, List, Tuple
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import seaborn as sns
|
||||||
|
|
||||||
|
|
||||||
|
def read_deqa_results_txt(path: Path) -> pd.DataFrame:
|
||||||
|
"""Read TXT results of the form "<score> - <filename>" into a DataFrame."""
|
||||||
|
rows: List[Dict[str, str | float]] = []
|
||||||
|
with open(path, "r", encoding="utf-8") as f:
|
||||||
|
for line in f:
|
||||||
|
line = line.strip()
|
||||||
|
if not line:
|
||||||
|
continue
|
||||||
|
# Expect pattern: "<score> - <filename>"
|
||||||
|
try:
|
||||||
|
score_part, fname = line.split(" - ", 1)
|
||||||
|
score = float(score_part)
|
||||||
|
rows.append({"filename": fname, "score": score})
|
||||||
|
except Exception:
|
||||||
|
# Skip malformed lines silently
|
||||||
|
continue
|
||||||
|
df = pd.DataFrame(rows)
|
||||||
|
if not df.empty:
|
||||||
|
df["filename"] = df["filename"].astype(str)
|
||||||
|
df["stem"] = df["filename"].apply(lambda x: Path(x).stem.lower())
|
||||||
|
return df
|
||||||
|
|
||||||
|
|
||||||
|
def read_labels_csv(path: Path) -> pd.DataFrame:
|
||||||
|
"""Read labels CSV with columns: filename,label (High/Low)."""
|
||||||
|
df = pd.read_csv(path)
|
||||||
|
# Normalize
|
||||||
|
df["filename"] = df["filename"].astype(str)
|
||||||
|
df["label"] = df["label"].astype(str).str.strip().str.capitalize()
|
||||||
|
# Map High->1, Low->0
|
||||||
|
label_map = {"High": 1, "Low": 0}
|
||||||
|
df["y_true"] = df["label"].map(label_map)
|
||||||
|
df["stem"] = df["filename"].apply(lambda x: Path(x).stem.lower())
|
||||||
|
return df[["filename", "label", "y_true", "stem"]]
|
||||||
|
|
||||||
|
|
||||||
|
def confusion_from_threshold(scores: np.ndarray, y_true: np.ndarray, thr: float) -> Tuple[int, int, int, int]:
|
||||||
|
pred = (scores >= thr).astype(int)
|
||||||
|
tp = int(np.sum((pred == 1) & (y_true == 1)))
|
||||||
|
fp = int(np.sum((pred == 1) & (y_true == 0)))
|
||||||
|
fn = int(np.sum((pred == 0) & (y_true == 1)))
|
||||||
|
tn = int(np.sum((pred == 0) & (y_true == 0)))
|
||||||
|
return tp, fp, fn, tn
|
||||||
|
|
||||||
|
|
||||||
|
def metric_from_confusion(tp: int, fp: int, fn: int, tn: int, metric: str) -> float:
|
||||||
|
if metric == "accuracy":
|
||||||
|
denom = tp + fp + fn + tn
|
||||||
|
return (tp + tn) / denom if denom > 0 else 0.0
|
||||||
|
if metric == "precision":
|
||||||
|
denom = tp + fp
|
||||||
|
return tp / denom if denom > 0 else 0.0
|
||||||
|
if metric == "recall":
|
||||||
|
denom = tp + fn
|
||||||
|
return tp / denom if denom > 0 else 0.0
|
||||||
|
if metric == "f1":
|
||||||
|
p_denom = tp + fp
|
||||||
|
r_denom = tp + fn
|
||||||
|
precision = tp / p_denom if p_denom > 0 else 0.0
|
||||||
|
recall = tp / r_denom if r_denom > 0 else 0.0
|
||||||
|
denom = precision + recall
|
||||||
|
return (2 * precision * recall / denom) if denom > 0 else 0.0
|
||||||
|
raise ValueError(f"Unsupported metric: {metric}")
|
||||||
|
|
||||||
|
|
||||||
|
def pick_threshold(scores: np.ndarray, y_true: np.ndarray, metric: str = "f1") -> Tuple[float, float, Dict[str, int]]:
|
||||||
|
thr_candidates = np.unique(scores)
|
||||||
|
best_thr: float | None = None
|
||||||
|
best_val: float = -1.0
|
||||||
|
best_conf: Tuple[int, int, int, int] | None = None
|
||||||
|
|
||||||
|
for t in thr_candidates:
|
||||||
|
tp, fp, fn, tn = confusion_from_threshold(scores, y_true, t)
|
||||||
|
val = metric_from_confusion(tp, fp, fn, tn, metric)
|
||||||
|
# Tie-breaker: prefer higher threshold if metric ties (safer for downstream)
|
||||||
|
if (val > best_val) or (np.isclose(val, best_val) and (best_thr is None or t > best_thr)):
|
||||||
|
best_val = val
|
||||||
|
best_thr = t
|
||||||
|
best_conf = (tp, fp, fn, tn)
|
||||||
|
|
||||||
|
assert best_thr is not None and best_conf is not None
|
||||||
|
tp, fp, fn, tn = best_conf
|
||||||
|
return float(best_thr), float(best_val), {"TP": tp, "FP": fp, "FN": fn, "TN": tn}
|
||||||
|
|
||||||
|
|
||||||
|
def compute_metric_curves(scores: np.ndarray, y_true: np.ndarray) -> pd.DataFrame:
|
||||||
|
data: List[Dict[str, float]] = []
|
||||||
|
for t in np.unique(scores):
|
||||||
|
tp, fp, fn, tn = confusion_from_threshold(scores, y_true, t)
|
||||||
|
row = {
|
||||||
|
"threshold": float(t),
|
||||||
|
"accuracy": metric_from_confusion(tp, fp, fn, tn, "accuracy"),
|
||||||
|
"precision": metric_from_confusion(tp, fp, fn, tn, "precision"),
|
||||||
|
"recall": metric_from_confusion(tp, fp, fn, tn, "recall"),
|
||||||
|
"f1": metric_from_confusion(tp, fp, fn, tn, "f1"),
|
||||||
|
"TP": tp,
|
||||||
|
"FP": fp,
|
||||||
|
"FN": fn,
|
||||||
|
"TN": tn,
|
||||||
|
}
|
||||||
|
data.append(row)
|
||||||
|
return pd.DataFrame(data).sort_values("threshold").reset_index(drop=True)
|
||||||
|
|
||||||
|
|
||||||
|
def plot_distributions(df: pd.DataFrame, out_path: Path) -> None:
|
||||||
|
plt.figure(figsize=(8, 5))
|
||||||
|
sns.histplot(data=df, x="score", hue="label", bins=30, kde=True, stat="density", common_norm=False)
|
||||||
|
plt.title("DeQA score distributions by label")
|
||||||
|
plt.xlabel("DeQA score")
|
||||||
|
plt.ylabel("Density")
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_path, dpi=150)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
|
def plot_metric_curves(curve_df: pd.DataFrame, out_path: Path) -> None:
|
||||||
|
plt.figure(figsize=(8, 5))
|
||||||
|
for metric in ["accuracy", "precision", "recall", "f1"]:
|
||||||
|
plt.plot(curve_df["threshold"], curve_df[metric], label=metric)
|
||||||
|
plt.xlabel("Threshold (score >= t => HIGH)")
|
||||||
|
plt.ylabel("Metric value")
|
||||||
|
plt.ylim(0.0, 1.05)
|
||||||
|
plt.title("Metrics vs threshold")
|
||||||
|
plt.legend()
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_path, dpi=150)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
def plot_sorted_scores_with_threshold(df: pd.DataFrame, thr: float, out_path: Path) -> None:
|
||||||
|
tmp = df.sort_values("score").reset_index(drop=True)
|
||||||
|
x = np.arange(len(tmp))
|
||||||
|
y = tmp["score"].to_numpy()
|
||||||
|
plt.figure(figsize=(9, 4))
|
||||||
|
plt.scatter(x, y, s=6, alpha=0.6)
|
||||||
|
plt.axhline(thr, color="red", linestyle="--", label=f"threshold={thr:.3f}")
|
||||||
|
plt.xlabel("Images sorted by score")
|
||||||
|
plt.ylabel("DeQA score")
|
||||||
|
plt.title("Sorted scores with operating threshold")
|
||||||
|
plt.legend()
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_path, dpi=150)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
def plot_pr_curve(curves: pd.DataFrame, out_path: Path) -> None:
|
||||||
|
plt.figure(figsize=(6, 5))
|
||||||
|
plt.plot(curves["recall"], curves["precision"], marker="o", ms=3, lw=1)
|
||||||
|
plt.xlabel("Recall")
|
||||||
|
plt.ylabel("Precision")
|
||||||
|
plt.title("Precision-Recall across thresholds")
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_path, dpi=150)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
def plot_roc_like(curves: pd.DataFrame, out_path: Path) -> None:
|
||||||
|
# TPR=recall, FPR=FP/(FP+TN)
|
||||||
|
denom = (curves["FP"] + curves["TN"]).replace(0, np.nan)
|
||||||
|
fpr = curves["FP"] / denom
|
||||||
|
tpr = curves["recall"]
|
||||||
|
plt.figure(figsize=(6, 5))
|
||||||
|
plt.plot(fpr.fillna(0), tpr, marker="o", ms=3, lw=1)
|
||||||
|
plt.xlabel("False Positive Rate (FPR)")
|
||||||
|
plt.ylabel("True Positive Rate (TPR)")
|
||||||
|
plt.title("ROC-like curve across thresholds")
|
||||||
|
plt.grid(True, alpha=0.3)
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_path, dpi=150)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
def plot_confusion_heatmap(tp: int, fp: int, fn: int, tn: int, out_path: Path) -> None:
|
||||||
|
cm = np.array([[tp, fp],[fn, tn]])
|
||||||
|
plt.figure(figsize=(4, 4))
|
||||||
|
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", cbar=False,
|
||||||
|
xticklabels=["Pred High","Pred Low"], yticklabels=["True High","True Low"])
|
||||||
|
plt.title("Confusion matrix at operating threshold")
|
||||||
|
plt.tight_layout()
|
||||||
|
plt.savefig(out_path, dpi=150)
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
parser = argparse.ArgumentParser(description="Threshold analysis for DeQA scores vs labels")
|
||||||
|
parser.add_argument("--scores", type=str, default="results/facture.txt", help="Path to deqa scores txt")
|
||||||
|
parser.add_argument("--labels", type=str, default="data/facture/labels.csv", help="Path to labels csv")
|
||||||
|
parser.add_argument("--outdir", type=str, default="results", help="Directory to write outputs")
|
||||||
|
parser.add_argument("--sample-per-class", type=int, default=0,
|
||||||
|
help="If >0, randomly sample N High and N Low for a quick benchmark")
|
||||||
|
parser.add_argument("--seed", type=int, default=42, help="Random seed for sampling")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
scores_path = Path(args.scores)
|
||||||
|
labels_path = Path(args.labels)
|
||||||
|
outdir = Path(args.outdir)
|
||||||
|
outdir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
# Load
|
||||||
|
df_scores = read_deqa_results_txt(scores_path)
|
||||||
|
df_labels = read_labels_csv(labels_path)
|
||||||
|
|
||||||
|
# Join on lowercase stem to tolerate extension differences
|
||||||
|
df = df_scores.merge(df_labels, on="stem", how="inner", suffixes=("_score", "_label"))
|
||||||
|
# Prefer label-side filename when available
|
||||||
|
df["filename"] = df["filename_label"].where(df["filename_label"].notna(), df["filename_score"])
|
||||||
|
df.drop(columns=[c for c in ["filename_label", "filename_score"] if c in df.columns], inplace=True)
|
||||||
|
if df.empty:
|
||||||
|
raise RuntimeError("No overlap between scores and labels. Check filenames.")
|
||||||
|
|
||||||
|
# Optional sampling per class
|
||||||
|
if args.sample_per_class and args.sample_per_class > 0:
|
||||||
|
rng = np.random.default_rng(args.seed)
|
||||||
|
high_df = df[df["y_true"] == 1]
|
||||||
|
low_df = df[df["y_true"] == 0]
|
||||||
|
n_high = min(args.sample_per_class, len(high_df))
|
||||||
|
n_low = min(args.sample_per_class, len(low_df))
|
||||||
|
high_sample = high_df.sample(n=n_high, random_state=args.seed)
|
||||||
|
low_sample = low_df.sample(n=n_low, random_state=args.seed)
|
||||||
|
df = pd.concat([high_sample, low_sample], ignore_index=True)
|
||||||
|
df = df.sample(frac=1.0, random_state=args.seed).reset_index(drop=True)
|
||||||
|
|
||||||
|
scores = df["score"].to_numpy(dtype=float)
|
||||||
|
y_true = df["y_true"].to_numpy(dtype=int)
|
||||||
|
|
||||||
|
# Compute best thresholds
|
||||||
|
thr_f1, best_f1, conf_f1 = pick_threshold(scores, y_true, metric="f1")
|
||||||
|
thr_acc, best_acc, conf_acc = pick_threshold(scores, y_true, metric="accuracy")
|
||||||
|
thr_prec, best_prec, conf_prec = pick_threshold(scores, y_true, metric="precision")
|
||||||
|
thr_rec, best_rec, conf_rec = pick_threshold(scores, y_true, metric="recall")
|
||||||
|
|
||||||
|
summary = {
|
||||||
|
"positive_definition": "HIGH when score >= threshold",
|
||||||
|
"best_thresholds": {
|
||||||
|
"f1": {"threshold": thr_f1, "value": best_f1, "confusion": conf_f1},
|
||||||
|
"accuracy": {"threshold": thr_acc, "value": best_acc, "confusion": conf_acc},
|
||||||
|
"precision": {"threshold": thr_prec, "value": best_prec, "confusion": conf_prec},
|
||||||
|
"recall": {"threshold": thr_rec, "value": best_rec, "confusion": conf_rec},
|
||||||
|
},
|
||||||
|
"counts": {
|
||||||
|
"total": int(len(df)),
|
||||||
|
"positives": int(df["y_true"].sum()),
|
||||||
|
"negatives": int(len(df) - int(df["y_true"].sum())),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Metric curves and figures
|
||||||
|
curves = compute_metric_curves(scores, y_true)
|
||||||
|
plot_distributions(df, outdir / "facture_score_distributions.png")
|
||||||
|
plot_metric_curves(curves, outdir / "facture_metric_curves.png")
|
||||||
|
# Extra plots
|
||||||
|
plot_sorted_scores_with_threshold(df, thr_f1, outdir / "facture_sorted_scores_with_thr.png")
|
||||||
|
plot_pr_curve(curves, outdir / "facture_precision_recall_curve.png")
|
||||||
|
plot_roc_like(curves, outdir / "facture_roc_like_curve.png")
|
||||||
|
plot_confusion_heatmap(conf_f1["TP"], conf_f1["FP"], conf_f1["FN"], conf_f1["TN"], outdir / "facture_confusion_matrix.png")
|
||||||
|
|
||||||
|
# Decisions CSV (for three operating points + F1)
|
||||||
|
def decide(thr: float) -> np.ndarray:
|
||||||
|
return (scores >= thr).astype(int)
|
||||||
|
|
||||||
|
df_out = df.copy()
|
||||||
|
df_out["decision_f1"] = decide(thr_f1)
|
||||||
|
df_out["decision_acc"] = decide(thr_acc)
|
||||||
|
df_out["decision_prec"] = decide(thr_prec)
|
||||||
|
df_out["decision_rec"] = decide(thr_rec)
|
||||||
|
# Map 1/0 to textual action
|
||||||
|
to_action = {1: "implement", 0: "reject"}
|
||||||
|
for col in ["decision_f1", "decision_acc", "decision_prec", "decision_rec"]:
|
||||||
|
df_out[col] = df_out[col].map(to_action)
|
||||||
|
df_out.rename(columns={"score": "deqa_score"}, inplace=True)
|
||||||
|
df_out = df_out[["filename", "deqa_score", "label", "decision_f1", "decision_acc", "decision_prec", "decision_rec"]]
|
||||||
|
df_out.to_csv(outdir / "facture_decisions.csv", index=False)
|
||||||
|
|
||||||
|
# Save summary JSON
|
||||||
|
with open(outdir / "facture_thresholds_summary.json", "w", encoding="utf-8") as f:
|
||||||
|
json.dump(summary, f, indent=2)
|
||||||
|
|
||||||
|
# Save a single Excel file with one sheet containing all rows and decisions (F1 operating point)
|
||||||
|
try:
|
||||||
|
excel_path = outdir / "facture_deqa_images.xlsx"
|
||||||
|
one_sheet_df = df_out.copy()
|
||||||
|
# Keep core columns only
|
||||||
|
keep_cols = ["filename", "deqa_score", "label", "decision_f1"]
|
||||||
|
one_sheet_df = one_sheet_df[keep_cols]
|
||||||
|
one_sheet_df.rename(columns={"decision_f1": "decision"}, inplace=True)
|
||||||
|
with pd.ExcelWriter(excel_path, engine='openpyxl') as writer:
|
||||||
|
one_sheet_df.to_excel(writer, sheet_name="DeQA_Images", index=False)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Warning: Failed to write Excel file: {e}")
|
||||||
|
|
||||||
|
# Also print a concise console summary
|
||||||
|
print("Best thresholds (score >= thr => HIGH):")
|
||||||
|
for k in ["f1", "accuracy", "precision", "recall"]:
|
||||||
|
info = summary["best_thresholds"][k]
|
||||||
|
print(f"- {k}: thr={info['threshold']:.3f}, value={info['value']:.3f}, conf={info['confusion']}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||