Nymbo commited on
Commit
c6fe582
·
verified ·
1 Parent(s): 319e8a0

yt videos still broken? (subprocess.run)

Browse files
Files changed (1) hide show
  1. app.py +88 -91
app.py CHANGED
@@ -1,12 +1,13 @@
1
  import gradio as gr
2
- import requests
3
  import yt_dlp
4
  import cv2
5
  from google_img_source_search import ReverseImageSearcher
6
  from PIL import Image
7
- import os
8
  import uuid
9
- uid=uuid.uuid4()
 
10
  size_js="""
11
  function imgSize(){
12
  var myImg = document.getElementsByClassName("my_im");
@@ -17,61 +18,75 @@ size_js="""
17
 
18
  def dl(inp):
19
  out = None
20
- out_file=[]
21
  try:
22
- inp_out=inp.replace("https://","")
23
- inp_out=inp_out.replace("/","_").replace(".","_").replace("=","_").replace("?","_")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  if "twitter" in inp:
25
- os.system(f'yt-dlp "{inp}" --extractor-arg "twitter:api=syndication" --trim-filenames 160 -o "{uid}/{inp_out}.mp4" -S res,mp4 --recode mp4')
26
- else:
27
- os.system(f'yt-dlp "{inp}" --trim-filenames 160 -o "{uid}/{inp_out}.mp4" -S res,mp4 --recode mp4')
28
-
29
- #os.system(f'yt-dlp "{inp}" --trim-filenames 160 -o "{inp_out}.mp4" -S res,mp4 --recode mp4')
 
 
 
 
 
 
30
  out = f"{uid}/{inp_out}.mp4"
31
- #out_ap = os.path.abspath(out_f)
32
- #out = f'https://nymbo-reverse-image.hf.space/file={out_ap}'
33
- print (out)
34
  except Exception as e:
35
- print (e)
36
- #out = f'{e}'
37
- return out,gr.HTML(""),"",""
 
38
 
39
- def process_vid(file,cur_frame,every_n):
40
  new_video_in = str(file)
41
- capture = cv2.VideoCapture(new_video_in)
42
  frame_count = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
43
  rev_img_searcher = ReverseImageSearcher()
44
- html_out=""
45
  count = int(every_n)
46
- if cur_frame == "" or cur_frame==None:
47
  start_frame = 0
48
- elif cur_frame != "" and cur_frame!=None:
49
  start_frame = int(cur_frame)
50
  try:
51
- for i in range(start_frame, frame_count-1):
52
  if count == int(every_n):
53
  count = 1
54
  print(i)
55
  capture.set(cv2.CAP_PROP_POS_FRAMES, i)
56
- ret, frame_f = capture.read(i)
 
 
57
  cv2.imwrite(f"{uid}-vid_tmp{i}.png", frame_f)
58
  out = os.path.abspath(f"{uid}-vid_tmp{i}.png")
59
  out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
60
  print(out)
61
  res = rev_img_searcher.search(out_url)
62
- #print (res)
63
- out_cnt =0
64
  if len(res) > 0:
65
- #count = 0
66
  for search_item in res:
67
- print (f'counting {count}')
68
- out_cnt+=1
69
- out_dict={
70
- 'Title': f'{search_item.page_title}',
71
- 'Site': f'{search_item.page_url}',
72
- 'Img': f'{search_item.image_url}',
73
- }
74
- print (dir(search_item))
75
  html_out = f"""{html_out}
76
  <div>
77
  Title: {search_item.page_title}<br>
@@ -79,17 +94,14 @@ def process_vid(file,cur_frame,every_n):
79
  Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
80
  <img class='my_im' src='{search_item.image_url}'><br>
81
  </div>"""
82
- return (gr.HTML(f'<h1>Total Found: {out_cnt}</h1><br>{html_out}'), f"Found frame: {i}", i+int(every_n))
83
- else:
84
- pass
85
- count +=1
86
- print (i+1)
87
- #return (None,f"Searching Frame: {i}", "")
88
  except Exception as e:
89
- return (gr.HTML(f'{e}'),"","")
90
- return (gr.HTML('No frame matches found.'),"","")
91
 
92
- def process_im(file,url):
93
  if not url.startswith("https://nymbo"):
94
  return url
95
  else:
@@ -98,28 +110,20 @@ def process_im(file,url):
98
  action_input = f"{uid}-tmp.png"
99
  out = os.path.abspath(action_input)
100
  out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
101
- return (out_url)
102
 
103
  def rev_im(image):
104
- #image_url = 'https://i.pinimg.com/originals/c4/50/35/c450352ac6ea8645ead206721673e8fb.png'
105
  out_list = []
106
- out_im = []
107
  html_out = """"""
108
- image=cv2.imread(image)
109
  cv2.imwrite(f"{uid}-im_tmp.png", image)
110
  out = os.path.abspath(f"{uid}-im_tmp.png")
111
- out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
112
  rev_img_searcher = ReverseImageSearcher()
113
  res = rev_img_searcher.search(out_url)
114
  count = 0
115
  for search_item in res:
