Thao Pham
commited on
Commit
Β·
5de0912
1
Parent(s):
527422b
Change input to upload video
Browse files- app.py +31 -33
- video_utils.py +1 -1
app.py
CHANGED
@@ -5,6 +5,7 @@ import video_utils
|
|
5 |
import utils
|
6 |
import embed
|
7 |
import rag
|
|
|
8 |
import os
|
9 |
import uuid
|
10 |
import numpy as np
|
@@ -18,7 +19,7 @@ from dotenv import load_dotenv
|
|
18 |
load_dotenv() # Load from .env
|
19 |
|
20 |
UPLOAD_FOLDER = 'uploads'
|
21 |
-
|
22 |
|
23 |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
24 |
PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")
|
@@ -38,7 +39,11 @@ pc = Pinecone(
|
|
38 |
# Connect to an index
|
39 |
index_name = "multimodal-minilm"
|
40 |
if index_name not in pc.list_indexes().names():
|
41 |
-
|
|
|
|
|
|
|
|
|
42 |
INDEX = pc.Index(index_name)
|
43 |
|
44 |
MODEL_STACK = [TEXT_MODEL, VISION_MODEL, VISION_MODEL_PROCESSOR, VLM, VLM_PROCESSOR]
|
@@ -81,41 +86,36 @@ def check_exist_before_upsert(index, video_path):
|
|
81 |
|
82 |
def chat(message, history):
|
83 |
image_input_path = None
|
|
|
|
|
|
|
|
|
84 |
if len(message['files']) > 0:
|
85 |
assert len(message['files']) == 1
|
86 |
-
|
|
|
|
|
|
|
|
|
|
|
87 |
|
88 |
message = message['text']
|
89 |
|
90 |
if history is None:
|
91 |
history = []
|
92 |
|
93 |
-
if
|
94 |
-
# Check valid URL
|
95 |
-
history.append((message, f"Checking if your provided URL at {message} is valid..."))
|
96 |
-
yield history
|
97 |
-
|
98 |
-
valid = is_valid_youtube_url(message)
|
99 |
-
if not valid:
|
100 |
-
history.append((None, "β Invalid YouTube URL. Please try again."))
|
101 |
-
yield history
|
102 |
-
return
|
103 |
-
|
104 |
# Check metadata
|
105 |
-
history.append((None, "β
|
106 |
yield history
|
107 |
|
108 |
-
|
109 |
-
|
110 |
-
yield history
|
111 |
|
112 |
-
|
113 |
-
yield history
|
114 |
|
115 |
-
output_folder_path = os.path.join(UPLOAD_FOLDER, video_metadata['title'])
|
116 |
-
path_to_video = os.path.join(output_folder_path, f"video.mp4")
|
117 |
if not os.path.exists(path_to_video):
|
118 |
-
|
119 |
|
120 |
history.append((None, "β³ Transcribing video..."))
|
121 |
yield history
|
@@ -155,17 +155,17 @@ def chat(message, history):
|
|
155 |
with open(os.path.join(output_folder_path, "summary.txt"), "w") as f:
|
156 |
f.write(video_summary)
|
157 |
|
158 |
-
history.append((None, f"Video processing complete! You can now ask me questions about the video {
|
159 |
yield history
|
160 |
|
161 |
-
global
|
162 |
-
|
163 |
else:
|
164 |
history.append((message, None))
|
165 |
yield history
|
166 |
|
167 |
-
if
|
168 |
-
history.append((None, "You need to
|
169 |
yield history
|
170 |
return
|
171 |
|
@@ -186,18 +186,16 @@ def chat(message, history):
|
|
186 |
yield history
|
187 |
|
188 |
def clear_chat(history):
|
189 |
-
# return []
|
190 |
history = []
|
191 |
-
history.append((None, "Please
|
192 |
-
# yield history
|
193 |
return history
|
194 |
|
195 |
def main():
|
196 |
-
initial_messages = [(None, "Please
|
197 |
|
198 |
with gr.Blocks() as demo:
|
199 |
chatbot = gr.Chatbot(value=initial_messages)
|
200 |
-
msg = gr.MultimodalTextbox(file_types=['image'], sources=['upload'])
|
201 |
|
202 |
with gr.Row():
|
203 |
with gr.Column():
|
|
|
5 |
import utils
|
6 |
import embed
|
7 |
import rag
|
8 |
+
import shutil
|
9 |
import os
|
10 |
import uuid
|
11 |
import numpy as np
|
|
|
19 |
load_dotenv() # Load from .env
|
20 |
|
21 |
UPLOAD_FOLDER = 'uploads'
|
22 |
+
global_video_name = None
|
23 |
|
24 |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
|
25 |
PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")
|
|
|
39 |
# Connect to an index
|
40 |
index_name = "multimodal-minilm"
|
41 |
if index_name not in pc.list_indexes().names():
|
42 |
+
pc.create_index(index_name, dimension=384, metric="cosine",
|
43 |
+
spec=ServerlessSpec(
|
44 |
+
cloud="aws",
|
45 |
+
region="us-east-1"
|
46 |
+
))
|
47 |
INDEX = pc.Index(index_name)
|
48 |
|
49 |
MODEL_STACK = [TEXT_MODEL, VISION_MODEL, VISION_MODEL_PROCESSOR, VLM, VLM_PROCESSOR]
|
|
|
86 |
|
87 |
def chat(message, history):
|
88 |
image_input_path = None
|
89 |
+
|
90 |
+
# print(message['files'])
|
91 |
+
|
92 |
+
video_name, video_input_path = None, None
|
93 |
if len(message['files']) > 0:
|
94 |
assert len(message['files']) == 1
|
95 |
+
|
96 |
+
if message['files'][0].endswith('.jpg'):
|
97 |
+
image_input_path = message['files'][0]
|
98 |
+
elif message['files'][0].endswith('.mp4'):
|
99 |
+
video_input_path = message['files'][0]
|
100 |
+
video_name = os.path.basename(video_input_path).split('.mp4')[0]
|
101 |
|
102 |
message = message['text']
|
103 |
|
104 |
if history is None:
|
105 |
history = []
|
106 |
|
107 |
+
if video_name is not None:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
# Check metadata
|
109 |
+
history.append((None, f"β
Video uploaded succesfully! Your video's title is {video_name}..."))
|
110 |
yield history
|
111 |
|
112 |
+
output_folder_path = os.path.join(UPLOAD_FOLDER, video_name)
|
113 |
+
os.makedirs(output_folder_path, exist_ok=True)
|
|
|
114 |
|
115 |
+
path_to_video = os.path.join(output_folder_path, "video.mp4")
|
|
|
116 |
|
|
|
|
|
117 |
if not os.path.exists(path_to_video):
|
118 |
+
shutil.move(video_input_path, path_to_video)
|
119 |
|
120 |
history.append((None, "β³ Transcribing video..."))
|
121 |
yield history
|
|
|
155 |
with open(os.path.join(output_folder_path, "summary.txt"), "w") as f:
|
156 |
f.write(video_summary)
|
157 |
|
158 |
+
history.append((None, f"Video processing complete! You can now ask me questions about the video {video_name}!"))
|
159 |
yield history
|
160 |
|
161 |
+
global global_video_name
|
162 |
+
global_video_name = video_name
|
163 |
else:
|
164 |
history.append((message, None))
|
165 |
yield history
|
166 |
|
167 |
+
if global_video_name is None:
|
168 |
+
history.append((None, "You need to upload a video before asking questions."))
|
169 |
yield history
|
170 |
return
|
171 |
|
|
|
186 |
yield history
|
187 |
|
188 |
def clear_chat(history):
|
|
|
189 |
history = []
|
190 |
+
history.append((None, "Please upload a video to get started!"))
|
|
|
191 |
return history
|
192 |
|
193 |
def main():
|
194 |
+
initial_messages = [(None, "Please upload a video to get started!")]
|
195 |
|
196 |
with gr.Blocks() as demo:
|
197 |
chatbot = gr.Chatbot(value=initial_messages)
|
198 |
+
msg = gr.MultimodalTextbox(file_types=['image', '.mp4'], sources=['upload'])
|
199 |
|
200 |
with gr.Row():
|
201 |
with gr.Column():
|
video_utils.py
CHANGED
@@ -22,7 +22,7 @@ def extract_audio(path_to_video:str, output_folder:str):
|
|
22 |
video_name = os.path.basename(path_to_video).replace('.mp4', '')
|
23 |
|
24 |
# declare where to save .mp3 audio
|
25 |
-
path_to_extracted_audio_file = os.path.join(output_folder,
|
26 |
|
27 |
# extract mp3 audio file from mp4 video video file
|
28 |
clip = VideoFileClip(path_to_video)
|
|
|
22 |
video_name = os.path.basename(path_to_video).replace('.mp4', '')
|
23 |
|
24 |
# declare where to save .mp3 audio
|
25 |
+
path_to_extracted_audio_file = os.path.join(output_folder, 'audio.mp3')
|
26 |
|
27 |
# extract mp3 audio file from mp4 video video file
|
28 |
clip = VideoFileClip(path_to_video)
|