Reverse-Image / app.py
Omnibus's picture
Update app.py
9be5312
raw
history blame
13.9 kB
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=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 goog(inp):
out = requests.get("https://serpapi.com/search.html?engine=google&q=data%3Aimage%2Fjpeg%3Bbase64%2C%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F2wCEAAoHCBUUEhgVFBUZGRgYFR0ZFRwYGhweHBoaHxwZGhwYHBocIC4lJR4rIxwaJzsrLDExNTU1ISQ7QDs0QjA0NTEBDAwMEA8QHBISHj0rJSs0NDY9NDQ9ND80NDQ0NDQ2NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NP%2FAABEIALcBEwMBIgACEQEDEQH%2FxAAcAAEAAgMBAQEAAAAAAAAAAAAABQYDBAcBAgj%2FxAA5EAACAQIFAgQEBAUEAgMAAAABAgADEQQFEiExQVEGImFxEzKBkUKhsfAUI1LB0Qdi4fGSohYzgv%2FEABgBAQEBAQEAAAAAAAAAAAAAAAABAgME%2F8QAIREBAQACAgMAAgMAAAAAAAAAAAECERIhAzFBE1EicYH%2F2gAMAwEAAhEDEQA%2FAOzREQEREBERAREQEREBERAREQPImtjcYtJdTfQTBg81SodPyt0B6%2Bxk3N6XV1tIxESoREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQKt4qraalO%2FFifsRvNTEkadXt9PUR48Ol6DXtfUv6H%2FM1KTmpTNnBsLkW3%2Fz%2BU52b27Y3UlWfIsx%2BKulj5l6%2FwBQ7%2B8l5zjKswKOlrlgx4vuD6c2l%2FwuKWoupTcXse4I5BHQy43fVTy4cbuemzERNuRERAREQEREBERAREQEREBERAREQEREBERAREQEREBETGaijlh9xAyRPAZ7ARE0czzOlh011nCjp3PoB1gVj%2FUl9NGk9vlqH9OJU8tz74QcLvqsF0kACw6W636%2Bk2fFXihcU3w1cKikDSQSxYhHDEi4BtYAep3MjMsqKhLLTVmG4Nr78cjptOGWVmTtjJx7Y8RmOISuD5rtdmNmtY9VNuh%2B32l58F5ytRtDMPiFbHf57WsfcC%2F39JXznVRxo0KVIsSykG2%2B3vz%2Bcjspy5UrGsKzoQboDwDvvcci35fWJlJdtZXeOnZokbkmNFWkDrDsNmI239um1pJTtLvtws09iIlQiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIGOpfSbc2NvfpKhSC1Llvmueb8%2B0uUqufZeyP8VPlY%2Ba34W7%2Bxmcp9dPHreqj63xqR%2FlvUX%2F2XnsQfymel4prU%2F8A7UVx3TZh7gyPrZpUVgHB033Nukw4%2Bsj02dFAIXcA7ncEA25J25%2F4mZrXTeWNnuJ5fG9AoW0vqBtpGm%2FNuSQLX%2FexlGzzNGxuLZbEIq%2BRgwttygvYje3m6m%2FtPl8sYBqrrp1Hy8XNxa9vv0kdXpURWppXRtLkoCptpLWGoG%2B1jb1ExMrbqpcZPTEKaMhU%2FwAtw6BiPKwp6lDcdr34tt6SSx2Fr4HE03e1TDu6oTb5SbDf%2B02q%2BQNTramdn07gkAhgVZbt2cg6SeDz3vYMlqIpRGAKXAsxJCm4sRq6D6RbBA5g9LC4p9Zd3Zg6UaQLMq72vwBe19zvNtMV8Sg%2BIo0QArFClQ6WUjazjSTc7%2FlIfxJh61HEYpKVYU6j1hVbWqfzKTWKgO24CkFdudO%2B1pMrSb4NV3JX4yUlUMNJYpfU%2Bnou%2BkE82PTcsp9Mbd6ZPC%2BePh3U16TIlVRbR5lFz5Tbnbf7zp04%2FgMZiKlNKWHYAUS7VnceU6mLKi362Pba4nSfDWIqPh1NYAOCQ1hYen5Wm8L8Zzx%2BpiIidHMiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICY6iAggi4IsR6TJEClZ1lGh0AZtLkqLD8VrhT2v395z%2Bo7%2FxCBWsvxAGLGwFjZtXH3%2BonbsTQWopVhcH9RuCPUGc58deHGRfi07FSwDWAFiTa7enqJyyxsvTvj5dzVe53UV6gCtdQgPUqTYmwB2vxveROYJSqUFp44aN70mp6mqk82C2PF9zx3Im3SwzUwgdg7FBqtsDpPUD06zHjsA9ap%2FEOP5D0Goq1PUTSbY67C50nfccWmJeyzUTmV1aFZEw%2BuotZEAQV1Cs%2Bkc7eVjaxIG%2FBtPUwbK3m%2BoI4O%2FbbmVXL%2FDNZ6ehcRr%2BHWNYYhi%2BzaTpRXaxLFjva9he%2FIm1lueVrgV21vrIZrdR7bcfoZjy9TprxTl7ZvFLVDVo1QwVqOwuORcEAsf3vN%2BupxH83EKyr7n0AAt37C53kR4l8QUzSYoocruxtsLdhtcn7f3s1DIT%2FAA9CoCFqaEu1h5LgkuBwz%2BYhbggE3tJjjnce2srjL02aWUUqVMWUBQt1S3QEtcjuSQT7SW8No%2Fwi1S93YtubkA8DbYC0jqdO6tT2G%2FG7Ob%2FiZr%2FN6X2Em8qqoU0o6toJVrG9iuxB3NiCOJ2wne3HO9aSMRE7ORERAREQEREBERAREQEREBERAREQEREBERAREQERNLF5hTpWDMNR4UEX%2B3baBuSIz7G4ZKZXEsuk2uNy3OxAG%2B3N5CZv4qIutLT2O%2B59r8b2nMMxr1XqOzuSL6ieQObD9dpm5T01Mb7TuYYxKhdqFRvlZQzCzKLHkHYHb2My5WmJp4Wi%2BGqa0KAEMwW1rC3mtcde8qFHFGlU%2BG5IRxpqNfzKrXta%2FHQ8Sdq0GJw9Fx%2FKpFjqBshUgBbgc33P195xymnXHtNYXMauJqlCdQpWD2Nxr%2FpuNtvvcTbXCoSqNTXQ7E3LEO%2B%2Bm6IgLkA%2Fi2FzzNrJHw6MfOh6aVVVQX3G306yVqVVZ2KMt%2FxWNme1gFLdF9BOdxl7amVnSCzTwDgqik03q03I3AbUO41q3B37g%2FaT2TYx6lNQaZGlQovbSLWFx6bdplFRPh6ajqoA8wX%2Bni3tITxH45oYRdFEa6lhtbyrfcXPU26fe09GO65VN5hiqa1Fw%2BsLUqKwSx8wYqxB%2FI2vyZEYbONDKigamqlfL1IQfEZuw%2BIHnO6WYVqlUVmN6usOlz8pDagSfW1gP0F5eqlegjVK4Gku7ML8jUxb6ExnZjNQxx37TmJ8UfAqIrjUGIDaRdhe9jtLUjXAPcT8%2FVcyqYjFoirqAawHH11dp3fKiTRTVzpsd7%2FnLjb9Zyk%2BN2IibZIiICIiAiIgIiICIiAiIgIiICIiAiIgJjq1FUFmNgOSZ5VqBFLMbBQSSegE5p4u8RV3OmiCFY2WwvpFrlj%2FALiCPaS3Sybbvi7xPXK6cKCFU%2Bci2ore3J4H5yITMlYMiN50Qs9wT57Ak%2B4vK9l2NenWZ64LNV2RX2AUH5iON7SWzGqlArVQ71BpRALAi4JJIN97k%2Bpt2meVa4xE1UqWNr6n9BfSArax37duZ8Ypgp2N1Vd7EEEi3Pf8P1vNeljXcVH03bZAoHF%2FS%2F1v3mnVwwp6wTf5Rv0J3Ive9%2F2bTGm9tWlhi9TzdTduevXfmW2jmlVEXQA9PfUCtwvoTwB12H9pCfwuiotyPNb1t%2BKx95IYLMWpGyAsj31qx31C%2FmA4O1z%2FAPmL2JvCZ%2FQ1AGmgKm1wtrbEsbAc2BO3Yd5v4jP6QDfC0AgWBv1IZie2%2BkH2lco4XDMoZX0MANNweTY3Pa9hf0%2FOPq5BQQ6nxI0lkNlBY%2BRXQA%2BpH7EnE5NjOM41jV8Y2O1lGkPtY73J07%2FsbzZzXDpiMuoYinWpH%2BFpMKi33BYU77W%2BYaODzfmQ%2FwD8Vw%2FLVqrIDcArp24BuxA47TZp%2BGcIFLhXYAc%2FNvsbHST0v7faXH%2BN2XtVaWebglCw6joSevv%2B9pP0sacSNCvoXjS6XKb%2FAISP89pcsvwOGHlVUsANja56gH1IPvxLRgqNIEEKqmwsbDfpz9x9pLZbtZuRT%2FCPg8UX%2BI7BjyNN7d777zqWVVAVKjpv95XcY7K5CJYAXv0H0H%2Fc28ixqiroZru4JUC52XknbYS45fyZynSzxETs5EREBERAREQEREBERAREQEREBERAREQK348rFcDUt1sD7cn9JzfNM1eiyIqXJpB9RBvqY24HXp9BOi%2BPXtg2PO%2Fy9WHUAdSBcyj5TiEqVaruLhNDUyW6FQQLX6sAZjJrFq%2BI8M70VqMtqjqlIKRa1yTffjoTIxcE7Yxabg6aNJNOw4te44H7%2BkmMNmb1KWG%2BOjMXruEK9LbAm%2FW1z7C82K2Z4Z8WyAkVChTi21jYA3%2FLvM9xphp4IUDWruwAIuhHTbe9ulx03%2Bkp2GZ6lQvbUNYa4BFxbTcC1vvxLomX1UwboSXIY9LHTe4BLcWv6%2B0%2Bcoy5Ph3sAB5it9Wkn%2Fbzfm2%2FW0zvSqvmb1GZ9S6NBDAi99NrEX4B%2FuPpNzDgOquikOi6fNYq%2FU889u95hzCs1Ou5e%2BhtgOgFvfc9%2FczRLsjIo4ALKNiPY9Lb%2FvmFSNOkjq5BKlqwLG5ABGrYDt%2Bpm3halH4hVajBzYgIga5A3A25sT16zQyrRUqOtUaXcKVQ2ZL%2FADayLgbW69t5LAcUUxSEtfUAg1nnjQQAPp22liVkxOBRvPoBsblX1ajbsCbW3%2F6mH4tM2VVNOpfhbBgL23QbEd%2F%2BJgXwzilYlcQqIdwCGZufVht9f7mQ2bUXFUAVzrUWBFMgf%2BZNuh24ixZV3bCXXcKG5JXa55Fx9SZtZLmqOWpXGtNvLuAbCwP9Jt%2Bhtec2wOU4yrUCO726kMbj2N%2Bfe%2FSXrA4H%2BERTSuGuNRa5Y99XPe95zysjU3Vmo1AiB8Q4Ww%2BW12Pbj06AT3CYymcWrJbWRptxZL3ZmsL%2FAH2vK5neZIqa3IJ%2FDqO1%2FwCr0kN4XonFlmd3SgrWIVtLViNyWcm4UdAPe%2Fa41LHcZ7IjJM3w9ZNNCor%2FAA7IdB1AED5dXF7esl56JduFmnsREoREQEREBERAREQEREBERAREQERECteJqjA8hV07Mfwk3ufyAnLsidWsQ6EVBZmU%2FiR7nyg9fOfYidmzTL6ddNFVVdOqsLiRdHw1hUFkw9JOxSmoI9iBeY%2FH3btrn1JpSM3rDD1MLTVboBzsQfXnmx2kL4wwxo4yniVI0v8ANcHpzew3%2FOWnxX4YrNoegLmmdrHzFb3tv2mvmtEfwTnELeyXAc2IO%2B9uh9JLLFljB4hzvRhNQViW2DEXF%2Bd7n1kZ4SxTvQfycrcn8R5F7WsR2O%2FX6spy34%2BCVC6EfMoI2C9rje9vabWRVkFU0aOllA81iAAb23vzz%2B9pNNbRC4V6g%2FmIy6W2Ym4PJudt%2B305ldNZxUZFII3BuQft%2Bk6B4vxpSiShCs%2Bw9T2Hrv0lBp4FUXks5IUkG253ax9BeSQqZyTC%2FGRVq3V9ZvovcqAuwO4BPc%2F7gJJZtmGFwK2WysV2RFDM2%2F42PH5THTwWISmfhOqaxquei8Cwtcm3X1mvgfCVJG%2BLiH%2BIdyxewQfnfr3mvjKvYnxNia%2FloJpXoB5m24H58W6z3A4XHF9TXb0c7dD2Ntr9JO5j4pw9LyUwXtzpUBQRt821%2BOncyOwOf4uu96SNp66dKqPdyvH77SX16X%2FVly3Eh1ZHU02RfkPmDg23v9hNl8WEpknZVFhNVcezEvinpUgFt5AS1tr6ixAJuei3%2B8wZuuCqYcu1eoqX8oKWLHiwW4JN%2B9h%2Bs5XHddJl0p2bZjUxVTQt9N9yOCv1mTOs8anSXC0W0qB5yp%2F9QR%2BfeWIZBhUwgd67UwyklVQs5Xtsfv8ASfeG8M5dQanUxFUnW38tNz2N262FuO9%2FYblxZsq0eFsY2Hy%2FDqigO4Gxvtfck2BJPHv6dLVhc3qKfO6MeoO30AFyPqTILG4%2BgqKaRGuwWmpGk3J0gWPHWamIoBAVpWNV2O6kF9R5sfScpnlK3wljoeDzFKlgDZuqts32O83ZzGg2IQKrMQyjYuoZif6iTv8Aa39pPZZnVVUUOS%2FclWuT6AdPWd55J9crh%2BlwiR1HMww%2BVh7i36zI2YoOb%2B9tvvN8ozxreiY0cMLgzJNMkREBERAREQEREBERAREQPk8TWtNuYHSWDGRMWIwiOul0Vx2ZQR9jM9olRHpk9BRZaSKLWsoCi3awkWnhijRqPWpKVZlOpRuD6gd9uksdok1F25FmWBdqhqVNaMzEKSt7KDtsdh04F5BMKauQ%2BnZT5kLamBudKJva4vdzbrbnbu1WirCzKD7iUbxD4cNN3rppCBCbLq1htrmw2IsDMcdNTJT8PVAp%2FFxBK22ppwEUbKtv6rAcde0gMbiq%2BOqClT1JT7dx3c9fqYzes%2BIrJSQMBf8AEe9u8seT0UpAgG7cG3J2ta1unf8AzYRUPlvg0Kyl2Delttvw34PW%2FH94z%2FPBQHw6W3l4tsD6eg9uvpLNjMdppsxUEKvl7aj0%2FwCf8bUjKsu%2FicR5t%2BSbe%2FJ%2B%2FwCnvJ77q%2F01MmwVTFVQzk6AQTfjpfb%2B0t2MyRa9VLL5EA3G67XsoI9AN7WO%2FYW1c7qJhglBDY769PzgX4vtud%2FtvLGtZKGHUsAq6OCd%2B1j6nb9O0xlb7akUPxVjmaqaSMbCwsLi%2FwA25APpx7GTr4AtRpNX1jQx8tyS19GlQPqb%2FXbqI%2FKMJ%2FE1WrhL2cWHrcX34%2FF%2Bstua4caEd2OmmNRC76nGkqLn1I45t9mXyE%2FbWzBmWpQ0kHXURWsDsFFxv1t335vttNfHPVfECmpYIh1M9zdmPCDoVFrkdpuohFMVnW2x0J1UEat%2FXp326dPFcIpqMdRcroAtZSSOLb7t99phUUmYVamZXDMfhpocki1iDsSOlgD9DeSnhvO62h21sR8RlQG%2Fyg%2BVVDbCwtxzaYcvoopdVZnbWxcjkA7qvsBYd%2BJlfDkAKTcL5gbAWHG1jsANvrzzJlVkTuGzyqT5gTt5iRYe9uLfu0YnxG42UAdrX%2BhNpXv4ao3l1EdBcm556n6TJRyesh1itr07lXHHJNnG%2B3Yg9Zz7%2Fbp0ufhvPma%2FxAw9beX1F5ckcMARuDxOaZdi1dbpYEGx9%2BDcfT9ZcvDVZijhiSqkaCexFyPpO3hz741y8uHXJOxPJ7PS4EREBERAREQEREBERATwiexAwlbT5tM8%2BGSXYxxaIlQnxUphgQRcHkT7i0CtYjwVg2fWKehjyUZlvfuL2mng%2FwDT%2FD0mZkqVPNzqKm3t5RLjaAJNRdqbmXggVUKrWKk8EoDbvtffaaWRf6enDMWXEXJG%2Fkt1vzqMv9otJxhyqjYzwErVVqrUCOOvww1z3IY8zLnngs4mmEeqLrwxS%2F5XtaXS09tJxxXlVDyXwRUoXDVlKkWCqmkD2t3m6fCbXJLht7qDe3Ft%2FX9%2Bst1p7JfHjVmVikYnwzXZbApyL3JsRYg%2FrtPG8MVT8yodt7sTvckEbbW2sJd7RaT8eK865k3hTHI7NTFJtRBYkkEgXG%2B3I%2FufSYsRl2PUnVhg55BV1twO%2FwBfvOpWi0v48U%2FJk5dhsDiyRqwzrtvcqf0b2m3QwWKvY0ntfr27frOjWnmmYvhxa%2FLk5hlPhPFCs9RwEDuzWDA2v0tx0E6Xl2HCUwo2tMmmfdOaxwxxu4zc7ZpliIE2y9iIgIiICIiAiIgIiICIiAnhiIHwyzHESj2IiVCIiAiIkCexEDyLRED0LGmIhTTGmIgNM8tEQAEyKIiB9T2IkCIiAiIgf%2F%2FZ&location=Austin%2C+Texas%2C+United+States&google_domain=google.com&gl=us&hl=en")
print (out)
def dl(inp):
out = None
out_file=[]
try:
inp_out=inp.replace("https://","")
inp_out=inp_out.replace("/","_").replace(".","_").replace("=","_").replace("?","_")
os.system(f'yt-dlp "{inp}" --trim-filenames 160 -o "{inp_out}.mp4" -S res,mp4 --recode mp4')
out = f"{inp_out}.mp4"
#out_ap = os.path.abspath(out_f)
#out = f'https://omnibus-reverse-image.hf.space/file={out_ap}'
print (out)
except Exception as e:
print (e)
#out = f'{e}'
return out
def process_vid(file):
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=""
try:
for i in range(frame_count-1):
print(i)
capture.set(cv2.CAP_PROP_POS_FRAMES, i)
ret, frame_f = capture.read(i)
cv2.imwrite(f"{uid}-vid_tmp{i}.png", frame_f)
out = os.path.abspath(f"{uid}-vid_tmp{i}.png")
out_url = f'https://omnibus-reverse-image.hf.space/file={out}'
print(out)
res = rev_img_searcher.search(out_url)
#print (res)
if len(res) > 0:
count = 0
for search_item in res:
print (f'counting {count}')
count+=1
out_dict={
'Title': f'{search_item.page_title}',
'Site': f'{search_item.page_url}',
'Img': f'{search_item.image_url}',
}
print (dir(search_item))
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}'))
else:
pass
except Exception as e:
return (gr.HTML(f'{e}'))
return (gr.HTML('No frame matches found.'))
def process_im(file):
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://omnibus-reverse-image.hf.space/file={out}'
return (out_url)
def rev_im(image_url):
#image_url = 'https://i.pinimg.com/originals/c4/50/35/c450352ac6ea8645ead206721673e8fb.png'
out_list = []
out_im = []
html_out = """"""
rev_img_searcher = ReverseImageSearcher()
res = rev_img_searcher.search(image_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}',
}
print (dir(search_item))
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}'))
def shuf(tog):
if tog == "URL":
return gr.update(visible=True),gr.update(visible=False),gr.update(visible=False)
if tog == "Image":
return gr.update(visible=False),gr.update(visible=True),gr.update(visible=False)
if tog == "Video":
return gr.update(visible=False),gr.update(visible=False),gr.update(visible=True)
with gr.Blocks() as app:
with gr.Row():
gr.Column()
with gr.Column():
source_tog=gr.Radio(choices=["URL","Image","Video"],value="URL")
with gr.Box(visible=True) as url_box:
inp_url=gr.Textbox(label="Image URL")
go_btn_url=gr.Button()
with gr.Box(visible=False) as im_box:
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")
go_btn_vid=gr.Button()
gr.Column()
#paste_clip = gr.Button("Paste from Clipboard")
with gr.Row():
html_out = gr.HTML("""""")
vid_url_btn.click(dl,vid_url,inp_vid)
source_tog.change(shuf,[source_tog],[url_box,im_box,vid_box]).then(goog,None,None)
inp_im.change(process_im,inp_im,[inp_url])
go_btn_vid.click(process_vid,inp_vid,[html_out])
go_btn_im.click(rev_im,inp_url,[html_out])
go_btn_url.click(rev_im,inp_url,[html_out])
app.launch()