116
- count+=1
117
- out_dict={
118
- 'Title': f'{search_item.page_title}',
119
- 'Site': f'{search_item.page_url}',
120
- 'Img': f'{search_item.image_url}',
121
- }
122
- print (dir(search_item))
123
  html_out = f"""{html_out}
124
  <div>
125
  Title: {search_item.page_title}<br>
@@ -127,55 +131,48 @@ def rev_im(image):
127
  Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
128
  <img class='my_im' src='{search_item.image_url}'><br>
129
  </div>"""
130
-
131
- return (gr.HTML(f'<h1>Total Found: {count}</h1><br>{html_out}'))
132
-
133
-
134
-
135
-
136
 
137
  with gr.Blocks() as app:
138
  with gr.Row():
139
  gr.Column()
140
  with gr.Column():
141
-
142
- source_tog=gr.Radio(choices=["Image","Video"],value="Image")
143
  with gr.Box(visible=True) as im_box:
144
- inp_url=gr.Textbox(label="Image URL")
145
- load_im_btn=gr.Button("Load Image")
146
- inp_im=gr.Image(label="Search Image",type='filepath')
147
- go_btn_im=gr.Button()
148
  with gr.Box(visible=False) as vid_box:
149
- vid_url=gr.Textbox(label="Video URL")
150
- vid_url_btn=gr.Button("Load URL")
151
- inp_vid=gr.Video(label="Search Video")
152
  with gr.Row():
153
- every_n=gr.Number(label = "Every /nth frame", value = 10)
154
- stat_box=gr.Textbox(label="Status")
155
  with gr.Row():
156
- go_btn_vid=gr.Button("Start")
157
- next_btn=gr.Button("Next")
158
-
159
- gr.Column()
160
- #paste_clip = gr.Button("Paste from Clipboard")
161
  with gr.Row():
162
- html_out = gr.HTML("""""")
163
  with gr.Row(visible=False):
164
- hid_box=gr.Textbox()
 
165
  def shuf(tog):
166
  if tog == "Image":
167
- return gr.update(visible=True),gr.update(visible=False)
168
  if tog == "Video":
169
- return gr.update(visible=False),gr.update(visible=True)
 
170
  def load_image(url):
171
  return url
172
- im_load = load_im_btn.click(load_image,inp_url,inp_im)
173
- next_btn.click(process_vid,[inp_vid,hid_box,every_n],[html_out,stat_box,hid_box])
174
- vid_load = vid_url_btn.click(dl,vid_url,[inp_vid,html_out,stat_box,hid_box])
175
- #inp_im.change(process_im,[inp_im,inp_url],[inp_url])
176
- vid_proc = go_btn_vid.click(process_vid,[inp_vid,hid_box,every_n],[html_out,stat_box,hid_box])
177
- im_proc = go_btn_im.click(rev_im,inp_im,[html_out])
178
- source_tog.change(shuf,[source_tog],[im_box,vid_box],cancels=[vid_proc,im_proc,im_load,vid_load])
179
-
180
- #go_btn_url.click(rev_im,inp_url,[html_out])
181
  app.queue(concurrency_count=20).launch()
 
1
  import gradio as gr
2
+ import requests
3
  import yt_dlp
4
  import cv2
5
  from google_img_source_search import ReverseImageSearcher
6
  from PIL import Image
7
+ import os
8
  import uuid
9
+ import subprocess
10
+
11
  size_js="""
12
  function imgSize(){
13
  var myImg = document.getElementsByClassName("my_im");
 
18
 
19
  def dl(inp):
20
  out = None
21
+ out_file = []
22
  try:
23
+ # Create a unique identifier for each download
24
+ uid = uuid.uuid4()
25
+ os.makedirs(f"{uid}", exist_ok=True) # Create a directory for storing the downloaded file
26
+
27
+ # Generate a unique output filename
28
+ inp_out = inp.replace("https://", "").replace("/", "_").replace(".", "_").replace("=", "_").replace("?", "_")
29
+
30
+ # Download using yt_dlp
31
+ command = [
32
+ "yt-dlp",
33
+ inp,
34
+ "--trim-filenames", "160",
35
+ "-o", f"{uid}/{inp_out}.mp4",
36
+ "-S", "res,mp4",
37
+ "--recode", "mp4"
38
+ ]
39
+
40
  if "twitter" in inp:
41
+ command.insert(2, "--extractor-arg")
42
+ command.insert(3, "twitter:api=syndication")
43
+
44
+ # Use subprocess to execute the command and handle errors
45
+ result = subprocess.run(command, capture_output=True, text=True)
46
+
47
+ # Check if the command was successful
48
+ if result.returncode != 0:
49
+ print("Error occurred:", result.stderr)
50
+ return None, gr.HTML(f"<p>Error: {result.stderr}</p>"), "", ""
51
+
52
  out = f"{uid}/{inp_out}.mp4"
53
+ print(out)
54
+
 
55
  except Exception as e:
56
+ print(e)
57
+ return None, gr.HTML(f"<p>Error: {str(e)}</p>"), "", ""
58
+
59
+ return out, gr.HTML(""), "", ""
60
 
61
+ def process_vid(file, cur_frame, every_n):
62
  new_video_in = str(file)
63
+ capture = cv2.VideoCapture(new_video_in)
64
  frame_count = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
65
  rev_img_searcher = ReverseImageSearcher()
66
+ html_out = ""
67
  count = int(every_n)
68
+ if cur_frame == "" or cur_frame is None:
69
  start_frame = 0
70
+ else:
71
  start_frame = int(cur_frame)
72
  try:
73
+ for i in range(start_frame, frame_count - 1):
74
  if count == int(every_n):
75
  count = 1
76
  print(i)
77
  capture.set(cv2.CAP_PROP_POS_FRAMES, i)
78
+ ret, frame_f = capture.read()
79
+ if not ret:
80
+ continue
81
  cv2.imwrite(f"{uid}-vid_tmp{i}.png", frame_f)
82
  out = os.path.abspath(f"{uid}-vid_tmp{i}.png")
83
  out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
84
  print(out)
85
  res = rev_img_searcher.search(out_url)
86
+ out_cnt = 0
 
87
  if len(res) > 0:
 
88
  for search_item in res:
89
+ out_cnt += 1
 
 
 
 
 
 
 
90
  html_out = f"""{html_out}
