Bentham commited on
Commit
e51aa49
·
verified ·
1 Parent(s): 0acd9a7

résolution de bugs ?

Browse files
Files changed (1) hide show
  1. main.py +25 -17
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
- loop = asyncio.new_event_loop()
105
- asyncio.set_event_loop(loop)
106
- try:
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
- for img in img_list:
 
 
 
 
 
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
- # Extraire l'image
749
- base_image = doc.extract_image(xref)
750
- image_bytes = base_image["image"]
751
- images.append(image_bytes)
 
 
 
 
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():