tstone87 commited on
Commit
30fd2ce
·
verified ·
1 Parent(s): 1acb351

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -14
app.py CHANGED
@@ -18,8 +18,8 @@ def process_input(uploaded_file, youtube_link, image_url, sensitivity):
18
  Priority: YouTube link > Image URL > Uploaded file.
19
  The sensitivity slider value is passed as the confidence threshold.
20
 
21
- For video files (mp4, mov, avi, webm), we use streaming mode to obtain annotated frames and encode them into a video.
22
- For images, we use the normal prediction and either use the built‑in save_path or plot() method.
23
 
24
  Returns a tuple:
25
  - download_file_path (for gr.File)
@@ -65,26 +65,28 @@ def process_input(uploaded_file, youtube_link, image_url, sensitivity):
65
  output_path = None
66
 
67
  if ext_input in video_exts:
68
- # Process video using streaming mode.
69
  try:
70
- # Open video to get properties.
71
  cap = cv2.VideoCapture(input_path)
72
  if not cap.isOpened():
73
  return None, None, None, "Error opening video file."
74
  fps = cap.get(cv2.CAP_PROP_FPS)
75
  width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
76
  height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
77
- cap.release()
78
-
79
- # Use streaming mode to process each frame.
80
  frames = []
81
- for result in model.predict(source=input_path, stream=True, conf=sensitivity):
82
- # result.plot() returns an annotated frame (numpy array)
83
- annotated_frame = result.plot()
 
 
 
 
 
84
  frames.append(annotated_frame)
 
85
  if not frames:
86
- return None, None, None, "No detections were returned from video streaming."
87
- # Write frames to a temporary video file.
88
  temp_video_path = os.path.join(tempfile.gettempdir(), "annotated_video.mp4")
89
  fourcc = cv2.VideoWriter_fourcc(*'mp4v')
90
  out = cv2.VideoWriter(temp_video_path, fourcc, fps, (width, height))
@@ -100,7 +102,6 @@ def process_input(uploaded_file, youtube_link, image_url, sensitivity):
100
  results = model.predict(source=input_path, save=True, conf=sensitivity)
101
  except Exception as e:
102
  return None, None, None, f"Error running prediction: {e}"
103
-
104
  try:
105
  if not results or len(results) == 0:
106
  return None, None, None, "No detections were returned."
@@ -147,7 +148,7 @@ with gr.Blocks(css="""
147
  youtube_input = gr.Textbox(label="YouTube Link", placeholder="https://...")
148
  with gr.TabItem("Image URL"):
149
  image_url_input = gr.Textbox(label="Image URL", placeholder="https://...")
150
- sensitivity_slider = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, value=0.2,
151
  label="Sensitivity (Confidence Threshold)")
152
  # Right Column: Results display at the top.
153
  with gr.Column(scale=2):
 
18
  Priority: YouTube link > Image URL > Uploaded file.
19
  The sensitivity slider value is passed as the confidence threshold.
20
 
21
+ For video files (mp4, mov, avi, webm), we process the video frame-by-frame
22
+ using OpenCV. For images, we use normal prediction.
23
 
24
  Returns a tuple:
25
  - download_file_path (for gr.File)
 
65
  output_path = None
66
 
67
  if ext_input in video_exts:
68
+ # Process video frame-by-frame using OpenCV.
69
  try:
 
70
  cap = cv2.VideoCapture(input_path)
71
  if not cap.isOpened():
72
  return None, None, None, "Error opening video file."
73
  fps = cap.get(cv2.CAP_PROP_FPS)
74
  width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
75
  height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
 
 
 
76
  frames = []
77
+ while True:
78
+ ret, frame = cap.read()
79
+ if not ret:
80
+ break
81
+ # Run detection on the frame.
82
+ # Note: model.predict() accepts an image (numpy array) as source.
83
+ result = model.predict(source=frame, conf=sensitivity)[0]
84
+ annotated_frame = result.plot() # returns an annotated frame (numpy array)
85
  frames.append(annotated_frame)
86
+ cap.release()
87
  if not frames:
88
+ return None, None, None, "No detections were returned from video processing."
89
+ # Write annotated frames to a temporary video file.
90
  temp_video_path = os.path.join(tempfile.gettempdir(), "annotated_video.mp4")
91
  fourcc = cv2.VideoWriter_fourcc(*'mp4v')
92
  out = cv2.VideoWriter(temp_video_path, fourcc, fps, (width, height))
 
102
  results = model.predict(source=input_path, save=True, conf=sensitivity)
103
  except Exception as e:
104
  return None, None, None, f"Error running prediction: {e}"
 
105
  try:
106
  if not results or len(results) == 0:
107
  return None, None, None, "No detections were returned."
 
148
  youtube_input = gr.Textbox(label="YouTube Link", placeholder="https://...")
149
  with gr.TabItem("Image URL"):
150
  image_url_input = gr.Textbox(label="Image URL", placeholder="https://...")
151
+ sensitivity_slider = gr.Slider(minimum=0.0, maximum=1.0, step=0.01, value=0.15,
152
  label="Sensitivity (Confidence Threshold)")
153
  # Right Column: Results display at the top.
154
  with gr.Column(scale=2):