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