alexneakameni commited on
Commit
a60e50a
·
verified ·
1 Parent(s): 60b22df

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -56
app.py CHANGED
@@ -1,10 +1,7 @@
1
  import gradio as gr
2
  from PIL import Image
3
- import os
4
  import sqlite3
5
- from groq import Groq
6
- import io
7
- import base64
8
 
9
 
10
  def initialize_database():
@@ -19,64 +16,23 @@ def initialize_database():
19
  """
20
  )
21
  db_connection.commit()
22
- return db_connection, cursor
23
-
24
-
25
- # Configuration GroqCloud
26
- def initialize_groq():
27
- return Groq(
28
- api_key=os.getenv("GROQ_API_KEY"),
29
- )
30
-
31
-
32
- def encode_image_to_base64(image: Image.Image):
33
- """Convert a PIL image to a base64-encoded string."""
34
- buffer = io.BytesIO()
35
- image.save(buffer, format="PNG")
36
- buffer.seek(0)
37
- return base64.b64encode(buffer.getvalue()).decode("utf-8")
38
 
39
 
40
  class VoterCardVerifier:
41
  def __init__(self):
42
- self.connection, self.cursor = initialize_database()
43
- self.groq = initialize_groq()
44
-
45
  def verify_card(self, image, card_number):
46
  # Convertir l'image pour Groq
47
  if isinstance(image, str):
48
  image = Image.open(image)
49
- image = encode_image_to_base64(image)
50
-
51
- # Préparer la requête pour le modèle
52
- messages = [
53
- {
54
- "role": "user",
55
- "content": [
56
- {
57
- "type": "text",
58
- "text": f"Vérifie si le numéro {card_number} est clairement visible et lisible sur l'image de cette carte d'électeur."
59
- " Confirme également que cette carte est bien d'origine camerounaise en vérifiant la présence explicite de la mention 'Cameroun' sur la carte."
60
- " Réponds uniquement par 'true' ou 'false' : 'true' si le numéro est présent, lisible, et que la carte est d'origine camerounaise ; 'false' dans tous les autres cas.",
61
- },
62
- {
63
- "type": "image_url",
64
- "image_url": {"url": f"data:image/PNG;base64,{image}"},
65
- },
66
- ],
67
- },
68
- ]
69
-
70
- # Appeler le modèle
71
- response = self.groq.chat.completions.create(
72
- model=os.getenv("GROQ_MODEL_ID"),
73
- messages=messages,
74
- temperature=0.1,
75
- max_tokens=25,
76
- )
77
- result = response.choices[0].message.content.strip().lower()
78
- print(result)
79
- is_valid = "true" in result
80
 
81
  if is_valid:
82
  # Sauvegarder dans Firebase
@@ -85,16 +41,20 @@ class VoterCardVerifier:
85
  return "Numéro de carte non trouvé sur l'image"
86
 
87
  def save_card_number(self, card_number):
 
 
88
  # Ajouter le numéro à Firestore
89
  # Sauvegarder dans la base de données
90
  try:
91
- self.cursor.execute(
92
  "INSERT INTO voter_cards (card_number) VALUES (?)", (card_number,)
93
  )
94
- self.connection.commit()
95
  return f"Numéro vérifié et sauvegardé : {card_number}"
96
  except sqlite3.IntegrityError:
97
  return f"Le numéro {card_number} existe déjà dans la base."
 
 
98
 
99
 
100
  # Interface Gradio
 
1
  import gradio as gr
2
  from PIL import Image
 
3
  import sqlite3
4
+ from ocr_engine import ocr_model
 
 
5
 
6
 
7
  def initialize_database():
 
16
  """
17
  )
18
  db_connection.commit()
19
+ db_connection.close()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
 
22
  class VoterCardVerifier:
23
  def __init__(self):
24
+ initialize_database()
25
+
 
26
  def verify_card(self, image, card_number):
27
  # Convertir l'image pour Groq
28
  if isinstance(image, str):
29
  image = Image.open(image)
30
+
31
+ # Préparer la requête pour le modèle et l'appeler
32
+ message = ocr_model.chat(image).strip().lower()
33
+
34
+ # valider les entrées
35
+ is_valid = ("camer" in message) and (card_number in message)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  if is_valid:
38
  # Sauvegarder dans Firebase
 
41
  return "Numéro de carte non trouvé sur l'image"
42
 
43
  def save_card_number(self, card_number):
44
+ db_connection = sqlite3.connect("voter_cards.db")
45
+ cursor = db_connection.cursor()
46
  # Ajouter le numéro à Firestore
47
  # Sauvegarder dans la base de données
48
  try:
49
+ cursor.execute(
50
  "INSERT INTO voter_cards (card_number) VALUES (?)", (card_number,)
51
  )
52
+ db_connection.commit()
53
  return f"Numéro vérifié et sauvegardé : {card_number}"
54
  except sqlite3.IntegrityError:
55
  return f"Le numéro {card_number} existe déjà dans la base."
56
+ finally:
57
+ db_connection.close()
58
 
59
 
60
  # Interface Gradio