Sivainti commited on
Commit
da5eeb4
Β·
verified Β·
1 Parent(s): 1106485

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -17
app.py CHANGED
@@ -44,7 +44,7 @@ class AttendanceSystem:
44
  try:
45
  # Load face embeddings and worker data
46
  if os.path.exists("data/workers.pkl"):
47
- with open("data/workers.pkl", "rbε»Ίη―‰) as f:
48
  data = pickle.load(f)
49
  self.known_face_embeddings = data.get("embeddings", [])
50
  self.known_face_names = data.get("names", [])
@@ -71,23 +71,63 @@ class AttendanceSystem:
71
  worker_data = {
72
  "embeddings": self.known_face_embeddings,
73
  "names": self.known_face_names,
74
- "ids": self. Ascending
75
- self.next_worker_id += 1
 
 
 
 
 
 
 
76
 
77
- # Save face image
78
- face_image = Image.fromarray(image)
79
- face_image.save(f"data/faces/{worker_id}_{name.replace(' ', '_')}.jpg")
80
-
81
- self.save_data()
82
-
83
- return f"βœ… {name} has been successfully registered with ID: {worker_id}!", self.get_registered_workers_info()
84
-
85
- except ValueError as e:
86
- if "Face could not be detected" in str(e):
87
- return "❌ No face detected in the image! Please try again with a clear face image.", self.get_registered_workers_info()
88
- return f"❌ Error processing image: {str(e)}", self.get_registered_workers_info()
89
- except Exception as e:
90
- return f"❌ Error during registration: {str(e)}", self.get_registered_workers_info()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
 
92
  def register_worker_auto(self, face_image):
93
  """Automatic worker registration for unrecognized faces"""
 
44
  try:
45
  # Load face embeddings and worker data
46
  if os.path.exists("data/workers.pkl"):
47
+ with open("data/workers.pkl", "rb") as f:
48
  data = pickle.load(f)
49
  self.known_face_embeddings = data.get("embeddings", [])
50
  self.known_face_names = data.get("names", [])
 
71
  worker_data = {
72
  "embeddings": self.known_face_embeddings,
73
  "names": self.known_face_names,
74
+ "ids": self.known_face_ids,
75
+ "next_id": self.next_worker_id
76
+ }
77
+ with open("data/workers.pkl", "wb") as f:
78
+ pickle.dump(worker_data, f)
79
+
80
+ # Save attendance records
81
+ with open("data/attendance.json", "w") as f:
82
+ json.dump(self.attendance_records, f, indent=2)
83
 
84
+ except Exception as e:
85
+ print(f"Error saving data: {e}")
86
+
87
+ def register_worker_manual(self, image, name):
88
+ """Manual worker registration"""
89
+ if image is None or not name.strip():
90
+ return "❌ Please provide both image and name!", self.get_registered_workers_info()
91
+
92
+ # Convert PIL image to RGB array
93
+ if isinstance(image, Image.Image):
94
+ image = np.array(image)
95
+
96
+ try:
97
+ # Verify the image contains a face
98
+ face_analysis = DeepFace.analyze(img_path=image, actions=['emotion'], enforce_detection=True, detector_backend='opencv')
99
+
100
+ # Get face embedding
101
+ embedding = DeepFace.represent(img_path=image, model_name='Facenet')[0]['embedding']
102
+
103
+ # Check if person already exists
104
+ name = name.strip().title()
105
+ if name in self.known_face_names:
106
+ return f"❌ {name} is already registered!", self.get_registered_workers_info()
107
+
108
+ # Generate new worker ID
109
+ worker_id = f"W{self.next_worker_id:04d}"
110
+
111
+ # Add the face embedding, name, and ID
112
+ self.known_face_embeddings.append(embedding)
113
+ self.known_face_names.append(name)
114
+ self.known_face_ids.append(worker_id)
115
+ self.next_worker_id += 1
116
+
117
+ # Save face image
118
+ face_image = Image.fromarray(image)
119
+ face_image.save(f"data/faces/{worker_id}_{name.replace(' ', '_')}.jpg")
120
+
121
+ self.save_data()
122
+
123
+ return f"βœ… {name} has been successfully registered with ID: {worker_id}!", self.get_registered_workers_info()
124
+
125
+ except ValueError as e:
126
+ if "Face could not be detected" in str(e):
127
+ return "❌ No face detected in the image! Please try again with a clear face image.", self.get_registered_workers_info()
128
+ return f"❌ Error processing image: {str(e)}", self.get_registered_workers_info()
129
+ except Exception as e:
130
+ return f"❌ Error during registration: {str(e)}", self.get_registered_workers_info()
131
 
132
  def register_worker_auto(self, face_image):
133
  """Automatic worker registration for unrecognized faces"""