Spaces:
Build error
Build error
File size: 6,414 Bytes
aead09a 0bb3a7f 1ce9878 d82da04 7716718 2255cf1 0bb3a7f e8f283e 3810d6e 2b65731 bf17c4e a8f7368 ac2b487 3810d6e a8f7368 3810d6e 2b65731 0bb3a7f a8f7368 0bb3a7f 2b65731 3810d6e ac2b487 3810d6e ac2b487 3810d6e 2b65731 0bb3a7f ac2b487 3810d6e 2b65731 8571798 2b65731 8571798 2b65731 599424e 0bb3a7f d4e29c7 dc9ebd1 d4e29c7 8571798 3810d6e 8571798 2b65731 ac2b487 8571798 2b65731 ac2b487 8571798 2b65731 ac2b487 2b65731 0bb3a7f 8571798 599424e 8571798 d82da04 3810d6e 319e8a0 dc9ebd1 2b65731 dc9ebd1 2b65731 c558940 dc9ebd1 3810d6e 8571798 2b65731 0bb3a7f 2b65731 8571798 3810d6e 2b65731 0bb3a7f 2b65731 c6fe582 ac2b487 f77bbf5 3810d6e f77bbf5 8571798 f77bbf5 8571798 f77bbf5 8571798 f77bbf5 8571798 3810d6e f77bbf5 2b65731 f77bbf5 8571798 2b65731 8571798 2b65731 8571798 2b65731 8571798 2b65731 ac2b487 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
import gradio as gr
import requests
import yt_dlp
import cv2
from google_img_source_search import ReverseImageSearcher
from PIL import Image
import os
import uuid
uid = str(uuid.uuid4())
size_js = """
function imgSize(){
var myImg = document.getElementsByClassName("my_im");
var realWidth = myImg.naturalWidth;
var realHeight = myImg.naturalHeight;
alert("Original width=" + realWidth + ", " + "Original height=" + realHeight);
}"""
def dl(inp):
out = None
out_file = []
try:
inp_out = inp.replace("https://", "")
inp_out = inp_out.replace("/", "_").replace(".", "_").replace("=", "_").replace("?", "_")
if "twitter" in inp:
os.system(f'yt-dlp "{inp}" --extractor-arg "twitter:api=syndication" --trim-filenames 160 -o "{uid}/{inp_out}.mp4" -S res,mp4 --recode mp4')
else:
os.system(f'yt-dlp "{inp}" --trim-filenames 160 -o "{uid}/{inp_out}.mp4" -S res,mp4 --recode mp4')
out = f"{uid}/{inp_out}.mp4"
print(out)
except Exception as e:
print(e)
return out, gr.HTML(""), "", ""
def process_vid(file, cur_frame, every_n):
new_video_in = str(file)
capture = cv2.VideoCapture(new_video_in)
frame_count = int(capture.get(cv2.CAP_PROP_FRAME_COUNT))
rev_img_searcher = ReverseImageSearcher()
html_out = ""
count = int(every_n)
if cur_frame == "" or cur_frame is None:
start_frame = 0
else:
start_frame = int(cur_frame)
try:
for i in range(start_frame, frame_count-1):
if count == int(every_n):
count = 1
capture.set(cv2.CAP_PROP_POS_FRAMES, i)
ret, frame_f = capture.read()
if not ret:
print(f"Failed to capture frame at {i}")
continue
cv2.imwrite(f"{uid}-vid_tmp{i}.png", frame_f)
out = os.path.abspath(f"{uid}-vid_tmp{i}.png")
out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
res = rev_img_searcher.search(out_url)
out_cnt = 0
if len(res) > 0:
for search_item in res:
out_cnt += 1
html_out = f"""{html_out}
<div>
Title: {search_item.page_title}<br>
Site: <a href='{search_item.page_url}' target='_blank' rel='noopener noreferrer'>{search_item.page_url}</a><br>
Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
<img class='my_im' src='{search_item.image_url}'><br>
</div>"""
return (gr.HTML(f'<h1>Total Found: {out_cnt}</h1><br>{html_out}'), f"Found frame: {i}", i+int(every_n))
count += 1
except Exception as e:
return (gr.HTML(f'{e}'), "", "")
return (gr.HTML('No frame matches found.'), "", "")
def process_im(file, url):
if not url.startswith("https://nymbo"):
return url
else:
read_file = Image.open(file)
read_file.save(f"{uid}-tmp.png")
action_input = f"{uid}-tmp.png"
out = os.path.abspath(action_input)
out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
return (out_url)
def rev_im(image):
out_list = []
out_im = []
html_out = """"""
image = cv2.imread(image)
cv2.imwrite(f"{uid}-im_tmp.png", image)
out = os.path.abspath(f"{uid}-im_tmp.png")
out_url = f'https://nymbo-reverse-image.hf.space/file={out}'
rev_img_searcher = ReverseImageSearcher()
res = rev_img_searcher.search(out_url)
count = 0
for search_item in res:
count += 1
out_dict = {
'Title': f'{search_item.page_title}',
'Site': f'{search_item.page_url}',
'Img': f'{search_item.image_url}',
}
html_out = f"""{html_out}
<div>
Title: {search_item.page_title}<br>
Site: <a href='{search_item.page_url}' target='_blank' rel='noopener noreferrer'>{search_item.page_url}</a><br>
Img: <a href='{search_item.image_url}' target='_blank' rel='noopener noreferrer'>{search_item.image_url}</a><br>
<img class='my_im' src='{search_item.image_url}'><br>
</div>"""
return (gr.HTML(f'<h1>Total Found: {count}</h1><br>{html_out}'))
with gr.Blocks() as app:
with gr.Row():
gr.Column()
with gr.Column():
source_tog = gr.Radio(choices=["Image","Video"], value="Image")
with gr.Box(visible=True) as im_box:
inp_url = gr.Textbox(label="Image URL")
load_im_btn = gr.Button("Load Image")
inp_im = gr.Image(label="Search Image", type='filepath')
go_btn_im = gr.Button()
with gr.Box(visible=False) as vid_box:
vid_url = gr.Textbox(label="Video URL")
vid_url_btn = gr.Button("Load URL")
inp_vid = gr.Video(label="Search Video")
with gr.Row():
every_n = gr.Number(label="Every /nth frame", value=10)
stat_box = gr.Textbox(label="Status")
with gr.Row():
go_btn_vid = gr.Button("Start")
next_btn = gr.Button("Next")
gr.Column()
with gr.Row():
html_out = gr.HTML("""""")
with gr.Row(visible=False):
hid_box = gr.Textbox()
def shuf(tog):
if tog == "Image":
return gr.update(visible=True), gr.update(visible=False)
if tog == "Video":
return gr.update(visible=False), gr.update(visible=True)
def load_image(url):
return url
im_load = load_im_btn.click(load_image, inp_url, inp_im)
next_btn.click(process_vid, [inp_vid, hid_box, every_n], [html_out, stat_box, hid_box])
vid_load = vid_url_btn.click(dl, vid_url, [inp_vid, html_out, stat_box, hid_box])
vid_proc = go_btn_vid.click(process_vid, [inp_vid, hid_box, every_n], [html_out, stat_box, hid_box])
im_proc = go_btn_im.click(rev_im, inp_im, [html_out])
source_tog.change(shuf, [source_tog], [im_box, vid_box], cancels=[vid_proc, im_proc, im_load, vid_load])
app.queue(concurrency_count=20).launch() |