Spaces:
Sleeping
Sleeping
résolution de bugs ?
Browse files
main.py
CHANGED
@@ -91,7 +91,7 @@ def get_job_status(job_id: str):
|
|
91 |
status_data = json.load(f)
|
92 |
return status_data
|
93 |
|
94 |
-
def process_file(job_id: str, input_file_path: str, ext: str, original_filename: str):
|
95 |
job_dir = os.path.join(JOBS_DIR, job_id)
|
96 |
try:
|
97 |
update_job_status(job_id, 'processing', 'Le fichier est en cours de traitement')
|
@@ -101,16 +101,9 @@ def process_file(job_id: str, input_file_path: str, ext: str, original_filename:
|
|
101 |
base_filename = os.path.splitext(original_filename)[0]
|
102 |
output_filename = os.path.join(job_dir, f"{base_filename}.html")
|
103 |
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
final_html = loop.run_until_complete(
|
108 |
-
convert_to_accessible_html(
|
109 |
-
input_file_path, ext, base_filename, image_counter, images_data
|
110 |
-
)
|
111 |
-
)
|
112 |
-
finally:
|
113 |
-
loop.close()
|
114 |
|
115 |
if not final_html:
|
116 |
update_job_status(job_id, 'error', 'Erreur lors de la conversion.')
|
@@ -682,6 +675,7 @@ async def convert_file_to_html(
|
|
682 |
with open(status_file, 'w') as f:
|
683 |
json.dump(status, f)
|
684 |
|
|
|
685 |
background_tasks.add_task(process_file, job_id, input_file_path, ext, file.filename)
|
686 |
|
687 |
return JSONResponse(content={'job_id': job_id})
|
@@ -690,6 +684,7 @@ async def convert_file_to_html(
|
|
690 |
logging.error(f"Erreur lors du démarrage du job : {str(e)}")
|
691 |
return JSONResponse(status_code=500, content={"message": f"Erreur lors du démarrage du job : {str(e)}"})
|
692 |
|
|
|
693 |
@app.get("/status/{job_id}")
|
694 |
async def check_status(job_id: str):
|
695 |
status_data = get_job_status(job_id)
|
@@ -729,28 +724,41 @@ def extract_images_from_pdf(input_filename: str) -> List[bytes]:
|
|
729 |
smask_xrefs = set() # Servira à lister les xrefs d'images masques
|
730 |
main_images = [] # Servira à lister les infos des images principales
|
731 |
|
732 |
-
for page in doc:
|
733 |
img_list = page.get_images(full=True)
|
734 |
-
|
|
|
|
|
|
|
|
|
|
|
735 |
xref, smask, width, height, bpc, colorspace, filters = img[:7]
|
736 |
# Si smask != 0, c'est une image principale avec un masque
|
737 |
# On ajoute le xref du masque à la liste des images à ignorer
|
738 |
if smask != 0:
|
739 |
smask_xrefs.add(smask)
|
|
|
740 |
# On enregistre l'image principale
|
741 |
main_images.append((xref, smask))
|
742 |
|
|
|
743 |
# Maintenant on extrait uniquement les images qui ne sont pas des masques
|
744 |
for (xref, smask) in main_images:
|
745 |
# Si xref est dans smask_xrefs, c'est une image de masque à ignorer
|
746 |
if xref in smask_xrefs:
|
|
|
747 |
continue
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
|
|
|
|
|
|
|
|
752 |
return images
|
753 |
|
|
|
754 |
def extract_images_from_ppt(input_filename: str) -> List[bytes]:
|
755 |
images = []
|
756 |
if 'Presentation' not in globals():
|
|
|
91 |
status_data = json.load(f)
|
92 |
return status_data
|
93 |
|
94 |
+
async def process_file(job_id: str, input_file_path: str, ext: str, original_filename: str):
|
95 |
job_dir = os.path.join(JOBS_DIR, job_id)
|
96 |
try:
|
97 |
update_job_status(job_id, 'processing', 'Le fichier est en cours de traitement')
|
|
|
101 |
base_filename = os.path.splitext(original_filename)[0]
|
102 |
output_filename = os.path.join(job_dir, f"{base_filename}.html")
|
103 |
|
104 |
+
final_html = await convert_to_accessible_html(
|
105 |
+
input_file_path, ext, base_filename, image_counter, images_data
|
106 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
|
108 |
if not final_html:
|
109 |
update_job_status(job_id, 'error', 'Erreur lors de la conversion.')
|
|
|
675 |
with open(status_file, 'w') as f:
|
676 |
json.dump(status, f)
|
677 |
|
678 |
+
# Ajoutez la tâche asynchrone
|
679 |
background_tasks.add_task(process_file, job_id, input_file_path, ext, file.filename)
|
680 |
|
681 |
return JSONResponse(content={'job_id': job_id})
|
|
|
684 |
logging.error(f"Erreur lors du démarrage du job : {str(e)}")
|
685 |
return JSONResponse(status_code=500, content={"message": f"Erreur lors du démarrage du job : {str(e)}"})
|
686 |
|
687 |
+
|
688 |
@app.get("/status/{job_id}")
|
689 |
async def check_status(job_id: str):
|
690 |
status_data = get_job_status(job_id)
|
|
|
724 |
smask_xrefs = set() # Servira à lister les xrefs d'images masques
|
725 |
main_images = [] # Servira à lister les infos des images principales
|
726 |
|
727 |
+
for page_num, page in enumerate(doc, start=1):
|
728 |
img_list = page.get_images(full=True)
|
729 |
+
logging.debug(f"Page {page_num} contient {len(img_list)} images.")
|
730 |
+
for img_index, img in enumerate(img_list, start=1):
|
731 |
+
if len(img) < 7:
|
732 |
+
logging.warning(f"Image {img_index} sur la page {page_num} a moins de 7 éléments : {img}")
|
733 |
+
continue # Ignorer les images avec une structure inattendue
|
734 |
+
|
735 |
xref, smask, width, height, bpc, colorspace, filters = img[:7]
|
736 |
# Si smask != 0, c'est une image principale avec un masque
|
737 |
# On ajoute le xref du masque à la liste des images à ignorer
|
738 |
if smask != 0:
|
739 |
smask_xrefs.add(smask)
|
740 |
+
logging.debug(f"Image {img_index} sur la page {page_num} a un masque (smask={smask}).")
|
741 |
# On enregistre l'image principale
|
742 |
main_images.append((xref, smask))
|
743 |
|
744 |
+
logging.debug(f"Nombre total d'images principales à extraire : {len(main_images)}")
|
745 |
# Maintenant on extrait uniquement les images qui ne sont pas des masques
|
746 |
for (xref, smask) in main_images:
|
747 |
# Si xref est dans smask_xrefs, c'est une image de masque à ignorer
|
748 |
if xref in smask_xrefs:
|
749 |
+
logging.debug(f"Image xref={xref} est un masque, elle sera ignorée.")
|
750 |
continue
|
751 |
+
try:
|
752 |
+
base_image = doc.extract_image(xref)
|
753 |
+
image_bytes = base_image["image"]
|
754 |
+
images.append(image_bytes)
|
755 |
+
logging.debug(f"Image xref={xref} extraite avec succès.")
|
756 |
+
except Exception as e:
|
757 |
+
logging.error(f"Erreur lors de l'extraction de l'image xref={xref} : {str(e)}")
|
758 |
+
logging.info(f"Extraction des images terminée. Nombre total d'images extraites : {len(images)}")
|
759 |
return images
|
760 |
|
761 |
+
|
762 |
def extract_images_from_ppt(input_filename: str) -> List[bytes]:
|
763 |
images = []
|
764 |
if 'Presentation' not in globals():
|