Docfile commited on
Commit
5f9325a
·
verified ·
1 Parent(s): 3cdafe6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -7
app.py CHANGED
@@ -1,13 +1,22 @@
1
- from flask import Flask, request, render_template
2
  import google.generativeai as genai
3
  import os
4
  from PIL import Image
5
  import io
 
 
 
 
6
 
7
  app = Flask(__name__)
 
 
8
 
9
  # Configuration de l'API Gemini
10
  token = os.environ.get("TOKEN")
 
 
 
11
  genai.configure(api_key=token)
12
 
13
  generation_config = {
@@ -34,6 +43,7 @@ model = genai.GenerativeModel(
34
  )
35
 
36
 
 
37
  @app.route("/", methods=["GET", "POST"])
38
  def index():
39
  e = ""
@@ -43,19 +53,62 @@ def index():
43
  else:
44
  image_file = request.files["image"]
45
  try:
46
- image = Image.open(io.BytesIO(image_file.read()))
 
 
47
 
48
- response = model.generate_content([mm, image]) # Passage de l'image
49
- print(response.text)
50
- e = response.text
51
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
- except Exception as e: # gérer les erreurs potentielles d'ouverture de l'image
54
- e = f"Erreur lors du traitement de l'image : {str(e)}"
55
 
 
 
56
 
57
  return render_template("index.html", e=e)
58
 
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  if __name__ == "__main__":
61
  app.run(debug=True)
 
1
+ from flask import Flask, request, render_template, send_from_directory
2
  import google.generativeai as genai
3
  import os
4
  from PIL import Image
5
  import io
6
+ import subprocess
7
+ import uuid
8
+ import re
9
+ import tempfile
10
 
11
  app = Flask(__name__)
12
+ app.config['UPLOAD_FOLDER'] = 'uploads'
13
+ os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
14
 
15
  # Configuration de l'API Gemini
16
  token = os.environ.get("TOKEN")
17
+ if not token:
18
+ raise ValueError("La variable d'environnement TOKEN doit être définie.")
19
+
20
  genai.configure(api_key=token)
21
 
22
  generation_config = {
 
43
  )
44
 
45
 
46
+
47
  @app.route("/", methods=["GET", "POST"])
48
  def index():
49
  e = ""
 
53
  else:
54
  image_file = request.files["image"]
55
  try:
56
+ with tempfile.NamedTemporaryFile(delete=False) as temp_img:
57
+ image_file.save(temp_img.name)
58
+ image = Image.open(temp_img.name)
59
 
60
+ response = model.generate_content([mm, image])
61
+ latex_code = response.text
62
+ os.remove(temp_img.name)
63
 
64
+ match = re.search(r"\\chemfig\{(.*?)\}", latex_code, re.DOTALL)
65
+ if match:
66
+ chemfig_code = match.group(1)
67
+ try:
68
+ with tempfile.TemporaryDirectory() as tmpdirname:
69
+ svg_filename = generate_svg_from_chemfig(chemfig_code, tmpdirname)
70
+ e = f'<img src="/uploads/{svg_filename}" alt="Structure chimique">'
71
+ except Exception as svg_error:
72
+ e = f"Erreur lors de la génération de l'image SVG : {str(svg_error)}"
73
+ elif any(keyword in latex_code.lower() for keyword in ['.pdf', '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.svg']):
74
+ e = "Désolé, les images et les PDF ne sont pas encore pris en charge dans la réponse."
75
+ else:
76
+ e = latex_code
77
 
 
 
78
 
79
+ except Exception as img_err:
80
+ e = f"Erreur lors du traitement de l'image: {str(img_err)}"
81
 
82
  return render_template("index.html", e=e)
83
 
84
 
85
+ def generate_svg_from_chemfig(chemfig_code, tmpdirname):
86
+ unique_id = str(uuid.uuid4())
87
+ tex_filename = os.path.join(tmpdirname, f"chem_{unique_id}.tex")
88
+ pdf_filename = os.path.join(tmpdirname, f"chem_{unique_id}.pdf")
89
+ svg_filename = f"chem_{unique_id}.svg"
90
+
91
+ tex_content = f"""\\documentclass[margin=10pt]{{standalone}}
92
+ \\usepackage{{chemfig}}
93
+ \\begin{{document}}
94
+ \\chemfig{{{chemfig_code}}}
95
+ \\end{{document}}"""
96
+
97
+ with open(tex_filename, "w") as tex_file:
98
+ tex_file.write(tex_content)
99
+
100
+ try:
101
+ subprocess.run(["pdflatex", "-interaction=nonstopmode", tex_filename], check=True, cwd=tmpdirname)
102
+ subprocess.run(["pdf2svg", pdf_filename, os.path.join(app.config['UPLOAD_FOLDER'], svg_filename)], check=True)
103
+ return svg_filename
104
+ except subprocess.CalledProcessError as e:
105
+ raise Exception(f"Erreur lors de la compilation LaTeX ou de la conversion en SVG : {e}")
106
+
107
+
108
+ @app.route('/uploads/<filename>')
109
+ def uploaded_file(filename):
110
+ return send_from_directory(app.config['UPLOAD_FOLDER'], filename)
111
+
112
+
113
  if __name__ == "__main__":
114
  app.run(debug=True)