David Driscoll commited on
Commit
1a94dbc
·
1 Parent(s): ee83343
Files changed (1) hide show
  1. app.py +15 -7
app.py CHANGED
@@ -123,7 +123,7 @@ def compute_faces_overlay(image):
123
  # -----------------------------
124
  # New Facemesh Functions (with connected red lines and mask output)
125
  # -----------------------------
126
- def compute_facemesh_overlay(image):
127
  """
128
  Uses MediaPipe Face Mesh to detect and draw facial landmarks.
129
  Draws green dots for landmarks and connects them with thin red lines.
@@ -137,9 +137,9 @@ def compute_facemesh_overlay(image):
137
  annotated = frame_bgr.copy()
138
  mask = np.zeros_like(frame_bgr)
139
 
140
- # Initialize Face Mesh in static mode
141
  face_mesh = mp.solutions.face_mesh.FaceMesh(
142
- static_image_mode=True, max_num_faces=1, refine_landmarks=True, min_detection_confidence=0.5
143
  )
144
  results = face_mesh.process(cv2.cvtColor(frame_bgr, cv2.COLOR_BGR2RGB))
145
 
@@ -169,8 +169,8 @@ def compute_facemesh_overlay(image):
169
  face_mesh.close()
170
  return annotated, mask, text
171
 
172
- def analyze_facemesh(image):
173
- annotated_image, mask_image, text = compute_facemesh_overlay(image)
174
  return (
175
  annotated_image,
176
  mask_image,
@@ -286,14 +286,22 @@ faces_interface = gr.Interface(
286
 
287
  facemesh_interface = gr.Interface(
288
  fn=analyze_facemesh,
289
- inputs=gr.Image(label="Upload an Image for Facemesh"),
 
 
 
290
  outputs=[
291
  gr.Image(type="numpy", label="Annotated Output"),
292
  gr.Image(type="numpy", label="Mask Output"),
293
  gr.HTML(label="Facemesh Analysis")
294
  ],
295
  title="<div style='color:#00ff00;'>Facemesh",
296
- description="<div style='color:#00ff00;'>Detects facial landmarks using MediaPipe Face Mesh.</div>",
 
 
 
 
 
297
  examples=SAMPLE_IMAGES,
298
  live=False
299
  )
 
123
  # -----------------------------
124
  # New Facemesh Functions (with connected red lines and mask output)
125
  # -----------------------------
126
+ def compute_facemesh_overlay(image, confidence=0.5):
127
  """
128
  Uses MediaPipe Face Mesh to detect and draw facial landmarks.
129
  Draws green dots for landmarks and connects them with thin red lines.
 
137
  annotated = frame_bgr.copy()
138
  mask = np.zeros_like(frame_bgr)
139
 
140
+ # Initialize Face Mesh in static mode with adjustable confidence
141
  face_mesh = mp.solutions.face_mesh.FaceMesh(
142
+ static_image_mode=True, max_num_faces=1, refine_landmarks=True, min_detection_confidence=confidence
143
  )
144
  results = face_mesh.process(cv2.cvtColor(frame_bgr, cv2.COLOR_BGR2RGB))
145
 
 
169
  face_mesh.close()
170
  return annotated, mask, text
171
 
172
+ def analyze_facemesh(image, confidence):
173
+ annotated_image, mask_image, text = compute_facemesh_overlay(image, confidence)
174
  return (
175
  annotated_image,
176
  mask_image,
 
286
 
287
  facemesh_interface = gr.Interface(
288
  fn=analyze_facemesh,
289
+ inputs=[
290
+ gr.Image(label="Upload an Image for Facemesh"),
291
+ gr.Slider(0.0, 1.0, value=0.5, label="Detection Confidence", elem_id="confidence_slider")
292
+ ],
293
  outputs=[
294
  gr.Image(type="numpy", label="Annotated Output"),
295
  gr.Image(type="numpy", label="Mask Output"),
296
  gr.HTML(label="Facemesh Analysis")
297
  ],
298
  title="<div style='color:#00ff00;'>Facemesh",
299
+ description="""
300
+ <div style='color:#00ff00;'>
301
+ Detects facial landmarks using MediaPipe Face Mesh.
302
+ <button onclick="document.getElementById('confidence_slider').value = 0.5; document.getElementById('confidence_slider').dispatchEvent(new Event('change'))" style="margin-left:10px;">Reset to Default</button>
303
+ </div>
304
+ """,
305
  examples=SAMPLE_IMAGES,
306
  live=False
307
  )