Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -61,12 +61,18 @@ class FirebaseConnector:
|
|
61 |
cred = credentials.Certificate(firebase_config)
|
62 |
firebase_admin.initialize_app(cred)
|
63 |
self.db = firestore.client()
|
|
|
64 |
|
65 |
def add(self, ocr: str, key: str):
|
66 |
-
doc_ref = self.db.collection(
|
67 |
if doc_ref.get().exists:
|
68 |
raise ValueError(f"Document with key {key} already exists.")
|
69 |
-
return self.db.collection(
|
|
|
|
|
|
|
|
|
|
|
70 |
|
71 |
|
72 |
def search_element(words: list[str], target: str, thr: float = 60):
|
@@ -79,8 +85,11 @@ class VoterCardVerifier:
|
|
79 |
def __init__(self):
|
80 |
self.db = FirebaseConnector()
|
81 |
self.ocr_engine = EasyOCRReader()
|
|
|
|
|
82 |
|
83 |
-
def verify_card(self, image: Union[str, Image.Image], card_number,
|
|
|
84 |
# Convertir l'image pour Groq
|
85 |
if isinstance(image, str):
|
86 |
image = Image.open(image)
|
@@ -88,8 +97,8 @@ class VoterCardVerifier:
|
|
88 |
# Préparer la requête pour le modèle et l'appeler
|
89 |
ocr_data = self.ocr_engine.chat(image)
|
90 |
|
91 |
-
score1 = search_element(ocr_data, "camer", thr)
|
92 |
-
score2 = search_element(ocr_data, card_number, thr)
|
93 |
|
94 |
ocr_data = score1 + score2
|
95 |
logger.info(str(ocr_data))
|
@@ -100,25 +109,23 @@ class VoterCardVerifier:
|
|
100 |
if is_valid:
|
101 |
# Sauvegarder dans Firebase
|
102 |
self.save_card_number(ocr_data, card_number)
|
103 |
-
|
|
|
104 |
else:
|
105 |
-
return "
|
106 |
-
except:
|
107 |
-
return "ID Card already saved in the database"
|
108 |
|
109 |
def save_card_number(self, ocr_data, card_number):
|
110 |
return self.db.add(str(ocr_data), str(card_number))
|
111 |
|
112 |
def get_id_counted(self):
|
113 |
-
|
114 |
-
count = sum(1 for _ in docs)
|
115 |
-
return count
|
116 |
|
117 |
|
118 |
# Interface Gradio
|
119 |
def create_interface():
|
120 |
verifier = VoterCardVerifier()
|
121 |
-
# n_cards = verifier.get_id_counted()
|
122 |
description = (
|
123 |
"Card ID Counter is an application designed to count voter card numbers "
|
124 |
"by analyzing uploaded images using OCR technology. It ensures accuracy by "
|
@@ -146,7 +153,6 @@ def create_interface():
|
|
146 |
|
147 |
|
148 |
if __name__ == "__main__":
|
149 |
-
|
150 |
# Créer et lancer l'interface
|
151 |
demo = create_interface()
|
152 |
demo.launch()
|
|
|
61 |
cred = credentials.Certificate(firebase_config)
|
62 |
firebase_admin.initialize_app(cred)
|
63 |
self.db = firestore.client()
|
64 |
+
self.collecttion_name = os.getenv("collection", "id-card")
|
65 |
|
66 |
def add(self, ocr: str, key: str):
|
67 |
+
doc_ref = self.db.collection(self.collecttion_name).document(key)
|
68 |
if doc_ref.get().exists:
|
69 |
raise ValueError(f"Document with key {key} already exists.")
|
70 |
+
return self.db.collection(self.collecttion_name).add({"ocr": ocr}, document_id=key)
|
71 |
+
|
72 |
+
def get_id_counted(self):
|
73 |
+
docs = self.db.collection(self.collecttion_name).stream()
|
74 |
+
count = sum(1 for _ in docs)
|
75 |
+
return count
|
76 |
|
77 |
|
78 |
def search_element(words: list[str], target: str, thr: float = 60):
|
|
|
85 |
def __init__(self):
|
86 |
self.db = FirebaseConnector()
|
87 |
self.ocr_engine = EasyOCRReader()
|
88 |
+
self.thr = int(os.getenv("thr", 75))
|
89 |
+
self.n_cards = 0
|
90 |
|
91 |
+
def verify_card(self, image: Union[str, Image.Image], card_number,):
|
92 |
+
self.n_cards = self.get_id_counted()
|
93 |
# Convertir l'image pour Groq
|
94 |
if isinstance(image, str):
|
95 |
image = Image.open(image)
|
|
|
97 |
# Préparer la requête pour le modèle et l'appeler
|
98 |
ocr_data = self.ocr_engine.chat(image)
|
99 |
|
100 |
+
score1 = search_element(ocr_data, "camer", self.thr)
|
101 |
+
score2 = search_element(ocr_data, card_number, self.thr)
|
102 |
|
103 |
ocr_data = score1 + score2
|
104 |
logger.info(str(ocr_data))
|
|
|
109 |
if is_valid:
|
110 |
# Sauvegarder dans Firebase
|
111 |
self.save_card_number(ocr_data, card_number)
|
112 |
+
self.n_cards += 1
|
113 |
+
return f"Your ID Card have been recorded, thank you !!! Num Card: {self.n_cards}"
|
114 |
else:
|
115 |
+
return f"Card number not found, please improve the quality of image passed. Num Card: {self.n_cards}"
|
116 |
+
except ValueError as ex:
|
117 |
+
return f"ID Card already saved in the database. Num Card: {self.n_cards}"
|
118 |
|
119 |
def save_card_number(self, ocr_data, card_number):
|
120 |
return self.db.add(str(ocr_data), str(card_number))
|
121 |
|
122 |
def get_id_counted(self):
|
123 |
+
return self.db.get_id_counted()
|
|
|
|
|
124 |
|
125 |
|
126 |
# Interface Gradio
|
127 |
def create_interface():
|
128 |
verifier = VoterCardVerifier()
|
|
|
129 |
description = (
|
130 |
"Card ID Counter is an application designed to count voter card numbers "
|
131 |
"by analyzing uploaded images using OCR technology. It ensures accuracy by "
|
|
|
153 |
|
154 |
|
155 |
if __name__ == "__main__":
|
|
|
156 |
# Créer et lancer l'interface
|
157 |
demo = create_interface()
|
158 |
demo.launch()
|