File size: 3,000 Bytes
23d3c5a
9a1a12e
a0d3b60
d018658
 
 
 
cb9036d
 
 
 
 
 
cd399f6
cb9036d
 
 
5e49edd
 
 
7896f5d
 
 
9a1a12e
 
 
 
23d3c5a
9a1a12e
 
 
 
 
 
 
 
 
 
 
f939f34
 
86e33d0
cb9036d
1f9c6b4
 
 
 
 
 
 
 
4c57523
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478b1bd
 
 
4c57523
 
0aa1785
1f9c6b4
5e49edd
0ad4383
5e49edd
ad0f387
 
9e7a27f
ad0f387
3ee59f3
7896f5d
 
 
1f9c6b4
0aa1785
c58ae33
9a1a12e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import gradio as gr
import cv2
from Yolov5_Deepsort.demo import app_main
import sys
import os
sys.path.append(os.path.dirname(os.path.abspath(__file__)))


css = """
.video-container {
    display: flex;
    justify-content: center;
    align-items: center;

}
"""

def show_video():
    return "DDMDeepsort1.mp4"

def show_result_video():
    return "result.mp4"

def process_video(video):
    cap = cv2.VideoCapture(video)
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (int(cap.get(3)), int(cap.get(4))))

    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        out.write(cv2.cvtColor(gray_frame, cv2.COLOR_GRAY2BGR))
    
    cap.release()
    out.release()
    return 'output.mp4'

title = "Welcome to DDM DeepSort"
description = "Upload a video to process it using DDM and DeepSORT."

with gr.Blocks(css=css) as demo:

    gr.Interface(
        fn=app_main,
        inputs="video",
        outputs="video",
        title=title,
        description=description
    )
    gr.HTML("""
<h1>Welcome to My Neuroscience Project</h1>
<p>The author is a third-year undergraduate student at the School of Intelligent Science and Technology, Nanjing University, Suzhou Campus.</p>
<h2>Note</h2>
<div style="border: 2px solid rgba(0, 0, 0, 0.1); border-radius: 10px; background-color: rgba(255, 255, 255, 0.8); padding: 20px;">
<p>Since this project uses Hugging Face's free CPU, the processing speed is very slow. In the worst case, even a video with a dozen frames can take several minutes to process. Therefore, if possible, it is recommended to deploy on a device with a better GPU.</p>
<p>Although the YOLOv5 model supports up to 80 classes, my project is primarily focused on autonomous driving. Therefore, objects other than people and cars will be excluded after object detection.</p>
</div>
<div style="border: 2px solid rgba(0, 0, 0, 0.1); border-radius: 10px; background-color: rgba(255, 255, 255, 0.8); padding: 20px;">
<h3>Tips for First-Time Users:</h3>
<ul>
<li>Ensure that the video includes at least people and cars.</li>
<li>It's recommended that the video is not too long, ideally within 10 seconds.</li>
</ul>
</div>
<div style="border: 2px solid rgba(0, 0, 0, 0.1); border-radius: 10px; background-color: rgba(255, 255, 255, 0.8); padding: 20px;">
The following video is a short animation created by the author using Manim to explain the general process.
</div>
""")


    with gr.Row():
        gr.HTML('<div class="video-container">')
        gr.Video(show_video(), label="animation")
        gr.HTML('</div>')
    with gr.Row():
        gr.HTML('<div class="video-container">')
        gr.Video('3d_ddm_deepsort.mp4', label="3d")
        gr.HTML('</div>')
    with gr.Row():
        gr.HTML('<div class="video-container">')
        gr.Video(show_result_video(), label="result")
        gr.HTML('</div>')



demo.launch()