Face-Recognition / image_capture.py
Ankit93's picture
Add application file
29572ad
Raw
History Blame Contribute Delete
4.08 kB
import warnings
warnings.filterwarnings("ignore")
import os
import sys
import streamlit as st
import cv2
import string
import random
import shutil
from PIL import Image
from pydub import AudioSegment
from streamlit_webrtc import webrtc_streamer, WebRtcMode, RTCConfiguration, VideoProcessorBase
from streamlit_extras.switch_page_button import switch_page
# Add the faceRecognize module path to the system path
sys.path.append(os.path.abspath('src/faceRecognize'))
# Suppress TensorFlow logging messages
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'
def generate_unique_filename():
chars = string.ascii_letters + string.digits
random_string = ''.join(random.choices(chars, k=8))
return random_string + '.jpg'
def load_alert_sound():
song = AudioSegment.from_file('src/faceRecognize/audio/alert.wav', format="wav")
return song
def create_new_folder():
initial_folder_path = "src/faceRecognize/facerec/data"
new_folder_name = st.text_input("Enter new folder name:")
folder_path = None
if new_folder_name and st.button("Create Folder"):
new_folder_path = os.path.join(initial_folder_path, new_folder_name)
os.makedirs(new_folder_path, exist_ok=True)
st.success(f"Folder '{new_folder_name}' created successfully.")
folder_path = new_folder_path
return folder_path
def choose_existing_folder():
initial_folder_path = "src/faceRecognize/facerec/data"
folder_path = st.text_input("Choose from existing user:", initial_folder_path)
if folder_path and st.button("Select Folder"):
st.success(f"You selected the folder: {folder_path}")
return folder_path
class ImageCaptureProcessor(VideoProcessorBase):
def __init__(self):
self.frame = None
def recv(self, frame):
self.frame = frame.to_ndarray(format="bgr24")
return frame
def get_frame(self):
return self.frame
def capture_and_save_image(path, processor):
if processor:
frame = processor.get_frame()
if frame is not None:
st.image(frame, caption="Captured Image", channels="BGR", use_column_width=True)
if st.button("Save Image"):
filename = generate_unique_filename()
filepath = os.path.join(path, filename)
os.makedirs(path, exist_ok=True)
cv2.imwrite(filepath, frame)
st.success(f"Picture saved successfully as {filename}")
else:
st.warning("No frame captured. Please try again.")
def delete_folder():
initial_folder_path = "src/faceRecognize/facerec/data"
folder_path = st.text_input("Enter folder path to delete:", initial_folder_path)
if folder_path and st.button("Delete Folder"):
try:
shutil.rmtree(folder_path)
st.success("Folder deleted successfully.")
except Exception as e:
st.error(f"Failed to delete folder: {str(e)}")
st.title("Face Recognition App")
# RTC configuration for WebRTC
RTC_CONFIGURATION = RTCConfiguration({
"iceServers": [{"urls": ["stun:stun.l.google.com:19302"]}]
})
def main(path):
ctx = webrtc_streamer(
key="snapshot",
mode=WebRtcMode.SENDRECV,
rtc_configuration=RTC_CONFIGURATION,
video_processor_factory=ImageCaptureProcessor,
media_stream_constraints={"video": True, "audio": False}
)
print("Calling Main")
if ctx.video_processor:
if st.button("Capture Image"):
capture_and_save_image(path, ctx.video_processor)
option = st.sidebar.selectbox("Choose an option",
("Run Code", "Create User/Add Photos", "Delete User", "Start Training"))
if option == "Create User/Add Photos":
sub_option = st.sidebar.selectbox("Choose an option", ("Choose From Existing", "Add User"))
path = None
if sub_option == "Choose From Existing":
path = choose_existing_folder()
else:
path = create_new_folder()
if path:
main(path)
elif option == "Delete User":
delete_folder()