Shafeek Saleem commited on
Commit
3a2c2e3
·
1 Parent(s): 3b8dcd6

bug fixed image read

Browse files
pages/2_Face Detection and Creating Database.py CHANGED
@@ -56,7 +56,8 @@ def step2_page():
56
  But remember, we should always ask for permission before taking someone's picture. We can use a smartphone or a digital camera to capture pictures, and it's important to take pictures of different people. This will help our application to have a good known-faces database!
57
  """
58
  )
59
- st.info("Select an image to continue!")
 
60
  input_type = st.radio("Select the Input Type", ["Image", "Camera"])
61
 
62
  if input_type == "Camera":
@@ -66,36 +67,74 @@ def step2_page():
66
  if picture:
67
  image = face_recognition.load_image_file(picture)
68
  st.image(image)
 
 
 
69
 
70
  # Find all the faces in the image using the default HOG-based model.
71
  # This method is fairly accurate, but not as accurate as the CNN model and not GPU accelerated.
72
  # See also: find_faces_in_picture_cnn.py
73
  face_locations = face_recognition.face_locations(image)
74
- st.write("Algorithm found {} face(s) in this photograph.".format(len(face_locations)))
75
-
76
-
77
- cols = st.columns(len(face_locations))
78
- for i in range(len(face_locations)):
79
- col = cols[i]
80
- face = face_locations[i]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  # display faces
82
- with col:
83
- st.header("Face {}".format(i))
84
- # Print the location of each face in this image
85
- top, right, bottom, left = face
86
- # You can access the actual face itself like this:
87
- face_image = image[top:bottom, left:right]
88
- pil_image = Image.fromarray(face_image)
89
- col.image(pil_image, use_column_width=True)
90
- face_name = st.text_input('Specify name to save it in the known-face database', "This is a placeholder", key="text_"+str(i))
91
- if st.button("Save", key="button_"+str(i)):
92
- img_name = str(uuid.uuid4()) + f"_{face_name}_{i}" + ".jpg"
93
- img_path = os.path.join(img_dir, img_name)
 
94
  pil_image.save(img_path)
95
  st.success("Face added successfully!")
96
 
 
97
  images = os.listdir(img_dir)
98
- st.write(images)
 
 
 
 
 
 
 
 
99
  if st.button("Clear All"):
100
  for img in images:
101
  os.remove(os.path.join(img_dir, img))
 
56
  But remember, we should always ask for permission before taking someone's picture. We can use a smartphone or a digital camera to capture pictures, and it's important to take pictures of different people. This will help our application to have a good known-faces database!
57
  """
58
  )
59
+ st.info("Who is taking the picture?")
60
+ face_name = st.text_input('Specify name to save it in the known-face database', "This is a placeholder", key="name")
61
  input_type = st.radio("Select the Input Type", ["Image", "Camera"])
62
 
63
  if input_type == "Camera":
 
67
  if picture:
68
  image = face_recognition.load_image_file(picture)
69
  st.image(image)
70
+ my_bar = st.progress(0, text="Detecting faces in given images...")
71
+ for i in range(100):
72
+ my_bar.progress(i, text="Detecting faces in given images...")
73
 
74
  # Find all the faces in the image using the default HOG-based model.
75
  # This method is fairly accurate, but not as accurate as the CNN model and not GPU accelerated.
76
  # See also: find_faces_in_picture_cnn.py
77
  face_locations = face_recognition.face_locations(image)
78
+ my_bar.progress(100, text="Algorithm found {} face(s) in this photograph.".format(len(face_locations)))
79
+
80
+ if len(face_locations) <= 0:
81
+ st.error("No faces have been detected, please upload a valid/ clear photo!")
82
+ elif len(face_locations) > 1:
83
+ st.info("More than one face has been detected, please identify each face by providing a name.")
84
+ cols = st.columns(len(face_locations))
85
+ for i in range(len(face_locations)):
86
+ col = cols[i]
87
+ face = face_locations[i]
88
+ # display faces
89
+ with col:
90
+ # Print the location of each face in this image
91
+ top, right, bottom, left = face
92
+ # You can access the actual face itself like this:
93
+ face_image = image[top:bottom, left:right]
94
+ pil_image = Image.fromarray(face_image)
95
+ col.image(pil_image, use_column_width=True)
96
+ face_name = st.text_input('Who is this?',
97
+ "This is a placeholder", key="text_" + str(i))
98
+ if st.button("Save", key="button_" + str(i)):
99
+ img_name = str(uuid.uuid4()) + f"_{face_name}_{i}" + ".jpg"
100
+ img_path = os.path.join(img_dir, img_name)
101
+ if os.path.exists(img_path):
102
+ st.error("Face already added!")
103
+ else:
104
+ pil_image.save(img_path)
105
+ st.success("Face added successfully!")
106
+
107
+ else:
108
+ st.info("Your face is identified successfully!")
109
+ face = face_locations[0]
110
  # display faces
111
+ # Print the location of each face in this image
112
+ top, right, bottom, left = face
113
+ # You can access the actual face itself like this:
114
+ face_image = image[top:bottom, left:right]
115
+ pil_image = Image.fromarray(face_image)
116
+ st.image(pil_image, use_column_width="auto")
117
+ st.write(face_name)
118
+ if st.button("Save", key="button"):
119
+ img_name = str(uuid.uuid4()) + f"_{face_name}_0" + ".jpg"
120
+ img_path = os.path.join(img_dir, img_name)
121
+ if os.path.exists(img_path):
122
+ st.error("Face already added!")
123
+ else:
124
  pil_image.save(img_path)
125
  st.success("Face added successfully!")
126
 
127
+ st.write("Now lets see your known-faces database!")
128
  images = os.listdir(img_dir)
129
+ if len(images) <= 0:
130
+ st.error("No faces have been added yet.")
131
+ else:
132
+ cols = st.columns(len(images))
133
+ for i, img in enumerate(images):
134
+ face_name = img.split("_")[1]
135
+ cols[i].image(os.path.join(img_dir, img), use_column_width="auto")
136
+ cols[i].write(face_name)
137
+
138
  if st.button("Clear All"):
139
  for img in images:
140
  os.remove(os.path.join(img_dir, img))
utils/levels.py CHANGED
@@ -33,4 +33,4 @@ def complete_level(level):
33
  with open(f".sessions/{get_login()['username']}/level.txt", "w") as f:
34
  f.write(str(st.session_state['level']))
35
  st.balloons()
36
- st.success(f'You have completed Level {level}! You can now move on to the next level.')
 
33
  with open(f".sessions/{get_login()['username']}/level.txt", "w") as f:
34
  f.write(str(st.session_state['level']))
35
  st.balloons()
36
+ st.success(f'You have completed Level {level}! You can now move on to the next level.')