Jonny001 commited on
Commit
03f8015
1 Parent(s): eaff916

Upload 4 files

Browse files
Files changed (4) hide show
  1. .gitattributes +35 -0
  2. README.md +12 -0
  3. app.py +181 -0
  4. requirements.txt +3 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Reverse Image
3
+ emoji: 📈
4
+ colorFrom: blue
5
+ colorTo: blue
6
+ sdk: gradio
7
+ sdk_version: 3.47.1
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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;
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://Jonny001-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://Jonny001-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://Jonny001"):
94
+ return url
95
+ else:
96
+ read_file = Image.open(file)
97
+ read_file.save(f"{uid}-tmp.png")
98
+ action_input = f"{uid}-tmp.png"
99
+ out = os.path.abspath(action_input)
100
+ out_url = f'https://Jonny001-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://Jonny001-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>
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
+ gr.HTML("""<center><h1>Reverse Image and Video Search</h1></center>""")
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()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ yt-dlp
2
+ opencv-python
3
+ google-image-source-search