updated app.py
Browse files- app.py +41 -23
- requirements.txt +1 -1
app.py
CHANGED
|
@@ -234,20 +234,36 @@ def process_video_interface(video_file, points):
|
|
| 234 |
|
| 235 |
|
| 236 |
# Gradio Interface.
|
| 237 |
-
with gr.Blocks(title="Lane Detection using OpenCV") as demo:
|
| 238 |
-
gr.
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 248 |
process_button = gr.Button("Process Video")
|
| 249 |
clear_points_button = gr.Button("Clear Points")
|
| 250 |
-
|
|
|
|
| 251 |
|
| 252 |
# Extract the first frame and store it
|
| 253 |
extract_frame_button.click(
|
|
@@ -268,15 +284,17 @@ with gr.Blocks(title="Lane Detection using OpenCV") as demo:
|
|
| 268 |
|
| 269 |
# Process the video using the selected ROI
|
| 270 |
process_button.click(fn=process_video_interface, inputs=[video_input, points_state], outputs=output_video)
|
| 271 |
-
|
| 272 |
# Adding examples
|
| 273 |
-
gr.Examples(
|
| 274 |
-
|
| 275 |
-
|
| 276 |
-
|
| 277 |
-
|
| 278 |
-
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
|
| 282 |
-
|
|
|
|
|
|
|
|
|
| 234 |
|
| 235 |
|
| 236 |
# Gradio Interface.
|
| 237 |
+
with gr.Blocks(title="Lane Detection using OpenCV", theme=gr.themes.Soft()) as demo:
|
| 238 |
+
gr.HTML(
|
| 239 |
+
"""
|
| 240 |
+
<h1 style='text-align: center'>
|
| 241 |
+
Lane Detection using OpenCV
|
| 242 |
+
</h1>
|
| 243 |
+
"""
|
| 244 |
+
)
|
| 245 |
+
gr.HTML(
|
| 246 |
+
"""
|
| 247 |
+
<h3 style='text-align: center'>
|
| 248 |
+
<a href='https://opencv.org/university/' target='_blank'>OpenCV Courses</a> | <a href='https://github.com/OpenCV-University' target='_blank'>Github</a>
|
| 249 |
+
</h3>
|
| 250 |
+
"""
|
| 251 |
+
)
|
| 252 |
+
gr.Markdown(
|
| 253 |
+
"Upload your video, select the four region points to make the ROI yo want to track. Click process video to get the output."
|
| 254 |
+
)
|
| 255 |
+
with gr.Row():
|
| 256 |
+
with gr.Column(scale=1, min_width=300):
|
| 257 |
+
video_input = gr.Video(label="Input Video")
|
| 258 |
+
extract_frame_button = gr.Button("Extract First Frame")
|
| 259 |
+
with gr.Column(scale=1, min_width=300):
|
| 260 |
+
first_frame_image = gr.Image(label="Click to select ROI points")
|
| 261 |
+
original_frame_state = gr.State(None)
|
| 262 |
+
points_state = gr.State([])
|
| 263 |
process_button = gr.Button("Process Video")
|
| 264 |
clear_points_button = gr.Button("Clear Points")
|
| 265 |
+
with gr.Column(scale=1, min_width=300):
|
| 266 |
+
output_video = gr.Video(label="Processed Video")
|
| 267 |
|
| 268 |
# Extract the first frame and store it
|
| 269 |
extract_frame_button.click(
|
|
|
|
| 284 |
|
| 285 |
# Process the video using the selected ROI
|
| 286 |
process_button.click(fn=process_video_interface, inputs=[video_input, points_state], outputs=output_video)
|
| 287 |
+
|
| 288 |
# Adding examples
|
| 289 |
+
gr.Examples(examples=["./lane.mp4"], inputs=video_input)
|
| 290 |
+
gr.HTML(
|
| 291 |
+
"""
|
| 292 |
+
<h3 style='text-align: center'>
|
| 293 |
+
Developed with ❤️ by OpenCV
|
| 294 |
+
</h3>
|
| 295 |
+
"""
|
| 296 |
+
)
|
| 297 |
+
|
| 298 |
+
|
| 299 |
+
if __name__ == "__main__":
|
| 300 |
+
demo.launch()
|
requirements.txt
CHANGED
|
@@ -1,2 +1,2 @@
|
|
| 1 |
opencv-python==4.10.0.84
|
| 2 |
-
gradio==5.
|
|
|
|
| 1 |
opencv-python==4.10.0.84
|
| 2 |
+
gradio==5.23.3
|