91
  <div>
92
  Title: {search_item.page_title}<br>
 
94
  Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
95
  <img class='my_im' src='{search_item.image_url}'><br>
96
  </div>"""
97
+ return gr.HTML(f'<h1>Total Found: {out_cnt}</h1><br>{html_out}'), f"Found frame: {i}", i + int(every_n)
98
+ count += 1
99
+ print(i + 1)
 
 
 
100
  except Exception as e:
101
+ return gr.HTML(f"{e}"), "", ""
102
+ return gr.HTML('No frame matches found.'), "", ""
103
 
104
+ def process_im(file, url):
105
  if not url.startswith("https://nymbo"):
106
  return url
107
  else:
 
110
  action_input = f"{uid}-tmp.png"
111
  out = os.path.abspath(action_input)
112
  out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
113
+ return out_url
114
 
115
  def rev_im(image):
 
116
  out_list = []
 
117
  html_out = """"""
118
+ image = cv2.imread(image)
119
  cv2.imwrite(f"{uid}-im_tmp.png", image)
120
  out = os.path.abspath(f"{uid}-im_tmp.png")
121
+ out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
122
  rev_img_searcher = ReverseImageSearcher()
123
  res = rev_img_searcher.search(out_url)
124
  count = 0
125
  for search_item in res:
126
+ count += 1
 
 
 
 
 
 
127
  html_out = f"""{html_out}
128
  <div>
129
  Title: {search_item.page_title}<br>
 
131
  Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
132
  <img class='my_im' src='{search_item.image_url}'><br>
133
  </div>"""
134
+ return gr.HTML(f'<h1>Total Found: {count}</h1><br>{html_out}')
 
 
 
 
 
135
 
136
  with gr.Blocks() as app:
137
  with gr.Row():
138
  gr.Column()
139
  with gr.Column():
140
+ source_tog = gr.Radio(choices=["Image", "Video"], value="Image")
 
141
  with gr.Box(visible=True) as im_box:
142
+ inp_url = gr.Textbox(label="Image URL")
143
+ load_im_btn = gr.Button("Load Image")
144
+ inp_im = gr.Image(label="Search Image", type='filepath')
145
+ go_btn_im = gr.Button("Start Image Search")
146
  with gr.Box(visible=False) as vid_box:
147
+ vid_url = gr.Textbox(label="Video URL")
148
+ vid_url_btn = gr.Button("Load URL")
149
+ inp_vid = gr.Video(label="Search Video")
150
  with gr.Row():
151
+ every_n = gr.Number(label="Every /nth frame", value=10)
152
+ stat_box = gr.Textbox(label="Status")
153
  with gr.Row():
154
+ go_btn_vid = gr.Button("Start Video Search")
155
+ next_btn = gr.Button("Next")
156
+
 
 
157
  with gr.Row():
158
+ html_out = gr.HTML("""")
159
  with gr.Row(visible=False):
160
+ hid_box = gr.Textbox()
161
+
162
  def shuf(tog):
163
  if tog == "Image":
164
+ return gr.update(visible=True), gr.update(visible=False)
165
  if tog == "Video":
166
+ return gr.update(visible=False), gr.update(visible=True)
167
+
168
  def load_image(url):
169
  return url
170
+
171
+ im_load = load_im_btn.click(load_image, inp_url, inp_im)
172
+ next_btn.click(process_vid, [inp_vid, hid_box, every_n], [html_out, stat_box, hid_box])
173
+ vid_load = vid_url_btn.click(dl, vid_url, [inp_vid, html_out, stat_box, hid_box])
174
+ vid_proc = go_btn_vid.click(process_vid, [inp_vid, hid_box, every_n], [html_out, stat_box, hid_box])
175
+ im_proc = go_btn_im.click(rev_im, inp_im, [html_out])
176
+ source_tog.change(shuf, [source_tog], [im_box, vid_box], cancels=[vid_proc, im_proc, im_load, vid_load])
177
+
 
178
  app.queue(concurrency_count=20).launch()