add local demo url
Browse files
app.py
ADDED
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# import argparse
|
2 |
+
# import gradio as gr
|
3 |
+
# import cv2
|
4 |
+
# import os
|
5 |
+
# import numpy as np
|
6 |
+
# from gradio_image_prompter import ImagePrompter
|
7 |
+
|
8 |
+
|
9 |
+
# def video_to_interaction(input_video, frame_selector):
|
10 |
+
# """
|
11 |
+
# 1. get the frame from input_video.
|
12 |
+
# 2. get the interaction from the frame.
|
13 |
+
# 3. return the interaction.
|
14 |
+
# Args:
|
15 |
+
# input_video (_type_): _description_
|
16 |
+
# frame_selector (_type_): _description_
|
17 |
+
# interaction (_type_): _description_
|
18 |
+
# """
|
19 |
+
# frames = cv2.VideoCapture(input_video)
|
20 |
+
# interaction = None
|
21 |
+
# # fps = int(frames.get(cv2.CAP_PROP_FPS))
|
22 |
+
# frame_id = 0
|
23 |
+
# if not frames.isOpened():
|
24 |
+
# gr.Info("Error opening video file")
|
25 |
+
# else:
|
26 |
+
# while frames.isOpened():
|
27 |
+
# ret, frame = frames.read()
|
28 |
+
# print(frame_id, frame_selector)
|
29 |
+
# if frame_id == frame_selector:
|
30 |
+
# interaction = np.array(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
|
31 |
+
# break
|
32 |
+
# frame_id += 1
|
33 |
+
# frames.release()
|
34 |
+
# if interaction is None:
|
35 |
+
# gr.Info("Frame not found")
|
36 |
+
# raise ValueError("Frame not found")
|
37 |
+
# return {"image": interaction, "points": []}
|
38 |
+
|
39 |
+
|
40 |
+
# # VideoEditingDemoUrl = "xxx"
|
41 |
+
# # ### Point Trajectory Demo [[VideoEditing Demo]]({VideoEditingDemoUrl})
|
42 |
+
# ProjectPage = "https://taptr.github.io"
|
43 |
+
# CodeUrl = "https://taptr.github.io"
|
44 |
+
# PaperUrlV1 = "https://arxiv.org/abs/2403.13042"
|
45 |
+
# PaperUrlV2 = "https://arxiv.org/abs/2407.16291"
|
46 |
+
# PaperUrlV3 = "https://arxiv.org/abs/2411.18671"
|
47 |
+
# with gr.Blocks(title="TAPTRv3") as demo:
|
48 |
+
# title_markdown = (f"""
|
49 |
+
# # TAPTRv3: Spatial and Temporal Context Foster Robust Tracking of Any Point in Long Video
|
50 |
+
# ## TAPTR: Track Any Point TRansformer
|
51 |
+
# [[TAPTR-Series Project Page]]({ProjectPage}) [[TAPTR-Series Repository]]({CodeUrl}) [[Paper-TAPTRv1]]({PaperUrlV1}) [[Paper-TAPTRv2]]({PaperUrlV2}) [[Paper-TAPTRv3]]({PaperUrlV3})
|
52 |
+
# """)
|
53 |
+
# tips = (f"""
|
54 |
+
# **Usage** \\
|
55 |
+
# 1. Upload a video in Input Video module. \\
|
56 |
+
# 2. Select a frame in Frame Selector module, the corresponding frame will be shown in Interaction module. (The first frame is selected by default.) \\
|
57 |
+
# 3. Click on the Interaction module to specify the points to be tracked. \\
|
58 |
+
# 4. Click on Submit button to start tracking the points. \\
|
59 |
+
# 5. The output video will be shown in Output Video module. \\
|
60 |
+
# More details, please refer to the example video. \\
|
61 |
+
# **Note** \\
|
62 |
+
# 1. TAPTR has broad application scenarios, such as slam, AR, motion capture, and video editing. If you have any collaboration intentions, please contact us. \\
|
63 |
+
# 2. Limited by the hardware our demo running on, a video that is too long may result in the long machine occupation, so we reject the video longer than 600 frames. \\
|
64 |
+
# 3. If you have any questions feel free to contact us or open an issue in our [repo]({CodeUrl}).
|
65 |
+
# """)
|
66 |
+
# gr.Markdown(title_markdown)
|
67 |
+
# with gr.Row():
|
68 |
+
# with gr.Column(scale=0.5):
|
69 |
+
# input_video = gr.Video(label="Input Video", height=300)
|
70 |
+
# use_globalmatching = gr.Checkbox(label="Automatically Trigger Global Matching to Reestablish Tracking.", value=False)
|
71 |
+
# user_specified_retrack = gr.Textbox(label="Manually Specify Frames for Global Matching to Reestablish Tracking.", placeholder="[ ]")
|
72 |
+
# frame_selector = gr.Slider(minimum=0, maximum=20, value=0, label="Frame Selector")
|
73 |
+
# submit_btn = gr.Button("Submit")
|
74 |
+
# if os.path.exists("./assets/example_videos/Box.mp4"):
|
75 |
+
# with gr.Row():
|
76 |
+
# gr.Examples(examples=[
|
77 |
+
# [f"./assets/example_videos/Box.mp4"],
|
78 |
+
# ], inputs=[input_video], label="Example-Box")
|
79 |
+
# gr.Examples(examples=[
|
80 |
+
# [f"./assets/example_videos/Sofa.mp4"],
|
81 |
+
# ], inputs=[input_video], label="Example-Sofa")
|
82 |
+
# gr.Examples(examples=[
|
83 |
+
# [f"./assets/example_videos/RabbitAndYogurt.mp4"],
|
84 |
+
# ], inputs=[input_video], label="Example-RabbitAndYogurt")
|
85 |
+
# gr.Examples(examples=[
|
86 |
+
# [f"./assets/example_videos/RollingBasketball.mp4"],
|
87 |
+
# ], inputs=[input_video], label="Example-RollingBasketball")
|
88 |
+
# gr.Examples(examples=[
|
89 |
+
# [f"./assets/example_videos/Goldfish.mp4"],
|
90 |
+
# ], inputs=[input_video], label="Example-Goldfish")
|
91 |
+
# gr.Examples(examples=[
|
92 |
+
# [f"./assets/example_videos/Jellyfish.mp4"],
|
93 |
+
# ], inputs=[input_video], label="Example-Jellyfish")
|
94 |
+
# gr.Examples(examples=[
|
95 |
+
# [f"./assets/example_videos/HandOcclusion.mp4"],
|
96 |
+
# ], inputs=[input_video], label="Example-HandOcclusion")
|
97 |
+
# gr.Examples(examples=[
|
98 |
+
# [f"./assets/example_videos/PaperOcclusion.mp4"],
|
99 |
+
# ], inputs=[input_video], label="Example-PaperOcclusion")
|
100 |
+
# if os.path.exists("./assets/PointTracking.mp4"):
|
101 |
+
# usage_video = gr.Video(label="Usage", height=250, value="./assets/PointTracking.mp4")
|
102 |
+
# gr.Markdown(tips)
|
103 |
+
# with gr.Column():
|
104 |
+
# interaction = ImagePrompter(label="Interaction", interactive=True, height=650)
|
105 |
+
# output_video = gr.Video(label="Output Video", height=650)
|
106 |
+
# input_video.change(fn=video_to_interaction, inputs=[input_video, frame_selector], outputs=[interaction])
|
107 |
+
# frame_selector.change(fn=video_to_interaction, inputs=[input_video, frame_selector], outputs=[interaction])
|
108 |
+
# submit_btn.click(fn=process_one_video, inputs=[input_video, frame_selector, interaction, use_globalmatching, user_specified_retrack], outputs=[output_video])
|
109 |
+
# demo.queue()
|
110 |
+
|
111 |
+
|
112 |
+
# if __name__ == "__main__":
|
113 |
+
# global DemoCore
|
114 |
+
# args = get_args()
|
115 |
+
# DemoCore = Demo(args)
|
116 |
+
# demo.launch(server_name="0.0.0.0", server_port=10006)
|
117 |
+
|
118 |
+
|
119 |
+
import gradio as gr
|
120 |
+
|
121 |
+
# ζ¬ε°ζε‘ηε
¬η½ URL
|
122 |
+
LOCAL_DEMO_URL = "taptr.deepdataspace.com"
|
123 |
+
|
124 |
+
# ε θ½½ζ¬ε° Demo
|
125 |
+
demo = gr.Blocks.load(LOCAL_DEMO_URL)
|
126 |
+
|
127 |
+
# ε―ε¨ Hugging Face η Gradio ηι’
|
128 |
+
if __name__ == "__main__":
|
129 |
+
demo.launch()
|