Spaces:
Runtime error
Runtime error
| import warnings | |
| warnings.filterwarnings("ignore") | |
| import os | |
| os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # Suppress TensorFlow logging messages | |
| os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0' # Disable oneDNN custom operations | |
| import tkinter as tk | |
| from tkinter import filedialog, messagebox, simpledialog | |
| from PIL import Image, ImageTk | |
| from threading import Thread | |
| from src.faceRecognize.face import Faces | |
| from src.faceRecognize.facerecognition import * | |
| import time,string,random,shutil | |
| from pydub import AudioSegment | |
| from pydub.playback import play | |
| def generate_unique_string(): | |
| timestamp = str(int(time.time())) # Current timestamp | |
| random_part = ''.join(random.choices(string.ascii_letters + string.digits, k=8)) # Random part | |
| unique_string = timestamp + '_' + random_part | |
| return unique_string | |
| def load_alert_sound(): | |
| song = AudioSegment.from_mp3('./faceRecognize/audio/alert.wav') | |
| return song | |
| def beautify_showinfo(title, message): | |
| messagebox.showinfo(title, message, icon="info") | |
| class FaceRecognitionApp: | |
| def __init__(self, master): | |
| self.master = master | |
| self.master.title("Face Recognition App") | |
| background_image = Image.open("./faceRecognize/Background_files/Learn-Facial-Recognition-1024x718.jpg") | |
| self.background_photo = ImageTk.PhotoImage(background_image) | |
| self.training_result = None | |
| self.canvas = tk.Canvas(self.master, width=background_image.width, height=background_image.height) | |
| self.canvas.pack() | |
| self.canvas.create_image(0, 0, anchor=tk.NW, image=self.background_photo) | |
| self.capture_label = tk.Label(self.canvas) | |
| self.capture_label.place(relx=0.05, rely=0.15, anchor=tk.NW) | |
| self.input_frame = tk.Frame(self.canvas, bg="white", bd=5, highlightthickness=0) | |
| self.input_frame.place(relx=0.5, rely=0.5, anchor=tk.CENTER) | |
| transparent_img = tk.PhotoImage(width=background_image.width, height=background_image.height) | |
| self.canvas.create_image(0, 0, anchor=tk.NW, image=transparent_img) | |
| self.input_frame.place(in_=self.canvas, relx=0.7, rely=0.5, anchor=tk.W) | |
| self.loading_animation = None | |
| self.animation_running = False | |
| self.cap1 = None | |
| self.cap2 = None | |
| self.create_widgets() | |
| def create_widgets(self): | |
| param_entries = [i for i in range(150)] | |
| run_button = tk.Button(self.input_frame, text="Run Code", command=self.run_code_thread,bg="white", fg="blue") | |
| run_button.grid(row=len(param_entries) + 1,padx=10, pady=5,column=0,sticky=tk.W) #column=0, columnspan=2, pady=5 | |
| quit_button = tk.Button(self.input_frame, text="Quit", command=self.quit_app,bg="white", fg="blue") | |
| quit_button.grid(row=len(param_entries) + 5,padx=10, pady=5,column=0,sticky=tk.W ) #, column=0, columnspan=2, pady=5 | |
| # Create a button to take a picture | |
| self.take_picture_button = tk.Button(self.canvas, text="Create User/Add Photos", command=self.capture_image, bg="white", fg="blue") | |
| self.take_picture_button.place(relx=0.05, rely=0.05, anchor=tk.NW) | |
| self.delete_folder_button = tk.Button(self.canvas, text="Delete User", command=self.delete_folder,bg="white", fg="blue") | |
| self.delete_folder_button.place(relx=0.05, rely=0.10, anchor=tk.NW) | |
| self.animation_label = tk.Label(self.master, text="Training in progress...", font=("Arial", 12)) | |
| self.training_button = tk.Button(self.canvas, text="Start Training", command=self.start_training,bg="white", fg="blue") | |
| self.training_button.place(relx=0.05, rely=0.15, anchor=tk.NW) | |
| def run_code(self): | |
| alert_sound = load_alert_sound() | |
| TIME = 0 | |
| HAND_TIME = 0 | |
| face_encoder = model_selctor("Facenet") | |
| encodings_path = './faceRecognize/facerec/encodings/encodings.pkl' | |
| encoding_dict = load_pickle(encodings_path) | |
| cv2.namedWindow("Video Grid") | |
| COUNT = 0 | |
| while True: | |
| try: | |
| self.cap1 = cv2.VideoCapture(0) | |
| ret1, frame = self.cap1.read() | |
| frame = cv2.resize(frame, (640, 300)) | |
| frame_ = frame | |
| frame4 = Faces(frame_) | |
| try: | |
| frame2, pred = detect(frame, face_detector, face_encoder, encoding_dict) | |
| if pred == 'unknown': | |
| if COUNT < 10: | |
| COUNT += 1 | |
| else: | |
| play(alert_sound) | |
| else: | |
| COUNT = 0 | |
| top_row = cv2.hconcat([frame2, frame2]) | |
| bottom_row = cv2.hconcat([frame4, frame4]) | |
| grid = cv2.vconcat([top_row, bottom_row]) | |
| except Exception as e: | |
| top_row = cv2.hconcat([frame2, frame]) | |
| bottom_row = cv2.hconcat([frame4, frame4]) | |
| grid = cv2.vconcat([top_row, bottom_row]) | |
| cv2.imshow("Video Grid", grid) | |
| if cv2.waitKey(1) & 0xFF == ord('q'): | |
| break | |
| except Exception as e: | |
| print("Exception:", e) | |
| pass | |
| if self.cap1 is not None: | |
| self.cap1.release() | |
| if self.cap2 is not None: | |
| self.cap2.release() | |
| cv2.destroyAllWindows() | |
| def run_code_thread(self): | |
| Thread(target=self.run_code).start() | |
| def quit_app(self): | |
| if self.cap1 is not None: | |
| self.cap1.release() | |
| if self.cap2 is not None: | |
| self.cap2.release() | |
| cv2.destroyAllWindows() | |
| self.master.quit() | |
| def capture_image(self): | |
| choice = messagebox.askyesno("Capture Image", "Do you want to create new user?") | |
| if choice: | |
| self.create_new_folder() | |
| else: | |
| path = self.choose_existing_folder() | |
| self.click(path) | |
| def create_new_folder(self): | |
| initial_folder_path = "facerec/data" | |
| new_folder_name = simpledialog.askstring("Create New Folder", "Enter new folder name:") | |
| if new_folder_name: | |
| new_folder_path = os.path.join(initial_folder_path, new_folder_name) | |
| os.makedirs(new_folder_path, exist_ok=True) | |
| messagebox.showinfo("Success", f"Folder '{new_folder_name}' created successfully.") | |
| self.capture_image() # Recursively call capture_image to proceed with capturing after creating the folder. | |
| def choose_existing_folder(self): | |
| initial_folder_path = "facerec/data" | |
| folder_path = filedialog.askdirectory(title="Select Folder", initialdir=initial_folder_path) | |
| if not folder_path: | |
| return # If no folder selected, exit the function | |
| else: | |
| messagebox.showinfo("Selected Folder", f"You selected the folder:\n{folder_path}") | |
| return folder_path | |
| def click(self, path): | |
| try: | |
| print("Initializing video capture...") | |
| cap1 = cv2.VideoCapture(self.videosource1_var.get(), cv2.CAP_DSHOW) | |
| if not cap1.isOpened(): | |
| print("Failed to open video capture.") | |
| return | |
| ret1, frame1 = cap1.read() | |
| if ret1: | |
| frame1_rgb = cv2.cvtColor(frame1, cv2.COLOR_BGR2RGB) | |
| img = Image.fromarray(frame1_rgb) | |
| imgtk = ImageTk.PhotoImage(image=img) | |
| self.capture_label.config(image=imgtk) | |
| self.capture_label.image = imgtk | |
| choice = messagebox.askyesno("Capture Image", "Do you want to capture this image?") | |
| if choice: | |
| filename = str(generate_unique_string())+'.jpg' | |
| filename = os.path.join(path,filename) | |
| filename = filename.replace("\\",'/') | |
| if filename: | |
| cv2.imwrite(filename, frame1) | |
| beautify_showinfo("Info","Picture saved successfully:") | |
| choice = messagebox.askyesno("Capture Image", "Do you want to capture more images?") | |
| if choice: | |
| self.click(path) | |
| else: | |
| if cap1 is not None: | |
| cap1.release() | |
| self.master.destroy() | |
| FaceRecognitionApp() | |
| else: | |
| self.click(path) | |
| else: | |
| print("Failed to capture frame.") | |
| except Exception as e: | |
| print("Error:", e) | |
| if cap1 is not None: | |
| cap1.release() | |
| def delete_folder(self): | |
| initial_folder_path = "facerec/data" | |
| folder_path = filedialog.askdirectory(title="Select User to Delete", initialdir=initial_folder_path) | |
| if folder_path: | |
| try: | |
| shutil.rmtree(folder_path) | |
| messagebox.showinfo("Success", "Folder deleted successfully.") | |
| except Exception as e: | |
| messagebox.showerror("Error", f"Failed to delete folder: {str(e)}") | |
| def start_training(self): | |
| self.training_button.pack_forget() | |
| self.start_animation() | |
| Thread(target=self.training_thread).start() | |
| def start_animation(self): | |
| self.animation_label.pack() | |
| self.update_animation() | |
| def stop_animation(self): | |
| # Hide the animation label | |
| self.animation_label.pack_forget() | |
| def training_thread(self): | |
| # Simulate training process | |
| time.sleep(5) | |
| import train_v2 | |
| self.training_result = "Training completed successfully." | |
| self.stop_animation() | |
| self.show_training_result() | |
| def update_animation(self): | |
| if self.training_result is None: | |
| self.master.after(100, self.update_animation) | |
| else: | |
| self.stop_animation() | |
| def show_training_result(self): | |
| messagebox.showinfo("Training Result", self.training_result) | |
| # def face_recognition_main(): | |
| # root = tk.Tk() | |
| # FaceRecognitionApp(root) | |
| # root.mainloop() | |
| # | |
| # | |
| # if __name__ == "__main__": | |
| # face_recognition_main() | |
| FaceRecognitionApp().run_code() | |