Nymbo commited on
Commit
0bb3a7f
·
verified ·
1 Parent(s): 2b65731

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -67
app.py CHANGED
@@ -1,14 +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
-
10
- uid = uuid.uuid4()
11
- size_js = """
12
  function imgSize(){
13
  var myImg = document.getElementsByClassName("my_im");
14
  var realWidth = myImg.naturalWidth;
@@ -18,57 +17,61 @@ size_js = """
18
 
19
  def dl(inp):
20
  out = None
21
- out_file = []
22
  try:
23
- inp_out = inp.replace("https://", "").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
  out = f"{uid}/{inp_out}.mp4"
30
- print(out)
 
 
31
  except Exception as e:
32
- print(e)
33
- return out, gr.HTML(""), "", ""
 
34
 
35
- def process_vid(file, cur_frame, every_n):
36
  new_video_in = str(file)
37
- capture = cv2.VideoCapture(new_video_in)
38
  frame_count = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
39
  rev_img_searcher = ReverseImageSearcher()
40
- html_out = ""
41
  count = int(every_n)
42
- if cur_frame == "" or cur_frame is None:
43
  start_frame = 0
44
- elif cur_frame != "" and cur_frame is not None:
45
  start_frame = int(cur_frame)
46
  try:
47
- for i in range(start_frame, frame_count - 1):
48
  if count == int(every_n):
49
  count = 1
50
  print(i)
51
  capture.set(cv2.CAP_PROP_POS_FRAMES, i)
52
- ret, frame_f = capture.read()
53
- if not ret or frame_f is None:
54
- print(f"Failed to read frame {i}")
55
- continue
56
  cv2.imwrite(f"{uid}-vid_tmp{i}.png", frame_f)
57
  out = os.path.abspath(f"{uid}-vid_tmp{i}.png")
58
  out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
59
  print(out)
60
  res = rev_img_searcher.search(out_url)
61
- out_cnt = 0
 
62
  if len(res) > 0:
 
63
  for search_item in res:
64
- print(f'counting {count}')
65
- out_cnt += 1
66
- out_dict = {
67
  'Title': f'{search_item.page_title}',
68
  'Site': f'{search_item.page_url}',
69
  'Img': f'{search_item.image_url}',
70
  }
71
- print(dir(search_item))
72
  html_out = f"""{html_out}
73
  <div>
74
  Title: {search_item.page_title}<br>
@@ -76,16 +79,17 @@ def process_vid(file, cur_frame, every_n):
76
  Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
77
  <img class='my_im' src='{search_item.image_url}'><br>
78
  </div>"""
79
- return (gr.HTML(f'<h1>Total Found: {out_cnt}</h1><br>{html_out}'), f"Found frame: {i}", i + int(every_n))
80
  else:
81
  pass
82
- count += 1
83
- print(i + 1)
 
84
  except Exception as e:
85
- return (gr.HTML(f'{e}'), "", "")
86
- return (gr.HTML('No frame matches found.'), "", "")
87
 
88
- def process_im(file, url):
89
  if not url.startswith("https://nymbo"):
90
  return url
91
  else:
@@ -97,24 +101,25 @@ def process_im(file, url):
97
  return (out_url)
98
 
99
  def rev_im(image):
 
100
  out_list = []
101
  out_im = []
102
  html_out = """"""
103
- image = cv2.imread(image)
104
  cv2.imwrite(f"{uid}-im_tmp.png", image)
105
  out = os.path.abspath(f"{uid}-im_tmp.png")
106
- out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
107
  rev_img_searcher = ReverseImageSearcher()
108
  res = rev_img_searcher.search(out_url)
109
  count = 0
110
  for search_item in res:
111
- count += 1
112
- out_dict = {
113
  'Title': f'{search_item.page_title}',
114
  'Site': f'{search_item.page_url}',
115
  'Img': f'{search_item.image_url}',
116
  }
117
- print(dir(search_item))
118
  html_out = f"""{html_out}
119
  <div>
120
  Title: {search_item.page_title}<br>
@@ -122,51 +127,55 @@ def rev_im(image):
122
  Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
123
  <img class='my_im' src='{search_item.image_url}'><br>
124
  </div>"""
125
-
126
  return (gr.HTML(f'<h1>Total Found: {count}</h1><br>{html_out}'))
127
 
 
 
 
 
128
  with gr.Blocks() as app:
129
  with gr.Row():
130
  gr.Column()
131
  with gr.Column():
132
- source_tog = gr.Radio(choices=["Image", "Video"], value="Image")
 
133
  with gr.Box(visible=True) as im_box:
134
- inp_url = gr.Textbox(label="Image URL")
135
- load_im_btn = gr.Button("Load Image")
136
- inp_im = gr.Image(label="Search Image", type='filepath')
137
- go_btn_im = gr.Button()
138
  with gr.Box(visible=False) as vid_box:
139
- vid_url = gr.Textbox(label="Video URL")
140
- vid_url_btn = gr.Button("Load URL")
141
- inp_vid = gr.Video(label="Search Video")
142
  with gr.Row():
143
- every_n = gr.Number(label="Every /nth frame", value=10)
144
- stat_box = gr.Textbox(label="Status")
145
  with gr.Row():
146
- go_btn_vid = gr.Button("Start")
147
- next_btn = gr.Button("Next")
148
-
149
- gr.Column()
150
-
151
  with gr.Row():
152
  html_out = gr.HTML("""""")
153
  with gr.Row(visible=False):
154
- hid_box = gr.Textbox()
155
-
156
  def shuf(tog):
157
  if tog == "Image":
158
- return gr.update(visible=True), gr.update(visible=False)
159
  if tog == "Video":
160
- return gr.update(visible=False), gr.update(visible=True)
161
-
162
  def load_image(url):
163
  return url
 
 
 
 
 
 
 
164
 
165
- im_load = load_im_btn.click(load_image, inp_url, inp_im)
166
- next_btn.click(process_vid, [inp_vid, hid_box, every_n], [html_out, stat_box, hid_box])
167
- vid_load = vid_url_btn.click(dl, vid_url, [inp_vid, html_out, stat_box, hid_box])
168
- vid_proc = go_btn_vid.click(process_vid, [inp_vid, hid_box, every_n], [html_out, stat_box, hid_box])
169
- im_proc = go_btn_im.click(rev_im, inp_im, [html_out])
170
- source_tog.change(shuf, [source_tog], [im_box, vid_box], cancels=[vid_proc, im_proc, im_load, vid_load])
171
-
172
  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
+ uid=uuid.uuid4()
10
+ size_js="""
 
11
  function imgSize(){
12
  var myImg = document.getElementsByClassName("my_im");
13
  var realWidth = myImg.naturalWidth;
 
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
  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:
 
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
  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()